人生最悪の忘れ物

ラジオボタン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>

A 回答 (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;
}
}
    • good
    • 0
この回答へのお礼

ありがとうございます。参考になりました!
また機会がありましたら宜しくお願いします。

お礼日時:2011/12/05 09:41

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!