如何在PHP中处理来自一个表单的多个输入

时间:2017-07-03 17:41:43

标签: php html

我不确定如何提出这个问题。我认为这是程序问题。

<input type="hidden" name="1[]" value="dummy">
<input type="radio" name="1[]" value="5">
<label> Very Good </label>
<input type="radio" name="1[]" value="4">
<label> Good </label>
<input type="text" name="1[]" size="20">
<br>
<input type="hidden" name="2[]" value="dummy">
<input type="radio" name="2[]" value="5">
<label> Very Good </label>
<input type="radio" name="2[]" value="4">
<label> Good </label>
<input type="text" name="2[]" size="20">

$ _ POST输出:

 [1] => Array
        (
            [0] => Text misc
        )

[2] => Array
    (
        [0] => 5
        [1] => 
    )

从这个I构造和INSERT语句。

INSERT INTO coached_tracked (coached_id, value, note) 
VALUES ($key, $value[0], $value[1]);

这是从输入动态生成的。单选按钮,文本字段对。

如何处理未选择无线电且文本字段具有值的事件,就像在第一个实例中一样。我想要没有选择任何选项,所以似乎没有要求默认值。我尝试使用和不使用虚拟值(我看到一个示例暗示隐藏字段作为可能的解决方案。)

建议。

1 个答案:

答案 0 :(得分:1)

您不应该告诉数据库使用什么ID。让数据库本身通过使用自动递增列来确定。

首先,从逻辑输入名称开始。使用数字非常混乱,看着你的代码,我完全不知道你在做什么。我们还希望所有内容都进入相同的PHP $_POST变量,而不必迭代所有可能的数字组合。这意味着我们可以迭代单个数组。

假设您正在向数据库添加教练,因此从逻辑上讲,我们将从:

开始
<input name="coach">

现在,当我们想要添加多个教练而不只是一个时,我们可以使用HTML数组名称,但我建议您对它们进行硬编码,而不是在HTML中自动递增,这应该会在以后简化。我们还将其复数为coaches

<?php
for ($i=0;$i<10;$i++) {
    ?>
    <input name="coaches[<?=$i?>]">
    <?php
}

现在,如果每个教练都包含某些属性,让我们说namesalarynote等,我们可以将这些属性添加到输入名称中,如下所示:

<?php
for ($i=0;$i<10;$i++) {
    ?>
    <input name="coaches[<?=$i?>][name]">
    <input name="coaches[<?=$i?>][salary]">
    <input name="coaches[<?=$i?>][note]">
    <?php
}

然后在PHP中,您只需迭代$_POST['coaches'],然后按照您希望的方式使用每个教练的属性:

if (isset($_POST['coaches'])) {
    foreach ($_POST['coaches'] as $coach) {
        $name = $coach['name'];
        $salary = $coach['salary'];
        $note = $coach['note'];

        // Now execute the query:
        // INSERT INTO coached_tracked (name, salary, note) 
        // VALUES ($name, $salary, $note);
    }
}

注意:请记住使用带有绑定参数的预准备语句来清理任何用户提供的数据,以确保您不会对SQL注入攻击开放。