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