我正在生成调查问题页面,其中包含数据库中的问题。 HTML输入类型根据问题类型更改:
form.php的
<?php
$query = "select q_id,qtext from questions order by q_id ";
$result = mysqli_query($conn, $query); // replaced with procedural mysqli
if (mysqli_num_rows($result) == 0)
$flag = 1;
else {
if (!$result)
$result_list = array();
while ($row = mysqli_fetch_array($result)) {
$result_list[] = $row;
}
$i = 0;
foreach ($result_list as $row) {
$q_id[$i] = $row[0];
$qtext[$i] = $row[1];
$i++;
}
}
?>
<form action="action.php" method="post" name="form">
<?php
for ($j = 0; $j < $i; $j++) {
unset($res_list);
switch ($qtype[$j]) {
case text:
echo " <textarea name='qno[$j]'></textarea><br/>";
break;
case checkbox:
for ($l = 0; $l < 3; $l++)
echo "<input type='checkbox' name='qno[$j]' > <label> $l </label>";
break;
}
}
?>
</form>
此页面正常运行。但我无法通过$ _POST获取此数据。这是
action.php的
<?php
for ($j = 0; $j <= $no_of_ques; $j++) {
$answer[$j] = $_POST['qno'][$j];
echo $answer[$j];
}
?>
我应该为我的输入命名,我应该如何通过POST获取它们?
答案 0 :(得分:2)
通过引用您的代码片段作为解决方案,请检查var_dump($_POST)
的输出,在其输出中观察密钥qno是否存在及其对应的值。
请尝试执行以下代码段以获取qno密钥的所有数据
for($i =0 ; $i < count($_POST['qno']) ;$i++) {
echo $_POST['qno'][$i];
}
答案 1 :(得分:1)
乍一看,您的代码没有任何问题(因为您最近的编辑),所以您应该尝试print_r($_POST)
进行调试,看看您的帖子数据实际包含的内容。
然后你可以在action.php中使用foreach
循环更轻松地迭代答案.php
foreach ($_POST['qno'] as $i => $answer) {
echo "Answer Number $i: $answer";
}
答案 2 :(得分:1)
我必须提出三条建议来解决你的问题:
1)如上所述,调试print_r($ _ POST)的输出以验证脚本正在接收什么
2)验证生成表单的实际脚本是否没有错误,一种方法是查看正在生成的HTML代码,并确保所有值都在那里。
3)如果您的错误仍然存在,请简化您的代码。保存所拥有的副本,并继续删除多余的东西,直到它按预期开始工作。我认为它是逆向工程或更简单,只需向后退几步即可找出出错的地方。
关于简化,嵌套for循环,在switch语句中,在另一个for循环中的一个额外注释并不是最好的编码实践。肯定有一种更简单的方法可以从数据库中获取问题,然后将其转储到表单中。
对于替代方案的一个建议是,一旦给出问题类型和数据,就有一个帮助函数格式化问题。例如。 formatQuestion($ type,$ data)
答案 3 :(得分:1)
我发现下面没有准确数据的问题是我的示例代码可以帮助您 -
<强> form.php的强>
<?php
$result_list = array(0 => 'QuestionId', 1 => 'QuestionText');
$q_id = $result_list[0];
$qtext = $result_list[1];
?>
<form action="action.php" method="post" name="form">
<?php
$qtype = array(0 => 'text', 1 => 'checkbox');
$i = 2;
for ($j = 0; $j < $i; $j++) {
unset($res_list);
switch ($qtype[$j]) {
case text:
echo " <textarea name='qno[$j]'></textarea><br/>";
break;
case checkbox:
for ($l = 0; $l < 3; $l++)
echo "<input type='checkbox' name='qno[$j]' > <label> $l </label>";
break;
}
}
?>
<input type="submit" value="submit">
</form>
<强> action.php的强>
<?php
echo '<pre>';
print_r($_POST);
?>
答案 4 :(得分:0)
我认为这个循环有问题
for ($l = 0; $l < 3; $l++)
echo "<input type='checkbox' name='='qno[$j]' > <label> $l </label>";
它为所有三个元素提供相同的名称
如果希望所有值都尝试使用qno[$j][$l]