PHP发布表单与数组索引

时间:2016-05-24 05:22:46

标签: php html

我正在生成调查问题页面,其中包含数据库中的问题。 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获取它们?

5 个答案:

答案 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]

这样的唯一名称