php
  • mysql
  • 2013-10-18 102 views 2 likes 
    2

    我有一個由此查詢填充的表單。這工作正常,我有適當的文本字段中的值。下面是表單代碼:PHP表單提交,但只更新最後一行..需要更新所有行

    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" } 
    
    +0

    請儘量避免使用'mysql_ *'函數,因爲它們現在已被棄用。相反,看看http://php.net/manual/en/book.pdo.php(PDO)或http://php.net/manual/en/book.mysqli.php(MySQLi) –

    +0

    好的,謝謝你,我現在就去看看。 – andy

    +0

    我們可以得到$ _POST的var_dump嗎? – 1owk3y

    回答

    2

    表單數據是一個數組數組,但不是循環它們。您的保存代碼應該如下所示:

    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"); } 
        } 
    } 
    
    +0

    奇妙的是,這完美的作品!謝謝 – andy

    0

    Andy您必須在循環中運行您的查詢,請嘗試類似下面的代碼。

    $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"); 
    } 
    } 
    
    相關問題