在循环中使用生成的 php 变量作为 html <input> 对象的名称


Using generated php variable as name for html <input> object in loop

在第一页(index.php)上,我写了这个:

<?php   
echo '<form action="test.php" method="get">';
$x=0;
while($x<5){
$x++;
$test='tester'.$x;
echo '<input type="text" name="$test"><br>';
};
echo '<input type="submit" value="submit">';
?>

在第二页(测试.php)上,我写了这个:

<?php 
echo $_POST['tester1'];
echo $_POST['tester2'];
echo $_POST['tester3'];
echo $_POST['tester4'];
echo $_POST['tester5'];
?>

当我测试它时,我得到了这些错误

注意:未定义的索引:测试器1在C:''xampp''htdocs''test.php在第2行

注意:未定义的索引:测试器2在C:''xampp''htdocs''test.php在第3行

注意:未定义的索引:测试器3在C:''xampp''htdocs''test.php在第4行

注意:未定义的索引:测试器4在C:''xampp''htdocs''test.php在第5行

注意:未定义的索引:测试器5在C:''xampp''htdocs''test.php在第6行

下面的代码是供用户填写数字的真实代码的示例。我想稍后使用这些数字进行计算,因此它们都需要一个唯一的名称。<input>对象是通过循环生成的,循环运行的次数由数据库中的行数指定。

两个主要问题是你在单引号内使用 PHP 变量,这不会传递实际变量,而是传递实际名称。举个例子

$foo = "bar";
echo 'This is $foo';

会打印

这是$foo

如果使用双引号,则会传递变量的内容,

$foo = "bar";
echo "This is $foo"; // You can also do the following: echo 'This is '.$foo;

会打印

这是酒吧

其次,您在表单中使用method="get",但尝试将它们作为 POST 变量检索。这意味着您必须将其更改为 method="POST" .


另一种选择是创建一个元素数组,并使用 PHP 中的循环来检索值。下面给出一个例子。第一个代码段生成一个包含 5 个输入字段的表单作为数组。

<form action="test.php" method="POST">
    <?php for ($x=0; $x<5; $x++) { ?>
    <input type="text" name="tester[]" />
    <?php } ?>
    <input type="submit" name="submit" />
</form>

在 PHP 中,遍历该数组。

<?php
if (isset($_POST['tester']) {
    // If the values are set, to avoid Undefined Index notices
    foreach ($_POST['tester'] as $value) {
        echo $value."<br />";
    }
}
?>

这是它的工作原理(index.php):

<?php
    echo '<form action="test.php" method="post">';
    $x=0;
    while($x<5){
        $x++;
        $test='tester'.$x;
        echo '<input type="text" name="'.$test.'"><br>';
    };
    echo '<input type="submit" value="submit">';
?>

只需将此代码附加到测试顶部.php

if(!isset($_POST['tester1']) || !isset($_POST['tester2']) ... etc){
     exit(0); //or do something to signal index.php of missing values
}
/* (the rest of the code */
在编写这样的

动态页面时,您应该始终期望缺少变量并编写转义代码,这样您就不会遇到这样的错误。