Php 更新查询只更新最后一行,并用它影响其他行';s值
您需要更改表单,以便每一行都有一个包含该行ID的隐藏输入Php 更新查询只更新最后一行,并用它影响其他行';s值,php,mysql,Php,Mysql,您需要更改表单,以便每一行都有一个包含该行ID的隐藏输入 <?php include 'connection.php'; $i = 0; while ($i < 5) { // define each variable $scoreaway = $_POST['f'][$i]; // do the update and print out some info just to provide some visual feedb
<?php
include 'connection.php';
$i = 0;
while ($i < 5) {
// define each variable
$scoreaway = $_POST['f'][$i];
// do the update and print out some info just to provide some visual feedback
echo $query = "UPDATE lectures_table SET first='".$scoreaway."' WHERE
group_num=1";
mysql_query($query) or die ("Error in query: $query");
$i++;
}
mysql_close();
?>
此外,您应该从过时的mysql扩展切换到mysqli或PDO,并使用准备好的语句。您当前的代码易受SQL注入攻击。请参见“更新”查询将更新
group_num=1
的任何行和所有行,因为这正是在查询中写入的内容。在查询中使用$\u POST['group_num']
而不是1
。无需将隐藏的输入放入while()
循环中,因为每一行的值都相同。在循环外执行一次。给定的group_num=1在where条件下,值会动态变化,但条件相同,所以最后一个值会更新。先生,我尝试过,但没有任何更改。我不知道为什么最后一行会将其值赋予其他行,因为UPDATE
语句使用的是相同的“where group_num=$\u POST['group_num']``对于每个输入。行中是否有一个ID,它应该用来只更新该行?我收到错误消息Undefined index:ID为foreach()提供的参数无效。我该怎么办?显然,您需要用包含每行主键的列的实际名称替换它。我不知道您的表结构,我猜它会被命名为id
,因为这很常见。
<?php
include 'connection.php';
$i = 0;
while ($i < 5) {
// define each variable
$scoreaway = $_POST['f'][$i];
// do the update and print out some info just to provide some visual feedback
echo $query = "UPDATE lectures_table SET first='".$scoreaway."' WHERE
group_num=1";
mysql_query($query) or die ("Error in query: $query");
$i++;
}
mysql_close();
?>
while($row=mysql_fetch_array($result)){ ?>
<tr>
<td><input type="hidden" name="id[]" value="<?php echo $row['id']; ?>" /></td>
<td><input type="text" placeholder="First Lecture" name="day[]" value="<?php echo $row['day']; ?>"></td>
<td><input type="text" placeholder="First Lecture" name="f[]" value="<?php echo $row['first']; ?>"></td>
</tr>
<?php }
foreach ($_POST['id'] as $i => $id) {
$scoreaway = $_POST['f'][$i];
$day = $_POST['day'][$i];
$query = "UPDATE lectures_table
SET first='$scoreaway', day = '$day'
WHERE id = $id";
mysql_query($query);
}