在PHP中使用For循环获取多个元素的值

在PHP中使用For循环获取多个元素的值,php,for-loop,Php,For Loop,标题如此笼统,主要是因为我不知道什么才是合适的标题。让我解释一下情况: 假设我有两个名为LastName0和FirstName0的文本框和一个名为addMore的按钮。当我单击addMore时,将通过JavaScript创建另外两个文本框。这些文本框将命名为LastName1和FirstName1。再次单击addMore按钮时,将创建另外两个文本框按钮,分别命名为LastName2和FirstName2。只要单击addMore按钮,此操作就会继续。此外,将在文本框旁边创建一个名为deleteTh

标题如此笼统,主要是因为我不知道什么才是合适的标题。让我解释一下情况:

假设我有两个名为
LastName0
FirstName0
的文本框和一个名为
addMore
的按钮。当我单击
addMore
时,将通过JavaScript创建另外两个文本框。这些文本框将命名为
LastName1
FirstName1
。再次单击
addMore
按钮时,将创建另外两个文本框按钮,分别命名为
LastName2
FirstName2
。只要单击
addMore
按钮,此操作就会继续。此外,将在文本框旁边创建一个名为
deleteThis
的按钮。这只会在单击时删除创建的文本框

我还初始化了一个名为
counter
的变量。每次单击
addMore
按钮时,
计数器
将上升1,而每当单击
delete此
按钮时,
计数器
将下降1。
计数器的值存储在隐藏输入类型中

当用户提交表单时,我获取
计数器的值,并创建For循环以获取表单中文本框的所有值。以下是示例代码:

//Suppose that the user decides to add 2 more textboxes. Now we have the following:
     // LastName0   FirstName0
     // LastName1   FirstName1
// LastName2    FirstName2

$ctr = $_POST['counter']; //the counter == 3
for ($x = 0; $x < $ctr; $ctr++)
{
    $lastname = $_POST["LastName$x"];
    $firstname = $_POST["FirstName$x"];

    //This will get the values of LastName0,1,2 and FirstName0,1,2

    //code to save to database…
}

有人告诉我使用“推送和弹出”的概念来解决这个问题,但我不确定如何在这里应用它。因此,如果有人能告诉我如何应用它,那就太棒了。

一个解决方案是像这样使用isset函数:

$ctr = $_POST['counter']; 
for ($x = 0; $x < $ctr; $ctr++)
{

isset($_POST["LastName$x"])?$lastname = $_POST["LastName$x"]:;
isset($_POST["FirstName$x"])?$firstname = $_POST["FirstName$x"]:;

}
$ctr=$\u POST['counter'];
对于($x=0;$x<$ctr;$ctr++)
{
isset($_POST[“LastName$x”])?$LastName=$_POST[“LastName$x”]:;
isset($_POST[“FirstName$x”])?$FirstName=$_POST[“FirstName$x”]:;
}

一种解决方案是像这样使用isset函数:

$ctr = $_POST['counter']; 
for ($x = 0; $x < $ctr; $ctr++)
{

isset($_POST["LastName$x"])?$lastname = $_POST["LastName$x"]:;
isset($_POST["FirstName$x"])?$firstname = $_POST["FirstName$x"]:;

}
$ctr=$\u POST['counter'];
对于($x=0;$x<$ctr;$ctr++)
{
isset($_POST[“LastName$x”])?$LastName=$_POST[“LastName$x”]:;
isset($_POST[“FirstName$x”])?$FirstName=$_POST[“FirstName$x”]:;
}

如果可能,请尝试使用LastName[N]和FirstName[N]来代替LastName和FirstNameN名称,这样结果就是一个数组,您可以使用foreach对其进行迭代,这意味着您不需要计数器,值的索引也不重要:

foreach ($_POST["LastName"] as $i=>$lastname) {
    if (!isset($_POST["FirstName"][$i])) {
        // This should only happen if someone messes with the client side before posting
        throw new Exception("Last name input does not have a related First name input");
    }   

    $firstname = $_POST["FirstName"][$i];
}
如果没有,那么您可能必须以不同的方式使用$counter

$current = 0;
while ($counter) { // Stop only when i found all
    if (isset($_POST["LastName$current"]) {
        $counter--;  // Found one
        $lastname =   $_POST["LastName$current"];
        $firstname = $_POST["FirstName$current"];
    }   
    $current++;
}

如果可能,请尝试使用LastName[N]和FirstName[N],而不是使用LastName和FirstNameN名称,这样结果就是一个数组,您可以使用foreach对其进行迭代,这意味着您将不需要计数器,值的索引也不重要:

foreach ($_POST["LastName"] as $i=>$lastname) {
    if (!isset($_POST["FirstName"][$i])) {
        // This should only happen if someone messes with the client side before posting
        throw new Exception("Last name input does not have a related First name input");
    }   

    $firstname = $_POST["FirstName"][$i];
}
如果没有,那么您可能必须以不同的方式使用$counter

$current = 0;
while ($counter) { // Stop only when i found all
    if (isset($_POST["LastName$current"]) {
        $counter--;  // Found one
        $lastname =   $_POST["LastName$current"];
        $firstname = $_POST["FirstName$current"];
    }   
    $current++;
}

在for循环中,也许您可以尝试

}


这将在您尝试处理变量之前检查变量是否存在。

在for循环中,也许您可以尝试

}

这将检查变量是否存在,然后再尝试对其执行任何操作

  • 添加名称为数组ie的输入文本框,
  • 在php中,可以将它们作为数组获取。即

     foreach($_POST["FirstName"] as $k=>$val){
        echo $val; // give you first name
        echo $_POST["LastName"][$k]; // will give you last ame
     }
    
  • 在这种情况下,即使在HTML中删除了一组字段,也不会影响php代码

  • 添加名称为数组ie的输入文本框,
  • 在php中,可以将它们作为数组获取。即

     foreach($_POST["FirstName"] as $k=>$val){
        echo $val; // give you first name
        echo $_POST["LastName"][$k]; // will give you last ame
     }
    

  • 在这种情况下,即使删除HTML中的一组字段,也不会影响php代码。

    更好的解决方法是对Firstname和Lastname使用数组。不要叫它们Lastname0和Firstname0,然后叫Lastname1和Firstname1,而是叫它们Lastname[]和Firstname[]。为delete函数提供Lastname0和Firstname0等ID,但将名称保留为数组

    提交表格时,请使用以下内容:

    foreach($_POST['Lastname'] as $i => $lastname) {
        $firstname = $_POST['Firstname'][$i]
    
        //... code to save into the database here
    }
    

    请注意,在IE中,如果有空字段,则不会提交该字段,因此,如果Lastname0有值,但Firstname0没有,则$\u POST['Firstname'][0]实际上将包含Firstname1的值(假设其中有值)。为了解决这个问题,您可以在提交表单时使用javascript检查字段是否为空,如果为空,请在字段中输入empty一词。

    解决这个问题的更好方法是对Firstname和Lastname使用数组。不要叫它们Lastname0和Firstname0,然后叫Lastname1和Firstname1,而是叫它们Lastname[]和Firstname[]。为delete函数提供Lastname0和Firstname0等ID,但将名称保留为数组

    提交表格时,请使用以下内容:

    foreach($_POST['Lastname'] as $i => $lastname) {
        $firstname = $_POST['Firstname'][$i]
    
        //... code to save into the database here
    }
    

    请注意,在IE中,如果有空字段,则不会提交该字段,因此,如果Lastname0有值,但Firstname0没有,则$\u POST['Firstname'][0]实际上将包含Firstname1的值(假设其中有值)。为了解决这个问题,您可以在提交表单时使用javascript检查字段是否为空,如果为空,请在字段中添加单词empty。

    如果不需要,请不要使用counter
    更简单的方法是在admore单击时添加数组名称。
    在文本框中输入类似first_name[]的名称

    如果您创建这样的表单,您可以通过
    $\u POST['first\u name']


    在php代码中尝试使用
    var\u dump($\u POST)
    ,看看情况如何。

    如果不需要,请不要使用计数器。
    更简单的方法是在admore单击时添加数组名称。
    在文本框中输入类似first_name[]的名称

    如果您创建这样的表单,您可以通过
    $\u POST['first\u name']


    在php代码中尝试
    var\u dump($\u POST)
    ,看看事情是如何进行的。

    $\u POST['']将只返回与问题无关的表单填充字段,但您应该查看输入字段数组。如果人们删除并添加文本框,当更新值时,您会遇到一些逻辑问题