ラベル Jquery の投稿を表示しています。 すべての投稿を表示
ラベル Jquery の投稿を表示しています。 すべての投稿を表示

2011年5月11日水曜日

iPohne用のHTMLで最初につまづいたところは、なんとラジオボタンです

iPhone用にhtml5とCSS3・PHP・MySQL等々でゲームらしきものを作っていたのですが、思わぬところでつまづいてしまいました。
 といいますのは、ラジオボタンそのものを大きくできないというところです。と、文章で書いてもいまいちイメージが浮かばないでしょうから、以下にラジオボタンの使用例を上げておきます。パソコンでマウスを使用するなら何ら問題がないのですが。


ラジオボタン使用例:
  
  


 iPhoneでの操作はタッチスクリーンを使用しますが、ラジオボタンで選択する部分が指で強く触っても中々認識しません。そこでラジオボタン部分のサイズを2本の指で大きくしてからですと認識します。これではせっかくの流れが止まってしまってまったくゲームらしくないのです。普通のsubmitボタン部分はすぐに反応するのですが。

 そこで、ラジオボタンを最初から大きくして置く方法を探しましたが、文字の部分は大きくすることができるのですが、肝心な○の部分をどうしても大きくできません。CSSだけではどうしても無理なようなのでJavaScriptやJQueryも調査して見ましたが、どこにも見あたりません。いやー困りましたな。どうしようかと真剣に悩んでいます。これでまた頭頂部が薄くなってしまった。

 ラジオボタンに替わる方法に変更するしかないのかな、では何を用いればいいのだろうか。私の乏しい知識で思い浮かぶのはsubmitボタンを2つ用意するということですが、ではどちらのボタンが押されたかをどうやって認識すればいいのかということであります。以前にどこかに隠し文字列を持たせてURL文字列につけて飛ばすなんてのを見たような気もするのですが。そうなるとプログラム自体を改造しなければならず、これはこれでやっかいであります。どうにかならないかなラジオボタン

まさかこんなところで躓くとは夢にも思っていませんでした。

ダレカ タジゲデー!!

2011年4月13日水曜日

PHP MySQL JavaScript Jq HTML5 CSS3 混沌としていて頭のなかで繋がってこない

 昨日これまで作成していたWebアプリが完成した。いや完成したことにした。HTML部分のJavaScriptとCSS3部分は以前に学習のために作成しておいた部分を流用した。PHPとMySQLの部分は付け焼き刃で関連するサイトを調べまくりほとんどパクって稼働まで漕ぎ着けた。
 ひとつのアプリを作るのにPHP MySQL JavaScript Jquery HTML5 CSS3これだけのものを使わなくてはいけない時代になったのかと思う。どれも私は中途半端にしか理解していないので、全体を俯瞰してみるとまったく繋がってこないのであります。全部をPHPでやらなくてもJavaScriptで十分な部分もあるだろうし、Jqueryを使えばもっと格好良くできるだろうと思える部分もかなりあるのだが、全部がバラバラの状態で全体が繋がってこないのです。ま、どっちにしても年寄りの冷や水的なプログラムだからしょうがないのだけども。
 ソースを公開するのは、自分のバカさ加減がバレるようで結構恥ずかしいのですが、管理部分を除いた表示部分を一応公開してみるか。これで動作することはしているのですが、どこかに欠陥があったら教えて欲しいです。

 ソースをアップしてから気づいたのですが、DBの接続部分が3回もあります。プログラム的にはかなり饒舌だと思います。これを1回にまとめて関数化して、引数を渡し条件分岐するのが正しいと思う。なにせこれまではエラーなく動作させることばかり考えてきたので、動くなら、何度でも書けばいいやって、まったく余裕のないことをやっていましたので。少し余裕がでてきました。

 因みにDB接続部分だけを関数化して必要な場合だけ呼び出すようにしてみたけど、何故か動作しなかったのであります。なんでかというのを追求しないまま、それぞれの関数の部分に接続文字列をコピペしてしまいました。

実物はこちらにあります。挑戦!一発免許学科試験問題
なぜか、IEで見ると右側に寄ってしまいます。たぶんCSS3を変更しないとダメだと思います。今のところIE以外のブラウザーで見てください(そんなWEBアプリありかよ^^;)HTML5とCSS3で作成していますので、お!っていう部分があると思います。IEはほとんど対応していません。これからIE対応をしなければいけないのですが、気が重いな。やりたくないな。IE捨てちゃおうかな。別にオレ困らないもんね。IEなんか使っているのが悪いのだから。

<?php
/*****************************************************/
/*       学科問題出題システム                        */
/*****************************************************/

 session_name('hogehoge');
 session_cache_expire(90);
 session_start();


//システム全体の制御
    if ($_SESSION[ "btn_caption" ] == "次の問題" or $_SESSION[ "btn_caption" ] == "") {
        making_question();     //新規問題作成へ
    } elseif($_SESSION[ "btn_caption" ] == "答え") {
        answer();     //答えあわせへ
    }

/*****************************************************/
/*       答えの正誤判断する                          */
/*****************************************************/
    function answer(){
    global $radio1,$radio2,$kaitou,$kaisetu,$ketuka;
    global $div_kaitou,$div_kaisetu,$div_ketuka,$end_div;

            $_SESSION[ "btn_caption" ] = "次の問題";
            $radio1 = "";      //ラジオボタンを表示しない
            $radio2 = "";      //ラジオボタンを表示しない

            //正誤判定及びメッセージ作成
            if($_REQUEST["seigo"] == 0){
                 $answer2 = "あなたは上記の問題を○と答えましたが、";
            }else{
                 $answer2 = "あなたは上記の問題を×と答えましたが、";
            }

            if ($_REQUEST["seigo"] == $_SESSION[ "seikai" ]){
                $answer = "おめでとうございます。それは<strong><span style='color: red; font-size: 20pt'>正解</span></strong>です。";
                $_SESSION[ "seikaisu" ]++;
            }else{
                $answer = "残念ですが、それは<strong><span style='color: red; font-size: 20pt'>間違い</span></strong>です。";
            }
            $kaitou = $answer2 . $answer;
            $kaisetu = $_SESSION[ "kaisetu" ];

           //---------------これまでの成績を計算する------------------------------
            $ritu = round($_SESSION[ "seikaisu" ] / $_SESSION[ "count"] * 100,1);
            if ($ritu >= 90) {
                $msg = "<strong><span style='color: yellow; font-size: 17pt'>合格圏内です。この実力をキープしてください。</span></strong>";
            } elseif ($ritu >= 80) {
                $msg = "<strong><span style='color: yellow; font-size: 17pt'>あと1歩です。90%を目指してより一層磨きを掛けてください。</span></strong>";
            } else {
                $msg = "<strong><span style='color: yellow; font-size: 17pt'>もう少しがんばりましょう!。</span></strong>";
            }

            $ketuka = "これまでの<strong><span style='color: red; font-size: 20pt'>正解数は" .$_SESSION[ "count"] ."問中". $_SESSION[ "seikaisu" ]. "問</span></strong>です。<strong><span style='color: red; font-size: 20pt'>正解率は" . $ritu . "%</span></strong>です。<br />" . $msg;

         $div_kaitou = '<div id="kaitou">';
         $div_kaisetu = '<div id="kaisetu">';
         $div_ketuka = '<div id="ketuka">';
         $end_div = "</div>";

            update_go();    //間違った答えをdbに記録する
    }

/*****************************************************/
/*       新しい問題を作る                            */
/*****************************************************/
    function making_question(){
    global $radio1,$radio2,$kaitou,$kaisetu,$ketuka;
    global $div_kaitou,$div_kaisetu,$div_ketuka,$end_div;

           $dbname = "hogehoe";
           $hostname = "mysq5879.db.sakura.ne.jp";
           $userid = "nantara";
           $passwd = "kantara";

          if(!$con=mysql_connect($hostname,$userid,$passwd)){
               print "データベースに接続できません". mysql_error() . "<br />\n";
               exit;
          } else {
               mysql_query("SET NAMES utf8");    //文字化け対策
          }

         mysql_select_db($dbname,$con);

        //問題の総件数を求めます。
        $sql="SELECT * FROM mondai";
        $rst = mysql_query($sql,$con);
        $maxdeta=mysql_num_rows($rst);
        //乱数を発生させます。
        $rand = mt_rand(1, $maxdeta);
        //乱数で得た問題をひとつだけ選択して表示します。
        $sql="SELECT * FROM mondai where id = ".$rand;
        $rst = mysql_query($sql,$con);
 
       if($rst==False){
         print "レコードセット収得に失敗しました。";
         exit;
        }

        $col = mysql_fetch_array($rst);

        $_SESSION[ "id" ] = $col{"id"};
        $_SESSION[ "mondai" ] = $col{"mondai"};
        $_SESSION[ "kaisetu" ] = $col{"kaisetu"};
        $_SESSION[ "seikai" ] = $col{"seikai"};
//        $_SESSION[ "imgurl" ] = $col{"imgurl"};
        $imgurl = $col{"imgurl"};

        if(!$col{"imgurl"} == ""){
           $_SESSION[ "imgurl" ] = '<img src="http://hogehoge.jp/images/' .$col{"imgurl"}. '" />';
        }

        $_SESSION[ "access" ] = $col{"access"}; //アクセス数を求める
        $_SESSION[ "go" ] = $col{"go"};         //間違いの数を求める
        $_SESSION[ "btn_caption" ] = "答え";

        $access = $_SESSION[ "access" ]+1;
        $id = $_SESSION[ "id" ];
        $sql = "UPDATE crowner.mondai SET access = '$access' WHERE id= '$id'";
        $rst = mysql_query($sql,$con);
        if($rst==False){
           print "レコードセット収得に失敗しました。". mysql_error();
           exit;
        }

       mysql_free_result($rst);   //レコードセットの解放
       $con = mysql_close($con);  //データベースの切断
       $_SESSION[ "count" ]++;
       $kaisetu = ""; $kaitou = ""; $ketuka = ""; //コメントを初期化(空に)する。

         $div_kaitou = "";
         $div_kaisetu = "";
         $div_ketuka = "";
         $end_div = "";
       $radio1 = '<input type="radio" name="seigo" value="0" checked />  <strong>正</strong> ';
       $radio2 = '<input type="radio" name="seigo" value="1" />  <strong>誤</strong> ';
    }

/*****************************************************/
/*       間違った問題に+1をつける                  */
/*****************************************************/
    function update_go(){
           $dbname = "hogehoe";
           $hostname = "mysq5879.db.sakura.ne.jp";
           $userid = "nantara";
           $passwd = "kantara";

            if(!$con=mysql_connect($hostname,$userid,$passwd)){
                 print "データベースに接続できません". mysql_error() . "<br />\n";
                 exit;
            } else {
                 mysql_query("SET NAMES utf8");
            }
          mysql_select_db($dbname,$con); //データベースの選択 ☆この一文は必要です。ここを試しに削除したらエラーになった。


        $go = $_SESSION[ "go" ]+1;
        $id = $_SESSION[ "id" ];
        $sql = "UPDATE crowner.mondai SET go = '$go' WHERE id= '$id'";
        $rst = mysql_query($sql,$con);
       if($rst==False){
         print "レコードセット収得に失敗しました。". mysql_error();
         exit;
        }

       mysql_free_result($rst);   //レコードセットの解放
       $con = mysql_close($con);  //データベースの切断
    }
?>

<!--*****************************************************/
/*          HTMLの表示                              */
/*****************************************************-->

<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="utf-8">
    <title>挑戦一発自動車免許!学科問題</title>
    <!-- The below script Makes IE understand the new html5 tags are there and applies our CSS to it -->
    <!--[if IE]>
    <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
    <![endif]-->
    <link rel="stylesheet" href="test.css" />
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

    <!--jquery関連呼出-->
    <script type="text/javascript" src="http://www.google.com/jsapi"></script>
    <script type="text/javascript">google.load("jquery", "1.4");</script>

    <!--twitter呼出関連-->
    <script type="text/javascript" src="http://widgets.twimg.com/j/2/widget.js"></script> 

    <!--基本的なJsを呼び込む-->
        <script src="./kihon.js"></script>

  </head>

  <body>
    <header>
      <hgroup>
        <h1>挑戦一発自動車免許!学科問題</h1>
<!--        <h2>Media Literacy 2010, Crowner.Co.LTD</h2> -->
      </hgroup>
        <script src="./header.js"></script>
    </header>

    <section>
      <article>

    <h2>第<?= $_SESSION[ "count" ] ?>問目</h2>

         <div id="mondai">
            <h3 id="no"> NO.</h3>
            <?= $_SESSION[ "imgurl" ] ?>
            <div id="toi">
                <?= $_SESSION[ "mondai" ] ?>
            </div>
         </div>

         <?= $div_kaitou ?>
             <?= $kaitou ?>
         <?= $end_div ?>

         <?= $div_kaisetu ?>
             <?= $kaisetu ?>
         <?= $end_div ?>

         <?= $div_ketuka ?>
             <?= $ketuka ?>
         <?= $end_div ?>
<div id="frm">
    <form method="POST" action=<? $_SERVER[ "PHP_SELF" ] ?>>
          <?= $radio1 ?>
          <?= $radio2 ?>
        <br />
        <input type = "submit" name = "btn" value=<?= $_SESSION[ "btn_caption" ] ?>>
    </form>
</ div>
      </article>

      <article>
        <script src="./center.js"></script>
      </article>
    </section>
    <nav id="left_nav">

        <script src="./testnavi.js"></script>
    </nav>
    <footer>
        <script src="./footer.js"></script>
    </footer>
  </body>
</html>

2011年1月28日金曜日

冬ごもり 心ゆくまでのプログラミング

 文字通りに冬ごもりをやっています。外は寒いですからね、自宅のパソコン部屋に朝から晩まで閉じこもってパソコン三昧の日々であります。ようやくJavaScriptがわかりかけてきました。やって見ますと自分が思っていた以上に使える言語みたいです。やりもしないで馬鹿にしていた自分を恥じてしまいます。朝から夜中までどっぷりと填(はま)ってしまっています。何年ぶりかでコードを書いていますが、これほど面白ものはないですね。今年あたりはサーバーサイド用のJavaScriptが登場するらしのですが、これはどう使うのか今の私には理解できません。ま、そんなことはほっといて、しばらくはJavaScriptをオモチャにして遊びまわるつもりでいます。
 参考書を購入するつもりはまったくないです。以前にも書きましたが、ちょっと検索すれば、優れた解説のページが山ほどでてきますね。しかも無料なんです。10年ほど前には考えられないことでしたが、今はあたりまえの世界になっているんですね。以前だったら、ひとつの言語を覚えるのに無数の参考賞を買ったり、決して安くないソフトウエアーを買ったりしなければならなかったのですが、今回はすべてタダです。ネットに繋がってさえいれば何にもいらないのですから。いや繋がっていなくも大丈夫ですね。必要なのはやる気だけの世界ですね。
 ネットがこんなにスゴイものになるとは、まったく思っていませんでした。やっぱり頭が固すぎるんですね。こればっかしはしょうがないや。

 そうそう明日は1年ぶりで都内で酒飲みます。ひょっとし、都内に足を踏み入れるのも1年ぶりかもしれない。なにせこの数年ド田舎ばっかし回っていましたから。電車に15分も乗れば秋葉原なんですけど、今の私には北海道よりも遠い場所ですね。そんな私があろうことは今回は幹事なのですから笑ってしまう。飲み屋はネットで検索して決めました。これもホント便利です。いやはや

2011年1月27日木曜日

リベンジだい

おはようございます。
 昨日までの2日間は、jQueryにほとんど跳ねとばされてしまって、ほとほと疲れてしまいました。jQueryごときに負け続けるのも癪にさわります。本日から気を取り直してjQueryに再チャレンジです。負けていられません。こうなれば基礎から徹底的にやってみます。
 ということで本日からに備えて昨夜も晩酌もほどほどにして、万全の体調で本日は2時に起きました。どうせ1週間や2週間ではこのショボイ頭では覚えきれないだろうから、長期戦を覚悟しています。たぶんこの2,3日は撥ね付けられてばかりだろうけども、決してメゲナイ諦めないの精神です。
 なあに簡単なことです。できるまでやればいいだけのことです。まったく歯が立たないというほどのことでもないのですから。
 これまでソースを読んでも理解できない部分が多かったのは、動的にHTMLをいじると同時にCSSも同時にいじることができるというのを理解してなかったから、わからなかったのだと思う。それにタグのid属性とかclass属性も重要な要素だということですね。id属性とかclass属性なんていうのはCSSだけで利用するもんだと頭から思いこんでいたものですから。これまでJavaScriptをかなり馬鹿にしていたような気がします。深く反省しました。ゴメンゴメン

 JavaScriptの良いところは、ブラウザーとテキストエディターがあれば、どこでも開発できるということですね。特別なものは何もいらない。その場でコードを書けば結果がすぐにわかる。手軽でいいんですけれども。せめてトレースができればいいんですけれども。もっともトレースするほど複雑なものはまだ書きようもないのですが。

 と、いろいろ書いていたのですが、このブログでjQueryを試せないかと思ったのです。以下のボタンがjQueryを動作させています。ただし、どのボタンも1回だけ動作します。再度試すにはブラウザーの再読込をしなければなりません。まだfalseかtrureなのかの判断の仕方を知らないからです。元のテキスト文に戻せないから1回しか動作しないのです。
 ここでたくさんの事を学びました。いや発見しました。このブログはgoogleが運営しているものです。だからgoogleが提供している"http://www.google.com/jsapi"をデフォルトで読み込んであるのかと思いましたが、どうも違うようで動作しませんでした。そこでこの文章の最後で以下の2行を書き込んでおきました。この2行は通常ヘッダ部分に書き込むようですけど、場所はどこでもいいんですね。

これらのコードはjQuery入門 (ver 1.3)様のサイトを参考にさせていただきました。このサイトの説明は初心者には実にわかりやすいです。ここ数日はこのサイトサンプルを全て自分で書いて検証していこうと思っています。他にも優れもののサイトがたくさんあります。Web制作の現場で使えるjQuery UIデザイン入門というサイトもわかりやすく説明されています。感謝です。

  <script type="text/javascript" src="http://www.google.com/jsapi"></script>
    <script type="text/javascript">google.load("jquery", "1.4");</script>

またJavaScriptの関数部分もこの本文中に埋め込みました。これもどの場所に書き込んでおいても動作するんですね。以下はその一部です。
<script type="text/javascript">
        function changeText(){
               $("#about").html("<b>軽量/高速</b>なライブラリです");
        }
    </script>




jQueryサンプル


jQueryとは?

jQueryとは?





まとめて書き換え

ここを書き換える

ここも書き換える

ここは書き換わらないよ。class属性が指定されてないから