简体   繁体   English

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

[英]HTML input form array values not passing through to PHP submit

I created a html form to enable users to update data. 我创建了一个html表单,以使用户能够更新数据。 However the input data (array values) are not passed through to php SUBMIT, thus clicking SUBMIT does not update the table. 但是,输入数据(数组值)不会传递给php SUBMIT,因此单击SUBMIT不会更新表。 When I go into the SUBMIT portion of the script and change the SET to specific numbers or text, the table is updated. 当我进入脚本的“提交”部分并将SET更改为特定数字或文本时,表将更新。 Meaning that the values from the html input data array are not being passed through properly to the SUBMIT portion of the script. 这意味着html输入数据数组中的值未正确传递到脚本的SUBMIT部分。 Any help appreciated. 任何帮助表示赞赏。

<?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();
?>

Thanks! 谢谢!

You are missing single quotes around your $name[$i] in the SQL statement. SQL语句中$name[$i]周围缺少单引号。 If id is not always numeric, you will also need to surround $id[$i] in single quotes. 如果id并非总是数字,则还需要将$id[$i]括在单引号中。

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

Some error checking in your mysql_query() call would make this clearer. mysql_query()调用中进行一些错误检查将使这一点更加清晰。 See below. 见下文。

And you must filter these against SQL injection before passing them to the 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();
  }
}

My Mistake. 我的错。 I didn't look at the form enough. 我对表格的关注不够。 You are assigning an array here. 您在这里分配一个数组。 PHP is easy to debug- PHP易于调试-

Right here: 就在这儿:

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

After those lines use var_dump($id) or print_r($id) to check out the contents in your variables. 在这些行之后,使用var_dump($ id)或print_r($ id)来检查变量中的内容。

Thanks very much for the prompt responses and the assistance provided. 非常感谢您的及时答复和所提供的帮助。 After implementing the recommended changes, the final working script (using PHP 5.2) is as shown below (for anyone who might need it). 实施建议的更改之后,最终的工作脚本(使用PHP 5.2)如下所示(适用于可能需要此脚本的任何人)。

  <?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();
?>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM