ラジオボタンA,B,C,Dを使って選択し、NEXTボタンを押したら次の問題を表示し、回答をSESSIONの配列に書き込むプログラムを作っています。
クリックしたときにprint_r($_SESSION)で配列を表示するようにしたのですが、配列の番号と中身がそのときクリックしたときの一つしか表示されないので全部きちんと入っているのか分かりません。
きちんとSESSIONに保存されているのでしょうか?
<html>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<body>
<p></p>
<p>
<?php
$qno=$_POST["next"];
if($qno==null){
$qno=1;
}else{
$qno++;
}
?>
</p>
<p> </p>
<form method="post" action="session.php">
<input TYPE="radio" NAME="answer" VALUE="1" CHECKED>ア
<input TYPE="radio" NAME="answer" VALUE="2">イ
<input TYPE="radio" NAME="answer" VALUE="3" CHECKED>ウ
<input TYPE="radio" NAME="answer" VALUE="4">エ
<input type="submit" name="submit" value="Next">
<input type="button" value="最初から" onClick="location.href='session.php'">
<input type="button" value="Back" onClick="history.back()">
<input type="hidden" name="next" value="<?php print $qno?>">
</form>
<TEXTAREA readonly cols="100" rows="20" name="e">
<?
mb_language("uni");
mb_internal_encoding("utf-8"); //内部文字コードを変更
mb_http_input("auto");
mb_http_output("utf-8");
$db=mysql_connect("localhost","接続ID","パスワード");
mysql_query("SET NAMES utf8",$db); //クエリの文字コードを設定
mysql_select_db("データベース名");
//データベースに接続
if (!$con = mysql_connect("localhost", "接続ID", "パスワード"))
{echo "接続失敗" ;
exit ;
}
//データベースを選択
if (!mysql_select_db("データベース名", $con)) {
echo "データベース選択失敗" ;
exit ;
}
$sikenbango=111;
if (!$res = mysql_query("SELECT * FROM `MONDAI` WHERE SIKENBANGO='$sikenbango' AND MONDAIBANGO='$qno'",$con)) {
echo "SQL失敗<BR>" ;
exit ;
}
//検索した結果を全部表示
while ($row = mysql_fetch_array($res)) {
echo $row["mondai"];
echo "<BR>" ;
}
//結果セットの開放
mysql_free_result ($res) ;
//データベースから切断
mysql_close($con) ;
?>
</textarea>
<?php
session_start();
if (!isset($_SESSION[$mondaibango])) { $_SESSION[$mondaibango] = array(); }
if (isset($_POST['submit'])) {
$qno = intval($_POST['next']);
if (($qno >= 1)and($qno <=80)) {
$_SESSION['answer'][$qno] = $_POST['answer']; // セッションに追加
// データベースへも保存したければここに記述
print_r($_SESSION);
}
} else {
$qno = 0;
}
if ($qno == 80) {
// 全問題終了時の処理
}
else {
$qno=$_POST["next"];
if($qno==null){
$qno=1;
}else{
$qno++;
} }
?>
</body>
</html>
No.1ベストアンサー
- 回答日時:
ざっくりと書いてみました。
問題をデータベースから取得する代わりに定型の文字列で代用しています。また回答を保存するのはセッションのみです。適宜改変してみてください。
<?php
// セッション初期化
session_start();
if (!isset($_SESSION['answer'])) { $_SESSION['answer'] = array(); }
// データベース準備
//$db=mysql_connect("localhost","接続ID","パスワード");
//mysql_set_charset('utf8', $db);
//mysql_select_db("データベース名", $db);
$sikenbango = 'Q_111';
// 戻り
if (isset($_POST['ret'])) {
$qno = $_POST['ret'] - 1;
} else {
if (isset($_POST['no'])) {// 開始?途中?
$qno=$_POST["no"];
if (isset($_POST['answer'])) {
$_SESSION['answer'][$qno] = $_POST['answer'];
} else {
$_SESSION['answer'][$qno] = 'no select';
}
$qno++;
} else {
$qno=1;
}
}
if ($qno > 80) { // 80問終了
foreach ($_SESSION['answer'] as $key=>$val) {
print $key . '->' . $val . '<br />' . PHP_EOL;
}
} else { // 出題Form
//$res = mysql_query("SELECT * FROM `MONDAI` WHERE SIKENBANGO='$sikenbango' AND MONDAIBANGO='$qno'") or die('sql error');
//$row = mysql_fetch_array($res);
$row = array('mondai' => 'テスト用問題' . $sikenbango . ' - ' . $qno);
print '第' . $qno . '問目<br />' . PHP_EOL;
print $row['mondai'] . '<br />' . PHP_EOL;
print '<form method="post" action="" style="display:inline;">' . PHP_EOL;
print '<input type="hidden" name="no" value="' . $qno . '">' . PHP_EOL;
print '<input TYPE="radio" NAME="answer" VALUE="1">ア' . PHP_EOL;
print '<input TYPE="radio" NAME="answer" VALUE="2">イ' . PHP_EOL;
print '<input TYPE="radio" NAME="answer" VALUE="3">ウ' . PHP_EOL;
print '<input TYPE="radio" NAME="answer" VALUE="4">エ' . PHP_EOL;
print '<input type="submit" name="submit" value="Next">' . PHP_EOL;
print '</form>' . PHP_EOL;
if ($qno > 1) {
print '<form method="post" action="" style="display:inline;">' . PHP_EOL;
print '<input type="submit" name="submit" value="最初から">' . PHP_EOL;
print '</form>' . PHP_EOL;
print '<form method="post" action="" style="display:inline;">' . PHP_EOL;
print '<input type="hidden" name="ret" value="' . $qno . '">' . PHP_EOL;
print '<input type="submit" name="submit" value="戻る">' . PHP_EOL;
print '</form>' . PHP_EOL;
}
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・ハマっている「お菓子」を教えて!
- ・最近、いつ泣きましたか?
- ・夏が終わったと感じる瞬間って、どんな時?
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
HTMLで前の画面に戻る時、入力...
-
検索時の選択内容を保持する方法
-
phpやmysqlで作る簡易掲示板作...
-
画面が更新されてもチェックボ...
-
smartyでチェックボックスをチ...
-
phpでの複数選択チェックボック...
-
$_SESSIONについて教えて下さい。
-
集計結果をiframeの中に表示す...
-
PHPのソース内でのVodafone絵文...
-
PHPで画像の渡しが上手く行きま...
-
複数チェックボックスの入力制...
-
配列をhiddenで
-
syntax error, unexpected '}' ...
-
チェックボックスを使った複数...
-
リンクボタンについて(初心者で...
-
フォームのテキストボックスに...
-
$_POSTのインデックスについて...
-
<input type="hidden" >で配列...
-
テキストボックスに初期値を入れる
-
ラジオボタンを押すと、表示が...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
HTMLで前の画面に戻る時、入力...
-
<input type="hidden" >で配列...
-
PHP ボタンが押されたら処理を...
-
フォームへの前回入力値をクリ...
-
検索時の選択内容を保持する方法
-
PHPで画像の渡しが上手く行きま...
-
フォームボタンを押すたびに数...
-
syntax error, unexpected '}' ...
-
フォームでのリセットを使う方法
-
パラメーターを隠す
-
$_SESSIONについて教えて下さい。
-
ラジオボタンをsessionで使いたい
-
画面が更新されてもチェックボ...
-
phpの掲示板で新しい順に表...
-
PHPで、ボタンを押すと同じペー...
-
phpでの複数選択チェックボック...
-
PHPでじゃんけん勝負
-
チェックボックスを使った複数...
-
DBの値をチェックボックスに反...
-
PHPのmysqlに格納したデータの...
おすすめ情報