【jQuery, PHP, MySQL】アウトプット作品の解説

プログラミング

どうも、えんつかです。知識定着の意味合いでjQuery、PHP、MySQLを用いて簡単なアウトプット「ボールはどこだ」という作品を作製しました。

WEB上で簡単に動きをつける手法としてjQueryというフレームワークや、PHPで数字入力判定を行い、MySQLで回答結果を集計しました。

その手法を説明したいと思います。

【jQuery, PHP, MySQL】アウトプット作品の解説

本記事を読むことで得られる知識

  • jQueryアニメーション動作
  • PHP回答条件分岐
  • MySQLでの簡単な計算

アウトプット作品

リンク先

学習の一貫でアウトプット作品を作製しました。是非遊んでみてください。

箱の中にボールが移動し、箱が動くのですが、ボールが入った箱を当てるというゲームです。 ボールと箱の動作はjQueryで行い、回答はMySQLで飛ばし、回答傾向の出力も行ってみました。

jQueryでのアニメーション

まず、ボールとボックスをそれぞれクラス指定します。

ボックス:<div class=”container1”></div> ~<div class=”container4”></div>

ボール:<div class=”ball”></div>

次に、動作ボタンを作製します。クラスを「start」としました。

<div class=”start”>

<button type=”button” name=”button” class=”button1″>スタート</button>

</div>

次に、jQueryを動作させる為のコードを挿入します。

<script src=”jquery-3.4.0.min.js”></script>
<script type=”https://ajax.googleapis.com/ajax/libs/jquery/3.4.0/jquery.min.js”></script>

ボールとボックスの動作コードを挿入します。

startクラスをクリックすると連続で動作するようにしました。

<script>

          $(function(){

            $(“.start”).click(function(){

              $(“.ball”).animate({“top”:”10px”},1000)

            ※$(“.ball”).animate({“top”:”200px”, “left”:”200px”},200)

              $(“.container1”).animate({“top”:”0px”},1000)

              $(“.container2”).animate({“top”:”0px”},1000)

              $(“.container3”).animate({“top”:”0px”},1000)

              $(“.container4”).animate({“top”:”0px”},1000)

※繰り返し

$(“.start”).click(function()でstartクラスをクリックすることで動作する指令を出します。

クリックすると始めに、$(“.ball”).animate({“top”:”10px”},1000)を行うことで、ボールを箱へ移動させています。

.animateで動作。({“top”:”10px”},1000)はそれぞれ、位置情報と移動速度を表しています。

次に各containerクラスを動作させます。Top:0pxで初期位置設定にしており、再度startクラスをクリックすることで初期位置に戻るようにしました。

これ以降は、同じ構造のコードを書きます。好きな位置情報と移動速度を指定するコードを記入することで、連続で動作します。

最後に、

$(“.container4”).animate({“top”:”150px”, “left”:”210px”},{duration:200,complete:function(){

$(“.number1, .number2, .number3, .number4”).fadeIn(1000)} })

をコーディングしています。

動作後に、.number1, .number2, .number3, .number4のクラス指定した数字をfadeinで表示させています。

PHPでの回答条件分岐

PHPでの回答を条件毎にいくつかに分岐しました。

数字が入力されない場合

if(!empty($_POST)){

  if($_POST[‘answer’]==”){

    $error[‘answer’]=’blank’;

  }

として、$error[‘answer’]を返して定義しています。 回答入力欄では、

<form class=”” action=”” method=”post”>

<input type=”text” name=”answer” placeholder=”整数で入力” size=10>

<input type=”submit” class=”button1″ value=”回答”>

<?php if(isset($error[‘answer’]) && $error[‘answer’] == ‘blank’):?>

<label class=”info”>数値を入力してください</label>

として、数値が入力されない場合は「数値を入力してください」を出力しています。

整数が入力されない場合

先程の数字が入力されない場合のコードに続けて、次のコードを追記・定義しています。

elseif(!is_numeric($_POST[‘answer’])){     $error[‘answer’]=’int’;

回答入力欄では、以下を追記しています。

<?php elseif(isset($error[‘answer’]) && $error[‘answer’] == ‘int’):?>

<label class=”info”>整数を入力してください</label>

1~4以外の数字が入力される場合

以下のコードで定義しました。

  elseif($_POST[‘answer’] > 4){

    $error[‘answer’]=’big’;

  }

  elseif($_POST[‘answer’] < 1){

    $error[‘answer’]=’big’;

  }

回答入力欄では、以下を追記。

          <?php elseif(isset($error[‘answer’]) && $error[‘answer’] == ‘big’):?>

            <label class=”info”>1~4の整数を入力してください</label>

          <?php endif;?>

endifがあるのは、前述で記載している回答入力欄をすべて含めてのendifとなります。

MySQLを用いてデータベースへ送信

PHPでの入力が問題なく行われた場合は、SESSIONにデータを送り、データベースにもデータを送信します。完了すれば、別ページに移動も指定しています。

$_SESSION[‘join’]=$_POST;

    $statement=$db->prepare(‘INSERT INTO answer_list SET

      answer=?,

      date=NOW()

      ‘);

      echo $ret=$statement->execute(array(

      $_SESSION[‘join’][‘answer’]

      ));

      header(‘Location:answer.php’);

      exit();

answer.phpでは、送信されたデータに基づき、計算を行いました。

$records=$db->query(‘SELECT COUNT(id) FROM answer_list’);

$record=$records->fetch();

$records1=$db->query(‘SELECT COUNT(id) AS count_id1 FROM answer_list where answer=1’);

$record1=$records1->fetch();

$result1=$record1[‘count_id1’] / $record[‘COUNT(id)’] * 100;

$result_show1=round($result1,1);

まず、最初のコードでは、回答数を$recordに定義しています。

次に、回答で「1」を入力した場合に、「1」を入力した場合の回答数を$record1に返しています。

そして、$result1で回答率を算出しています。

最後に、$result_showを小数点1桁までと定義しました。

これを、各ボックス数だけ作成しました。

定義ができてしまえば、こっちのもんです。

あとは、htmlの中に、以下を組み込むだけで、回答率が算出されます。

その他の回答についても同様に記述すればOKです。

  <p>「1」回答率:<?php echo $result_show1;?>%</p>

以上となります。

参考になれば幸いです。

まとめ

今まで私は、HTML.CSS,Bootstrap,jQuery,PHP,MySQLを学んできまして、これらの知識を総動員してアウトプットを行いました。

結果、エラーに大変苦しみましたが、作品を作製する中で、企画からやりきる力、自分で検索して検討する力が試され、身に付いたと感じています。

また、やはりアウトプットを行うことで、知識の定着化が進んだように感じます。脳科学的にも、インプットよりもアウトプットすることの方が、知識の定着化が進むようですので、皆さんもある程度知識が着いてきたら、是非アウトプットを行ってみてください。

知識の定着化をより促進させたり、復習の為にも定期的なアウトプットが良いと思うので、また今度作品をアウトプットしてみたいと思います。

今回は以上となります。最後まで読んでいただき、ありがとうございました。