HTML输入表单数组值未传递到PHP提交

HTML输入表单数组值未传递到PHP提交,php,arrays,Php,Arrays,我创建了一个html表单,使用户能够更新数据。但是,输入数据(数组值)不会传递给php SUBMIT,因此单击SUBMIT不会更新表。当我进入脚本的SUBMIT部分并将集合更改为特定的数字或文本时,表就会更新。这意味着html输入数据数组中的值没有正确地传递到脚本的提交部分。谢谢你的帮助 <?php //Mysql connection and initial select query placed above ?> <table width="400" border="0"

我创建了一个html表单,使用户能够更新数据。但是,输入数据(数组值)不会传递给php SUBMIT,因此单击SUBMIT不会更新表。当我进入脚本的SUBMIT部分并将集合更改为特定的数字或文本时,表就会更新。这意味着html输入数据数组中的值没有正确地传递到脚本的提交部分。谢谢你的帮助

<?php
//Mysql connection and initial select query placed above
?>

<table width="400" border="0" cellspacing="1" cellpadding="0">
<form name="Contacts" method="post" action="">
<tr> 
<td>
<table width="400" border="0" cellspacing="1" cellpadding="0">


<tr>
<td align="center"><strong>Id</strong></td>
<td align="center"><strong>Name</strong></td>
<td align="center"><strong>Lastname</strong></td>
<td align="center"><strong>Email</strong></td>
</tr>

<?php
while($rows=mysql_fetch_array($result)){
?>
<tr>
<td align="center"><?php $id[]=$rows['id']; ?><?php echo $rows['id']; ?></td>
<td align="center"><input name="name[]" type="text" id="name" value="<?php echo $rows['name']; ?>"></td>
<td align="center"><input name="lastname[]" type="text" id="lastname" value="<?php echo $rows['lastname']; ?>"></td>
<td align="center"><input name="email[]" type="text" id="email" value="<?php echo $rows['email']; ?>"></td>
</tr>
<?php
}
?>
<tr>
<td colspan="4" align="center"><input type="submit" name="Submit" value="Submit"></td>
</tr>
</table>
</td>
</tr>
</form>
</table>

<?php
// Check if button name "Submit" is active, do this 
if(isset($_POST['Submit'])){
$id=$_POST['id'];
$name=$_POST['name'];
for($i=0;$i<$num;$i++){
$sql1="UPDATE contacts SET name= ".$name[$i]." WHERE id= ".$id[$i]."";
$result1=mysql_query($sql1);
}
}

if($result1){
header("location:updated.php");
}
mysql_close();
?>

Id
名称
Lastname
电子邮件

SQL语句中的
$name[$i]
缺少单引号。如果
id
不总是数字,您还需要将
$id[$i]
用单引号括起来

$sql1="UPDATE contacts SET name= '".$name[$i]."' WHERE id= ".$id[$i]."";
//------------------------------^^^-----------^^^
在您的
mysql\u query()
调用中检查一些错误会使这一点更清楚。见下文

在将它们传递到查询之前,必须根据SQL注入对它们进行过滤

for($i=0;$i<$num;$i++) {
  // Call mysql_real_escape_string() to sanitize these...
  $id[$i] = mysql_real_escape_string($id[$i]);
  $name[$i] = mysql_real_escape_string($name[$i]);

  $sql1="UPDATE contacts SET name= '".$name[$i]."' WHERE id= ".$id[$i]."";

  $result1 = mysql_query($sql1);
  // Error checking:
  if (!$result1) {
     echo mysql_error();
  }
}

for($i=0;$i我的错误。我没有充分查看表单。您在这里分配了一个数组。PHP很容易调试-

就在这里:

     $id=$_POST['id'];
     $name=$_POST['name'];

在这些行之后,使用var_dump($id)或print_r($id)检查变量中的内容。

非常感谢您的及时响应和提供的帮助。在实施建议的更改后,最终工作脚本(使用PHP5.2)如下所示(适用于可能需要它的任何人)


Id
名称
Lastname
电子邮件

您正在使用循环创建HTML,并且您的输入有一个
id
。如果while循环执行多次,您将有重复的id。请修复。感谢您的帮助。我将在今天晚些时候为以后可能需要的任何人发布最终脚本。问题已修复。感谢您的帮助。我将在今天晚些时候为anyo发布最终脚本以后可能需要它的人。
  <?php
    Mysql connection, initial query and then close Mysql connection
  ?>

<table width="500" border="0" cellspacing="1" cellpadding="0">
<form name="Contacts" method="post" action="">
<tr> 
<td>
<table width="500" border="0" cellspacing="1" cellpadding="0">


<tr>
<td align="center"><strong>Id</strong></td>
<td align="center"><strong>Name</strong></td>
<td align="center"><strong>Lastname</strong></td>
<td align="center"><strong>Email</strong></td>
</tr>

<?php
while($rows=mysql_fetch_array($result)){
?>
<tr>
<td align="center"><?php $id[]=$rows['id']; ?><?php echo $rows['id']; ?></td>
<td align="center"><input name="name[]" type="text" id="name" value="<?php echo $rows['name']; ?>"></td>
<td align="center"><input name="lastname[]" type="text" id="lastname" value="<?php echo $rows['lastname']; ?>"></td>
<td align="center"><input name="email[]" type="text" id="email" value="<?php echo $rows['email']; ?>"></td>
</tr>
<?php
}
?>
<tr>
<td height="75" colspan="4" align="center"><input type="submit" name="Submit" value=" save for later "></td>
</tr>
</table>
</td>
</tr>
</form>
</table>

<?php
// Check if button name "Submit" is active, do this 
if(isset($_POST['Submit'])){
mysql_connect($dbhost,$username,$password);
@mysql_select_db($database) or die( "Unable to select database");

$name=$_POST['name'];

for($i=0;$i<$num;$i++) {

// sanitize...
  $id[$i] = mysql_real_escape_string($id[$i]);
  $name[$i] = mysql_real_escape_string($name[$i]);

  $sql1="UPDATE test_mysql SET name= '".$name[$i]."' WHERE id= ".$id[$i]."";

  $result1 = mysql_query($sql1);
  // Error checking:
  if (!$result1) {
     echo mysql_error();
  }
}
if($result1){
header("location:updated.php");
}
}

mysql_close();
?>