标题如此笼统,主要是因为我不知道它应该是什么名称。我来解释一下情况:
假设我有两个名为LastName0
和FirstName0
的文本框以及一个名为addMore
的按钮。当我点击addMore
时,将通过JavaScript创建另外两个文本框。这些文本框的名称为LastName1
和FirstName1
。当我再次单击addMore
按钮时,将创建另外两个文本框按钮,分别命名为LastName2
和FirstName2
。只要单击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,则会保存文本框counter
和LastName0,1,2
的值。现在问题是:如果用户决定删除FirstName0,1,2
和LastName1
,For循环将无法正确迭代:
FirstName1
有人告诉我使用“推送和弹出”概念来解决这个问题,但我不确定如何在这里应用它。因此,如果有人能告诉我如何应用它,它将是伟大的。
答案 0 :(得分:2)
<input type="text" name="FirstName[]" />
在php中,您可以将它们作为数组获取。即,
foreach($_POST["FirstName"] as $k=>$val){
echo $val; // give you first name
echo $_POST["LastName"][$k]; // will give you last ame
}
在这种情况下,即使在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…
}
这将在您尝试对它们执行任何操作之前检查变量是否存在。