[英]PHP & MySQL update query only ever updates the last record in the table
我有一個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
表:
讓我們從可見性開始:
為將來的用戶看到您的問題。 如果你知道這一點,太好了! 歡迎來到Stack Overflow! 請不要在新代碼中使用
mysql_*
函數 。 它們不再被維護,並且已經開始棄用 。 看到紅色的盒子 ? 了解准備好的語句 ,並使用PDO或MySQLi - 本文將幫助您確定哪些。 如果您選擇PDO, 這是一個很好的教程 。
您遇到的問題是由於您的所有輸入都具有相同的名稱( id
, carmake
等)。 這意味着只會提交最后一行。
給他們這樣的名字:
name="id[]"
這將使PHP將$_POST
值視為數組,並且您可以訪問
$_POST["id"][3]
例如,獲取第四行(從0開始)。
@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); ?>
這是因為你正在寫$_POST[carmake]
, $_POST[carmodel]
等,因為它們都有相同的表格名稱。
您可以通過將[]
附加到表單名稱的末尾來解決此問題,然后將其作為數組。
然后您可以通過以下方式訪問它們:
$_POST[carmake][n]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.