2

ポストスクリプトを介してMySQLテーブルを更新するために使用しているHTMLフォームがありますが、各行にある更新ボタンがテーブルの最後の行に対してのみ機能するという問題があります。

<?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_*。それらはもはや維持されておらず、非推奨プロセスが開始されています。赤いボックスが見えますか? 代わりにプリペアド ステートメントについて学び、 PDOまたはMySQLiを使用してください。この記事は、どちらを決定するのに役立ちます。PDO を選択する場合は、ここに良いチュートリアルがあります。


発生している問題は、すべての入力に同じ名前 (など)idを付けることが原因です。carmakeこれは、最後の行のみが送信されることを意味します。

次のように名前を付けます。

name="id[]"

これにより、PHPは$_POST値を配列として扱い、アクセスできます

$_POST["id"][3]

たとえば、4 行目 (0 から開始) を取得するには、次のようにします。

于 2012-12-05T17:20:50.593 に答える
2

@MadaraUchiha は更新の問題の解決策を証明しましたが、コードをフォーマットする方法の代替案を提案したいと思います。

php の特徴の 1 つは、それを 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 に答える