php - 在 php 中处理表单的多个输入

标签 php html sql forms

我想知道如何处理来自具有多个属性的表单的多个输入。 此代码生成我的字段:

<form method="POST" action="test5.php" id="1">
            <?
            if($_SESSION["peoplecount"] != 0){
            for ($i = 0; $i <= $_SESSION["peoplecount"]; $i++) {
             echo ' Name<input type="text" name="'.$i.'">  Adult<input type="radio" name="'.$i.'" value="adult" /> Minor<input type="radio" name="'.$i.'" value="minor" /> <br/>';
            }           }
            ?>
            <input class="button" type="submit" value="I/We Agree" style="width:200px;"/>
            </form>

提交后——或“操作”部分提到的 test5.php,

foreach ($_POST as $key => $value) {
  print "{$key}: {$value}<br />";
}

输出是

0: adult
1: adult
2: adult
3: adult

注意它有 0、1、2... 然后是成人。它甚至没有提到文本输入中的人名。 我可以将表格更改为:

        </blockquote>
        <form method="POST" action="test5.php" id="1">
        <?
        if($_SESSION["peoplecount"] != 0){
        for ($i = 0; $i <= $_SESSION["peoplecount"]; $i++) {
         echo ' Name<input type="text" name="usersname" id="usersname">  Adult<input type="radio" name="age" value="adult" id="age"/> Minor<input type="radio" name="age" value="minor" id="age"/> <br/>';
        }           }
        ?>
        <input class="button" type="submit" value="I/We Agree" style="width:200px;"/>
        </form>

使用相同的 test5.php,我得到

usersname:
age: adult

年龄的值没有发布,test5.php 中的 foreach 循环结束,因此在它完全运行一个完整的帖子之前,该行返回。

我希望我解释得足够好。 我希望我的输出是:

某名成人

SomeOtherName 未成年人 ....

最佳答案

您的问题是您使用 name='$i' 创建了两个表单输入,而第二个(单选按钮)覆盖了第一个。相反,我建议您使用包含 $i 的字符串来构建名称属性:

for ($i = 0; $i <= $_SESSION["peoplecount"]; $i++) {
    echo ' Name<input type="text" name="name-'.$i.'">  Adult<input type="radio" name="age-'.$i.'" value="adult" /> Minor<input type="radio" name="'.$i.'" value="minor" /> <br/>';
}

现在您的 $_POST 数组将如下所示:

name-0: somename age-0: Adult
name-1: othername age-1: Minor
...

处理它的更好方法是使用数组作为带有 [] 的表单名称属性(请注意,我在这里切换到双引号,以避免所有额外的连接和复杂的引用。 )

for ($i = 0; $i <= $_SESSION["peoplecount"]; $i++) {
   echo " Name<input type='text' name='name[$i]'>  Adult<input type='radio' name='age[$i]' value='adult' /> Minor<input type='radio' name='age[$i]' value='minor' /> <br/>";
}

在这种情况下,您的 $_POST 看起来像:

name: Array(
 0: somename,
 1: othername
),
age: Array (
 0: adult,
 1: minor
)

要访问它们,您可以使用 foreach 循环,如下所示:

foreach ($_POST['name'] as $key=>$name) {
  echo "Name: $name  Age: {$_POST['age'][$key]}";
}

关于php - 在 php 中处理表单的多个输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8416477/

相关文章:

php - sendgrid php 示例 - 如何添加发件人姓名?

php - html文件夹外的文件和图像

javascript - 编写此 jquery 的更好选择

sql - Postgres 左外连接似乎没有使用表索引

php - PHP 输出的最佳实践

php - 使用插入值数组执行准备好的语句不起作用

html - 将 html 样式标签放入编码 html 电子邮件的正文标签中是否安全?

html - 如何叠加 div 背景?

sql - 如何返回连续两天或更多天/月/季度符合条件的行?

sql - 定制化场景的数据库表设计