シンプルなPHPのフォームテスト

このQ&Aのポイント
  • シンプルなPHPのフォームテストを行う方法について解説します。
  • ランダムに生成された計算の答えをフォームで送信し、正解か間違いかを表示するPHPプログラムの作成方法を紹介します。
  • in.phpファイルとout.phpファイルの間違った部分を修正し、正しく動作するようにする方法についても説明します。
回答を見る
  • ベストアンサー

シンプルなPHPのフォームテスト

ランダムにでた計算の答えの値を フォームによって送信して正解か間違っているかを表示する PHPプログラムを考えてみたのですが上手くいきません。 in.php ------------------------------------------ <html> <body> <?php $saki = rand(1,9); $ato = rand(1,9); echo "計算:{$saki}X{$ato}="; $seikai = $saki*$ato; echo '<form action="out.php" method="post">'; echo '<input type="text" name="kotae">'; echo '<input type="hidden" name="hidden" value="$seikai">'; echo '<input type="submit" value="回答"></form>'; ?> </body> </html> ------------------------------------------ out.php ------------------------------------------ <html> <body> <?php $kotae = $_POST["kotae"]; $seikai = $_POST["hidden"]; if($kotae == $seikai){ echo "正解です"; }else{ echo "間違いです"; } ?> </body> </html> ------------------------------------------ in.phpファイルのインプットタグhiddenの所と out.phpファイルでの$_POST["hidden"]の受け取り部分が 間違っているのだと思いますが 正しくはどのようにしたらいいのでしょうか? もっとシンプルで分かりやすい書き方もあれば お教えください。 よろしくお願いいたします。

  • PHP
  • 回答数4
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
  • agunuz
  • ベストアンサー率65% (288/438)
回答No.4

>echo '<input type="hidden" name="hidden" value="' . $seikai . '">'; > >に変えてみたのですが >やはり答えは同じように全て「間違いです」になってしまうので >違う所に原因があるようです。 ブラウザ側のhtmlソースを確認しましたか? 私の手元では、下記のソースで問題なく動作しています。 <?php if ($_POST) { $kotae = $_POST["kotae"]; $seikai = $_POST["hidden"]; if($kotae == $seikai){ echo "正解です"; }else{ echo "間違いです"; } echo '<a href="">戻る</a>'; } else { $saki = rand(1,9); $ato = rand(1,9); echo "計算:{$saki}X{$ato}="; $seikai = $saki*$ato; echo '<form action="" method="post">'; echo '<input type="text" name="kotae">'; echo '<input type="hidden" name="hidden" value="' . $seikai . '">'; echo '<input type="submit" value="回答"></form>'; }

okdayook
質問者

お礼

なにか違う所も書き違えていたようで 最初のアドバイスで上手く動いていたようです。 とにかくありがとうございました。

その他の回答 (3)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

echo '<input type="hidden" name="hidden" value="$seikai">'; ではシングルクォーテーションでくくられた文字列なので hiddenには「$seikai」という文字が入っちゃいますね echo '<input type="hidden" name="hidden" value="'.$seikai.'">'; 的な処理が必要でしょう

okdayook
質問者

お礼

ダブルクォーテーションとシングルクォーテーションの違いなど複雑すぎて頭が痛くなってきます。 とにかく正解をありがとうございました。

  • ma-tsu
  • ベストアンサー率32% (190/593)
回答No.2

in.phpのソースを確認してみたりout.phpで$kotaeと$seikaiをechoしてみて何が送られてきてるか確認しましょう。 すると簡単です。 name="hidden"のvalueが「$seikai」になっています。 問題の行 echo '<input type="hidden" name="hidden" value="$seikai">'; を echo '<input type="hidden" name="hidden" value="'.$seikai.'">';

okdayook
質問者

お礼

なんとか動作はするようになりました。 ありがとうございました。

okdayook
質問者

補足

「$seikai」は計算の合計値を入れる変数で この変数をhiddenで送信するためということで設定しています。echoで反映されないのでこの書き方自体が間違っているのかもしれません。

  • agunuz
  • ベストアンサー率65% (288/438)
回答No.1

表示された入力フォームのhtmlソースを(ブラウザで)確認すれば自明だと思います。 >echo '<input type="hidden" name="hidden" value="$seikai">'; 単引用符で括った中では変数は展開されません echo '<input type="hidden" name="hidden" value="' . $seikai . '">'; です。

okdayook
質問者

補足

早速のご指導ありがとうございます。 echo '<input type="hidden" name="hidden" value="' . $seikai . '">'; に変えてみたのですが やはり答えは同じように全て「間違いです」になってしまうので 違う所に原因があるようです。

関連するQ&A

  • PHPのシンプルな構文(初心者)

    ランダムに出る掛け算の答えを入力して 別ファイルで正解か不正解という表示をする構文なのですが 「input type="hidden"」部分の値の出力・受取りができず 正しく実行がされません。 どこが間違っているのでしょうか? よろしくお願いいたします。 in.php -------------------------------------- <?php $saki = rand(1,9); $ato = rand(1,9); echo "$saki X $ato"; $seikai = $saki*$ato; ?> <html> <body> <form method="post" action="out.php"> <input type="text" name="kotae"> <input type="hidden" name="hid" value="<?php $seikai ?>"> ←※ <input type="submit" value="回答"> </form> </body> </html> -------------------------------------- out.php -------------------------------------- <?php $kotae = $_POST["kotae"]; $seikai = $_POST["hid"];     ←※ if($kotae == $seikai){ echo "正解です"; }else{ echo "間違っています。"; } echo "<hr>正解は{$seikai}です。"; ?> --------------------------------------

    • ベストアンサー
    • PHP
  • 簡単なPHPの計算構文(初学者)

    以下はフォームから数字入力、演算子を選択して計算をする構文になります。 ------------------------------------------ <form action="" method="post"> <input type="text" name="saki"> <select name="select"> <option value="+">+ <option value="-">- <option value="*">X <option value="/">÷ <input type="text" name="ato"> <input type="submit" value="計算"> </form> <?php $saki = htmlspecialchars(@$_POST["saki"], ENT_QUOTES); $ato = htmlspecialchars(@$_POST["ato"], ENT_QUOTES); $keisan = @$_POST["select"]; if($keisan == "+"){ //←この部分から入れ替える $ans = $saki + $ato; echo "$saki + $ato = $ans"; }elseif($keisan == "-"){ $ans = $saki - $ato; echo "$saki - $ato = $ans"; }elseif($keisan == "*"){ $ans = $saki * $ato; echo "$saki x $ato = $ans"; }elseif($keisan == "/"){ $ans = $saki / $ato; echo "$saki ÷ $ato = $ans"; }else{ } ?> ---------------------------------------------------- この部分のif条件分岐を以下のシンプルな構文に変えたら 同じ結果が得られると思ったのですが上手くいきません。 ---------------------------------------------------- $kotae = "$saki $keisan $ato"; // ←※$keisanにはselectから選択された演算子が入っても計算されない? echo "$saki.$keisan.$ato ="; echo "$kotae"; ---------------------------------------------------- フォームで「+」を選択すれば「$keisan」に演算子「+」がそのまま入るので 自動的に「$saki+$ato」というような計算式になり「$kotae」に 計算結果が出ると思ったのですが 「$kotae = "$saki $keisan $ato"」は構文的に間違っているのでしょうか? ifを使わないシンプルな方法はないのでしょうか? よろしくお願いいたいます。

    • ベストアンサー
    • PHP
  • php初心者です。クイズについて

     phpでランダムに問題が表示され、それに答えると「正解!」、 「不正解!」となるようにしたいのですが。(単語カードみたいな)  問題をランダムに表示することは出来たのですが、問題に 対しての答えをどの様に記述すればいいのでしょうか? (下記のソースに追加・修正をして頂くか、参考となるサイト があれば教えて頂けないでしょうか?)  当方、phpをかじり始めたばかりなので、わかりやすく 教えて頂けると助かります。  どなたか、ご教授宜しくお願い致します。 <?php $quiz = array("りんごを英語で?", "いちごを英語で?", "とまとを英語で?"); shuffle($quiz); error_reporting(E_ALL & ~E_NOTICE); $kotae=$_POST["kotae"]; if ($_SERVER['REQUEST_METHOD']=="POST") { $message = ($quiz['answer'] == $_POST['kotae']) ? "正解!" : "不正解!"; echo $message; exit; } ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8" /> </head> <body> <form action="" method="post"> <p>Q. <?echo current($quiz); ?> </p> <input type="text" name="kotae" size="50"><br><br> <input type="submit" value="回答する!"> </form> </body> </html>

    • ベストアンサー
    • PHP
  • hidden属性だけのフォーム

    hidden属性だけのフォームというのはちゃんと動作しますか? 自分のソースでは動作せず、送り先のPHPスクリプトでvar_dump()すると、$_POST['']の中身が NULL になってました。送信やリセットボタンを作らずに送信できるとすれば、どんな ソースになりますか? <?php echo '<form name="form1" method="POST" action="../../disp_access.php">'; echo '<input type="hidden" name="from" value="1">'; // どのページから飛んできたかを示す echo '<input type="hidden" name="browser" value="'.$referer.'">'; echo '<input type="hidden" name="ip" value="'.$ip.'">'; echo '</form>'; ?>

    • ベストアンサー
    • HTML
  • postのタイムラグ

    以下のソースでPOSTの値が取れないときがあるので困っています。 具体的にはページを表示してから30秒程度待ってからの クリックじゃないとPOSTの値が取れません。 GETの場合はページ表示後すぐにボタンをクリックしても大丈夫でした。 原因が分からず途方に暮れています。 お知恵をお貸しください。 PHP Version 5.2.3 <?php $P_data = $_POST["pg"]; print("POST=>".$P_data."<BR>"); $G_data = $_GET["pg"]; print("GET=>".$G_data."<BR>"); print <<< DOC_END <html> <head> </head> <body> DOC_END; echo"<form action=test.php method=post>"; echo"<input type=hidden name=pg value=1>"; echo"<input type=submit value=あ>"; echo"</form>"; echo"<form action=test.php method=post>"; echo"<input type=hidden name=pg value=2>"; echo"<input type=submit value=い>"; echo"</form>"; echo"<form action=test.php>"; echo"<input type=hidden name=pg value=3>"; echo"<input type=submit value=う>"; echo"</form>"; echo"<form action=test.php>"; echo"<input type=hidden name=pg value=4>"; echo"<input type=submit value=え>"; echo"</form>"; print <<< END </body> </html> END; ?>

    • 締切済み
    • PHP
  • a hrefの値渡し

    今回も質問させていただきますが、よろしくお願いします。 a hrefを使って別のページに飛ぶときに、いっしょに二つの$変数名に入っている値を渡そうとしたいのですが、うまくいきません。 <html> (input.php) <head> <meta http-equiv="Content-type" content="text/html; charset=EUC-JP"> <title>入力</title> </head> <?php $rand = $_POST['rand']; $charenge= $_POST['charenge']; ?> <body> <h1>値を入力してください</h1> <form action="judgement.php" method="POST"> <input type="text" name="num"/> <input type="submit" value="比較します"> <input type="hidden" name="rand value="<?php echo $rand?>"/> <input type="hidden" name="charenge" value="<?php echo $charenge?>"/> </form> </body> </html> <html> (judgement.php) <head> <meta http-equiv="Content-type" content="text/html; charset=EUC-JP"> <title>比較結果</title> </head> <?php $rand = $_POST['rand']; $charenge = $_POST['charenge']; $num = $_POST['num']; ?> <body> <h1>比較結果</h1> <?php if($num == $rand){ print("あたりです。"); }else{ $charenge++; print("はずれです。 <br/>"); print("<a href=\"input.php\">入力ページ</a>からやり直してください"); } ?> </body> </html> 上のjudgement.phpのif文の中にある, <a href=\"input.php\">入力ページ</a>を どのように変えれば、$randと$charengeの値を input.phpに正しく渡すことができるのでしょうか? アドバイスをお願いします。

    • ベストアンサー
    • PHP
  • フォームから受け取ったデータを変数に/PHP

    入力フォームからデータを送信し、受け取ります。 <form action="index.php" method="post"> <input type="text" name="hoge"> <input type="submit"> </form> <?php echo htmlspecialchars($_POST['hoge']); ?> この時に受けったデータが、「りんご」だとして この「りんご」を変数にしたいです。 ↓ <?php $keyword = "りんご"; ?> このようにするには、 <form action="index.php" method="post"> <input type="text" name="hoge"> <input type="submit"> </form> <?php echo htmlspecialchars($_POST['hoge']); ?> の後にどのような処理をすればよいでしょうか? または初めから「$keyword」としてフォームからデータを送ることはできるのでしょうか? 何卒ご指導の程よろしくお願いします。

    • ベストアンサー
    • PHP
  • PHP 画面設計

    PHPでちょっと遊べるページを作ろうとしています。ですが、スタート画面を作り見に行くとエラーと文字化けだらけとなってしまいます。 <html> (start.php) <head> <meta http-equiv="Content-type" content="text/html; charset=EUC-JP"> <title>トントン商店です</title> </head> <body> <?php echo<<<EOD <h1>トントン商店です</h1> <ul> <li>御用の方は下にある入口を押してね</li> <li>間違えて来た方は立ち去ってください</li> </ul> EOD; $rand = rand(0, 100); ?> <form action="input.php" method="POST"> <input type="submit" value="入口"/> <input type="hidden" name="rand" value="$rand"/> <input type="hidden" name="count" value="1"/> </body> </html> エラーが、 Warning: Unexpected character in input: ' ' (ASCII=27) state=5 in ~/opening.php on line 9 Notice: Undefined variable: B in ~/opening.php on line 9 Notice: Undefined variable: G in ~/opening.php on line 9 9以外にも11,12にも同じようなのが出ます。 また、乱数を入れたrandを次のページに渡そうとしましたが、次のページに乱数ではなく、$randという文字が表示されてしまいます。文字化けは、 .htmlに変えて少しいじれば直るのですが、rand()関数を使うため.phpでやりたいのですが、どうすればいいかわかりません。 エラーの対処と次のページへの渡し方について、誰か正しい書き方を教えてください。

    • ベストアンサー
    • PHP
  • PHPをはじめて1日目なので・・・

    参考書を見ながらPHPの勉強を始めていますが、本のサンプルと全く同様にコーディングしているはずなのに、良い結果が得られずバグとなります。 formとpostを使って内容を渡すという項目なのですが。 form.htmlの内容。 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> </head> <body> <form method="post" action="form1.php"> 好きな食べ物は?<input type="text" name="food1"><br> 好きな飲み物は?<input type="text" name="food2"> <input type="submit" value="送信"> </form> </body> </html> form1.phpの内容 <?php header('Content-type: text/html; charset=UTF-8'); ?> <html> <body> <?php $f1 = $_POST['food1']; $f2 = $_POST['food2']; $f1 = htmlentities( $f1, ENT_QUOTES, 'UTF-8' ); $f2 = htmlentities( $f2, ENT_QUOTES, 'UTF-8' ); echo 'あなたは「', $f1, "」が好きなんですね。<br>\n"; echo '「', $f2, "」も好きなんですね。<br>\n"; ?> </body> </html> おそらくちょっとしたことが原因でエラーが出ているのだと思いますが、まだ始めて1日目なので、どこがいけないのかさっぱりわかりません。 一体どこがおかしいのか、教えていただけますか?

    • ベストアンサー
    • PHP
  • phpのプログラミング

    phpの事について質問があります。 画像をアップロードしてデーターベースに画像のパスを入れるプログラミングに挑戦中なのですが、 うまくいかないので詳しい方アドバイスお願い致します 作っているプログラミングの流れは 1の画面で画像選択とコメントの入力 2の画面で画像の確認とコメントの確認 3の画面で『登録しました』の文言の表示とサーバへの書き込み (今回は3の画面では確認の為echo文で飛んでいるかどうかの確認のみ行っております) ちなみにアップロードはうまくいっており、uploadsというディレクトリーを作ってそこに画像をUPしております を考えているのですが、 2画面でinput typeのhiddenを使ってコメントと画像のパスを3の画面に飛ばそうと思っているのですが、 コメントは3の画面に飛んでいるのに、画像のパスが3の画面に飛んでないみたいです、画像のパスはinput typeのhidden で飛ばす事は出来ないのでしょうか? プログラミング以下のような感じです 2の画面 confirm.php <!DOCTYPE html> <html> <head> <meta charset=UTF-8" /> <title>確認画面</title> </head> <body> <h3>以下の内容で登録しますか?</h3> <?php $message=$_POST['message']; ?> <form action="entry.php" method="POST" enctype="multipart/form-data"> <input type="hidden" name="message" value="<?php echo $message; ?>"> <input type="hidden" name="upload_name" value="<?php echo $upload_name; ?>"> メッセージ <?php echo $message;?><br /> 画像 <?php $file_name = $_FILES['filename']['name']; $file_type = $_FILES['filename']['type']; $temp_name = $_FILES['filename']['tmp_name']; $dir ='uploads/'; $upload_name = $dir.$file_name; $result = move_uploaded_file($temp_name,$upload_name); ?> <br /> <?php if($result){ echo'■アップロード成功'; $image_size =getimagesize($upload_name); } else{ echo'■アップロード失敗'; } ?> <?php echo $upload_name;?> <input type="submit" value="登録する"> </form> </body> </html> 3の画面 entry.php <!DOCTYPE html"> <html> <head> <meta charset=UTF-8> <title>登録画面</title> </head> <body> <?php echo $_POST['message']; ?> <?php echo $_POST['upload_name']; ?> </body> </html>

    • ベストアンサー
    • PHP

専門家に質問してみよう