我使用以下代码随机化了一组问题:
for($i=0; $i < count($nwi); $i++)
$itemorder[$i] = $i;
shuffle($itemorder);
$_SESSION["itemorder"] = $itemorder;
几页之后,会出现一部分问题:
for ($i=0; $i<40; $i++) {
if ($i % 10 ==0) echo $header;
echo '<tr class="';
if(in_array($itemlabel[$_SESSION["itemorder"][$i]], $errors)) echo 'skip';
elseif ($i % 2 == 0) echo 'even';
else echo 'odd';
echo '">';
echo '<td>' . ($i + 1) . ".</td><td>" . $itemtext[$_SESSION["itemorder"][$i]] . '</td>';
for ($j = 1; $j <= 6; $j++) {
echo "\n" . '<td';
if ($j == 6) echo ' style="background-color:#999;"';
echo '><input type="radio" name="';
echo $itemlabel[$_SESSION["itemorder"][$i]];
echo '" value="';
echo $j; //value of the input
echo '"';
if ($_POST[$itemlabel[$_SESSION["itemorder"][$i]]] == $j) echo " checked";
echo '></td>';
}
在调查结束时,我试图将问题的答案(范围从1-8开始)放到我的SQL数据库中:
"INSERT INTO surveydata
(id, agree_pppg_01,agree_pppg_02,agree_pppg_03,....
VALUES
('$_SESSION[id]', '$_SESSION[itemorder][0]',
'$_SESSION[itemorder][1]', '$_SESSION[itemorder][2]',
'$_SESSION[itemorder][3]',...
无论我如何回答问题,我的SQL数据库中只会得到零。有什么建议?
答案 0 :(得分:1)
好吧,首先我没有看到任何事情为会话值分配任何内容,但代码的问题是这种模式:'$_SESSION[itemorder][1]'
。首先,我会确保MySQL期望varchar而不是int。如果它是一个int,那么好的形式就是确保它没有被引用。
更重要的是,当你在PHP中有一个关联数组时,你需要确保PHP期望它。
此
$a = array("hi"=>array("world"=>0)); echo "$a[hi][world]";
输出
数组[世界]
在查找周围放置大括号以确保它知道将其视为数组,然后在所有字符串索引周围加上引号:
// note the braces and quotes
$a = array("hi"=>array("world"=>"here")); echo "{$a["hi"]["world"]}";
输出
“这里”
但是,我想知道你使用implode会不会更好:
$columns = implode(',', $_SESSION['itemorder']);
$query = "INSERT INTO surveydata
(id, agree_pppg_01,agree_pppg_02,agree_pppg_03,....
VALUES ('{$_SESSION["id"]}', $columns )";
我确实有必要指出该系统似乎不可扩展,而像agree_pppg_02
这样的列名称不具有描述性。您可能想要访问codereview stackexchange站点,看看他们是否不能提供有关数据库设计的提示。