2

我有一个 HTML 表单,用于通过 post 脚本更新 MySQL 表 - 但是,我遇到了一个问题,即每行上的更新按钮只适用于表中的最后一行。

<?php

$link = mysql_connect ('localhost', 'root', 'password');
mysql_select_db ('cardatabase');

$select = 'SELECT * from cars';
$result = mysql_query($select, $link);

if(isset($_POST['update'])){
    $updatequery = "UPDATE cars SET 
        ID='$_POST[id]',
        CARMAKE='$_POST[carmake]',
        CARMODEL='$_POST[carmodel]',
        FUELTYPE='$_POST[fueltype]',
        TRANSMISSION='$_POST[transmission]',
        DOORS='$_POST[doors]',
        AMOUNT='$_POST[amount]',
        AVAILABLE='$_POST[available]'
        WHERE ID='$_POST[hidden]'";

    mysql_query($updatequery, $link);
};

echo '<table><form action=update.php method=post>';
echo '<tr><td>ID</td><td>Make</td><td>Model</td><td>Fuel Type</td><td>Transmission</td><td>Engine Size</td><td>Doors</td><td>Amount</td><td>Available</td></tr>';



while($row = mysql_fetch_array($result)) {
    echo '<tr>';
    echo "<td><input type='text' name='id' value='{$row['ID']}'</td>";
    echo "<td><input type='text' name='carmake' value='{$row['CARMAKE']}'</td>";
    echo "<td><input type='text' name='carmodel' value='{$row['CARMODEL']}'</td>";
    echo "<td><input type='text' name='fueltype' value='{$row['FUELTYPE']}'</td>";
    echo "<td><input type='text' name='transmission' value='{$row['TRANSMISSION']}'</td>";
    echo "<td><input type='text' name='enginesize' value='{$row['ENGINESIZE']}'</td>";
    echo "<td><input type='text' name='doors' value='{$row['DOORS']}'</td>";
    echo "<td><input type='text' name='amount' value='{$row['AMOUNT']}'</td>";
    echo "<td><input type='text' name='available' value='{$row['AVAILABLE']}'</td>";
    echo "<td><input type='hidden' name='hidden' value='{$row['ID']}'</td>";
    echo '<td><input type="submit" name="update" value="Update"</td>';
    echo '</tr>';
}

echo '</form></table>';
mysql_close ($link);

cars桌子:

MySQL 表

4

3 回答 3

5

让我们从可见性开始:

对于看到您的问题的未来用户。如果您知道这一点,那就太好了!欢迎来到堆栈溢出!请不要mysql_*在新代码中使用函数。它们不再被维护,并且已经开始弃用过程。看到红框了吗?改为了解准备好的语句,并使用PDOMySQLi -本文将帮助您决定使用哪个。如果您选择 PDO,这里有一个很好的教程


您遇到的问题是由于为您的所有输入提供相同的名称(idcarmake)引起的。这意味着只会提交最后一行。

给他们起这样的名字:

name="id[]"

这将使 PHP 将$_POST值视为数组,您可以访问

$_POST["id"][3]

以获取第四行(从 0 开始)为例。

于 2012-12-05T17:20:50.593 回答
2

@MadaraUchiha 已经证明了您的更新问题的解决方案,但我想为您格式化代码的方式提出一种替代方案。

php 的功能之一是能够将其与 html 混合。我已经重新格式化了你的一段代码。正如你所看到的,我已经摆脱了你的大部分回声。以这种方式格式化代码的好处是您不必担心在字符串中正确嵌套引号,并且如果您使用带有语法突出显示的代码编辑器,则不会丢失 html 上的突出显示。

<table cellspacing="3" border="1" style="font-size:13px;background-color:white;">
    <form action="update.php" method="post">
        <tr style="background-color:#38C0CC;">
            <td>ID</td>
            <td>Make</td>
            <td>Model</td>
            <td>Fuel Type</td>
            <td>Transmission</td>
            <td>Engine Size</td>
            <td>Doors</td>
            <td>Amount</td>
            <td>Available</td>
        </tr>

        <?php while ( $row = mysql_fetch_array( $result ) ) { ?>
        <tr>
            <td><input type="text" name="id" value="<?php echo $row['ID']; ?>"/></td>
            <td><input type="text" name="carmake" value="<?php echo $row['CARMAKE]'; ?>"/></td>
            <td><input type="text" name="carmodel" value="<?php echo $row['CARMODEL']; ?>"/></td>
            <td><input type="text" name="fueltype" value="<?php echo $row['FUELTYPE']; ?>"/></td>
            <td><input type="text" name="transmission" value="<?php echo $row['TRANSMISSION']; ?>"/></td>
            <td><input type="text" name="enginesize" value="<?php echo $row['ENGINESIZE']; ?>"/></td>
            <td><input type="text" name="doors" value="<?php echo $row['DOORS']; ?>"/></td>
            <td><input type="text" name="amount" value="<?php echo $row['AMOUNT']; ?>"/></td>
            <td><input type="text" name="available" value="<?php echo $row['AVAILABLE']; ?>"/></td>
            <td><input type="hidden" name="hidden" value="<?php echo $row['ID']; ?>"/></td>
            <td><input type="submit" name="update" value="Update" /></td>
        </tr>
        <?php } ?>

    </form>
</table>
<?php mysql_close ($link); ?>
于 2012-12-05T17:55:30.630 回答
1

这是因为您正在覆盖$_POST[carmake],$_POST[carmodel]等,因为它们都具有相同的表单名称。

您可以通过附加[]到表单名称的末尾来解决此问题,然后使它们成为一个数组。

然后,您可以通过以下方式访问它们:

 $_POST[carmake][n]
于 2012-12-05T17:23:43.983 回答