我有一个HTML表单,我用它来通过post脚本更新MySQL表 - 但是,我遇到的问题是每行上的更新按钮只能用于表中的最后一行。< / p>
<?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
表:
答案 0 :(得分:5)
让我们从可见性开始:
让未来的用户看到您的问题。如果你知道这一点,太好了!欢迎来到Stack Overflow! Please, don't use
mysql_*
functions in new code。它们不再被维护,deprecation process已经开始了。请参阅red box?转而了解prepared statements,并使用PDO或MySQLi - this article将帮助您确定哪个。如果您选择PDO here is a good tutorial。
您遇到的问题是通过为所有输入提供相同的名称(id
,carmake
等)引起的。这意味着只会提交最后一行。
给他们这样的名字:
name="id[]"
这会使PHP将$_POST
值视为数组,您可以访问
$_POST["id"][3]
获取第四行(从0开始),例如。
答案 1 :(得分: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); ?>
答案 2 :(得分:1)
因为它们有$_POST[carmake]
,$_POST[carmodel]
等等,因为它们都有相同的表格名称。
您可以通过将[]
附加到表单名称的末尾来解决此问题,然后将其作为数组。
然后您可以通过以下方式访问它们:
$_POST[carmake][n]