【问题标题】:HTML input form array values not passing through to PHP submitHTML 输入表单数组值未传递给 PHP 提交
【发布时间】:2011-12-30 18:17:50
【问题描述】:

我创建了一个 html 表单以使用户能够更新数据。但是输入数据(数组值)不会传递给 php SUBMIT,因此单击 SUBMIT 不会更新表。当我进入脚本的 SUBMIT 部分并将 SET 更改为特定数字或文本时,表格会更新。这意味着来自 html 输入数据数组的值未正确传递到脚本的 SUBMIT 部分。任何帮助表示赞赏。

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

谢谢!

【问题讨论】:

  • 您正在使用循环创建 HTML,并且您的输入有一个 id。如果 while 循环多次执行,您将拥有重复的 id

标签: php arrays


【解决方案1】:

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

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

在您的mysql_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();
  }
}

【讨论】:

  • 问题已修复。感谢你的协助。我将在今天晚些时候发布最终脚本,供以后可能需要的人使用。
【解决方案2】:

我的错误。我没有看足够的表格。您在这里分配一个数组。 PHP 易于调试-

就在这里:

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

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

【讨论】:

  • 问题已修复。感谢你的协助。我将在今天晚些时候发布最终脚本,供以后可能需要的人使用。
【解决方案3】:

非常感谢您的及时回复和提供的帮助。实施建议的更改后,最终的工作脚本(使用 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();
?>

【讨论】:

    猜你喜欢
    • 2019-06-19
    • 1970-01-01
    • 2015-01-20
    • 1970-01-01
    • 2015-08-31
    • 2018-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多