【问题标题】:PHP Form Submits But Only Updates Last Row.. Need to Update All RowsPHP表单提交但只更新最后一行..需要更新所有行
【发布时间】:2013-10-27 03:25:22
【问题描述】:

我有一个由该查询填充的表单。这工作正常,我在适当的文本字段中有值。这是表单代码:

print "<form action='update.php' method='post'>";

print "<table width='655' border='1'><tr><th width='40'>Quantity</th><th width='40'>Code</th><th width='175'>Product Description</th><th width='50'>Unit Price</th><th width='50'>Total Price</th><th width='50'>Qty Checked</th><th width='65'>Quantity Passed</th><th width='65'>Failure Type</th>";

$result = mysqli_query($con,"SELECT * FROM b_tasks_po WHERE TASK_ID=$taskid");

while($row = mysqli_fetch_array($result))
{
echo "<td>" . $row['QTY'] . "</td>";
echo "<td><input type='hidden' name='ID[]' value='" . $row['ID'] . "'>" . $row['CODE'] . "</td>";
echo "<td>" . $row['PRODUCT_DESCRIPTION'] . "</td>";
echo "<td>" . $row['UNIT_PRICE'] . "</td>";
echo "<td>" . $row['TOTAL_PRICE'] . "</td>";
echo "<td><input type='text' size='5' name='QTY_CHECKED[]' style='padding:5px;' value='" . $row['QTY_CHECKED'] . "'></td>";
echo "<td><input type='text' size='5' name='QTY_PASSED[]' style='padding:5px;' value='" . $row['QTY_PASSED'] . "'></td>";
echo "<td><select name='FAILURE_TYPE[]'><option value=''></option><option value='Missing'>Missing</option><option value='Option 2'>Option 2</option></select></form></td>";
echo "</tr>";
}
echo "</table>";

print "<p><input type='submit' name='submit' value='Click to Save'></p><p><strong>Comments</strong></p>";

然后它被传递给我的更新,如下所示:

if (isset($_POST['submit'])) {

$sql = "UPDATE b_tasks_po SET QTY_CHECKED='".$_POST['QTY_CHECKED']."', QTY_PASSED='".$_POST['QTY_PASSED']."', FAILURE_TYPE='".$_POST['FAILURE_TYPE']."' WHERE ID='".$_POST['ID']."'";
$result=mysql_query($sql)or 
die ("Error"); }

显示数据库中所有适当行的第一个查询返回 7 行。每行都有表单元素。我目前想更新每一行中的数字,按提交,然后在数据库中更新它们。目前的问题是它只更新最后一行。阅读后我明白它可以识别所有相同的字段名称,但我在每个名称的末尾添加了 [],但仍然没有乐趣。

表格中的每一行都有一个 ID,我有一个隐藏的文本字段来标识每一行中的 ID,那么我哪里出错了?为什么它只是更新最后一行?

任何帮助将不胜感激。

这就是回显var_dump($_POST['QTY_CHECKED'])。返回:

array(7) { [0]=> string(2) "10" [1]=> string(5) "25000" [2]=> string(2) "25" [3]=> string(2) "15" [4]=> string(2) "25" [5]=> string(2) "54" [6]=> string(6) "120000" } 

【问题讨论】:

  • 请尽量避免使用 mysql_* 函数,因为它们现在已被弃用。相反,请查看 php.net/manual/en/book.pdo.php (PDO) 或 php.net/manual/en/book.mysqli.php (MySQLi)
  • 好的,谢谢,我现在去看看。
  • 我们可以得到 $_POST 的 var_dump 吗?
  • 在上一节中添加了 $_POST['QTY_CHECKED'] 的 var_dump。

标签: php mysql


【解决方案1】:

表单数据是一个数组数组,但您没有循环遍历它们。您的保存代码应如下所示:

if (isset($_POST['submit'])) {
  foreach ($_POST['ID'] as $index => $id) {
    $sql = "UPDATE b_tasks_po SET QTY_CHECKED='".$_POST['QTY_CHECKED'][$index]."', QTY_PASSED='".$_POST['QTY_PASSED'][$index]."', FAILURE_TYPE='".$_POST['FAILURE_TYPE'][$index]."' WHERE ID='".$_POST['ID'][$index]."'";
    $result=mysql_query($sql)or 
    die ("Error"); }
  }
}

【讨论】:

    【解决方案2】:

    安迪,你必须循环运行你的查询,试试下面的代码。

    $count = count($_POST['ID']);
    if($count>0){
    for($i=0;$i<$count;$i++){
       $sql = "UPDATE b_tasks_po SET QTY_CHECKED='".$_POST['QTY_CHECKED'][$i]."', QTY_PASSED='".$_POST['QTY_PASSED'][$i]."', FAILURE_TYPE='".$_POST['FAILURE_TYPE'][$i]."' WHERE ID='".$_POST['ID'][$i]."'";
       $result=mysql_query($sql)or die ("Error"); 
     }
    }
    

    【讨论】:

      猜你喜欢
      • 2017-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-16
      • 1970-01-01
      • 2015-08-12
      • 1970-01-01
      相关资源
      最近更新 更多