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

时间:2013-03-22 11:31:20

标签: php for-loop

标题如此笼统,主要是因为我不知道它应该是什么名称。我来解释一下情况:

假设我有两个名为LastName0FirstName0的文本框以及一个名为addMore的按钮。当我点击addMore时,将通过JavaScript创建另外两个文本框。这些文本框的名称为LastName1FirstName1。当我再次单击addMore按钮时,将创建另外两个文本框按钮,分别命名为LastName2FirstName2。只要单击addMore按钮,这将继续。此外,将在文本框旁边创建名为deleteThis的按钮。这只是在单击时删除创建的文本框。

我还初始化了一个名为counter的变量。每次点击addMore按钮时,counter都会增加1,每当点击deleteThis按钮时,counter减少1. {的值{1}}存储在隐藏的输入类型中。

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

counter

在上面的代码中,如果//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… } 的值等于3,则会保存文本框counterLastName0,1,2的值。现在问题是:如果用户决定删除FirstName0,1,2LastName1,For循环将无法正确迭代:

FirstName1

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

6 个答案:

答案 0 :(得分:2)

  1. 添加名称为数组的输入文本框,即<input type="text" name="FirstName[]" />
  2. 在php中,您可以将它们作为数组获取。即,

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

答案 1 :(得分:1)

一种解决方案是使用这样的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"]:;

}

答案 2 :(得分:1)

如果有可能,请尝试使用LastName [N]和FirstName [N],而不是使用LastNameN和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++;
}

答案 3 :(得分:1)

解决此问题的更好方法是使用Firstname和Lastname数组。而不是将它们称为Lastname0和Firstname0,然后将Lastname1和Firstname1称为Lastname []和Firstname []。为删除函数提供Lastname0和Firstname0的ID,依此类推,但将名称保留为数组。

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

foreach($_POST['Lastname'] as $i => $lastname) {
    $firstname = $_POST['Firstname'][$i]

    //... code to save into the database here
}

请注意,虽然在IE中如果你有一个空字段,它将不会被提交,所以如果Lastname0有一个值,但是Firstname0没有,那么$ _POST ['Firstname'] [0]实际上将包含该值Firstname1(假设它有一个值)。为了解决这个问题,您可以使用javascript检查提交表单时字段是否为空,如果是,则将单词EMPTY放入其中。

答案 4 :(得分:1)

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

如果您创建的表单类似,则可以通过$_POST['first_name']使用foreach 在你的PHP代码中尝试var_dump($_POST),看看事情是怎么回事。

答案 5 :(得分:0)

在你的for循环中,也许你可以试试......

if ((isset($_POST["LastName$x"])) && (isset($_POST["FirstName$x"]))){
    $lastname = $_POST["LastName$x"];
    $firstname = $_POST["FirstName$x"];

     //code to save to database…
     

}

这将在您尝试对它们执行任何操作之前检查变量是否存在。