notebook510

備忘録とか覚え書き的なところを想定しています

PHP実践 クイズアプリの制作

入門編も終わって、ちょっと実践的な内容に。
クイズアプリだそうです。

 

サンプル1

<?php
//echo $_POST['answer'];

if(isset($_POST['answer']) && $_POST['answer'] == "正解") {
echo "正解";
exit;
}
/*else{
echo "不正解";
exit;
}*/

?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<form action="" method="post">
<p>問題: 日本で一番高い山は?</p>
<ul>
<li><input type="radio" name="answer" value="正解">富士山</li>
<li><input type="radio" name="answer" value="筑波山">筑波山</li>
</ul>
<input type="submit" value="回答">
</form>
</body>
</html>

 POSTでフォームのデータを受け取って表示するってやつですね。

参考 ⇒ PHP: $_POST - Manual

$_POST['answer']; でPOST送信の値を受け取ります。

 

上記のHTML,formタグ、

<form action="" method="post">

action属性の値を空にすることで、送信先が自分自身、
そのページ自体に値が送信されます。

 

上のサンプル、ソースを見れば答えが丸わかりなので、
動画では、ここから改善を加えてました。

  • 答えがバレないようにする
  • 問題の選択数を増やす
  • 問題の選択肢をランダムに表示する

といった感じの例を挙げて、ソースを修正します。

 

サンプル2

<?php
$question = array(
"question" => "日本で2番目に高い山は?",
"choices" => array("富士山", "北岳", "穂高岳", "恵那山"),
"answer" => "北岳",
);

shuffle($question['choices']);

if($_SERVER['REQUEST_METHOD'] == "POST" && isset($_POST['answer']) ){

//答え合わせ
$result = "不正解でした";
if($_POST['answer'] == $question['answer']){
$result = "正解です";
}
}
?>

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<form action="" method="post">
<p>問題: 日本で一番高い山は?</p>
<ul>
<?php foreach ($question['choices'] as $choises) : ?>
<li><input type="radio" name="answer" value="<?php echo $choises; ?>"><?php echo $choises; ?></li>
<?php endforeach;?>
</ul>
<input type="submit" value="回答">
</form>

<?php if(isset($result)) :?>
<p><?php echo $result;?></p>
<?php endif;?>

</body>
</html>

 問題を配列に格納します。

問題文・選択肢・回答と連想配列に格納

$question = array(
"question" => "日本で2番目に高い山は?",
"choices" => array("富士山", "北岳", "穂高岳", "恵那山"),
"answer" => "北岳",
);

 選択肢については、さらに配列に格納します。

 

HTML側で、foreach文を使って出力

<form action="" method="post">
<p>問題: 日本で一番高い山は?</p>
<ul>
<?php foreach ($question['choices'] as $choises) : ?>
<li><input type="radio" name="answer" value="<?php echo $choises; ?>"><?php echo $choises; ?></li>
<?php endforeach;?>
</ul>
<input type="submit" value="回答">
</form>

 

で、正誤判定は

PHP側は、

if($_SERVER['REQUEST_METHOD'] == "POST" && isset($_POST['answer']) ){
//答え合わせ
$result = "不正解でした";
if($_POST['answer'] == $question['answer']){
$result = "正解です";
}
}

 HTML側は

<?php if(isset($result)) :?>
<p><?php echo $result;?></p>
<?php endif;?>

 

先日まで見ていた入門編でも出てきたけど、
isset関数を使って値の有無を確認するのは
定番なのかもしれない。

 

HTMLで出力される選択肢をランダムに並び替えるのは、

shuffle($question['choices']);

この1行でできる。配列をシャッフルしてくれる関数です。

参考 ⇒ PHP: shuffle - Manual

 

今日のコードは読めたので、あとは実践編で講師が書くPHPのコードを見て、
自分の中でPHPのパターンを貯めていきたいところ。

漢字の書き取りじゃないけど、毎日触れていれば、
それなりに使えるようになると思っています。