我想使用列
更新表格更新前
ROLLNO NAME ATTENDANCE DAY MONTH YEAR
1 Name1 PRESENT 16 04 2016
2 Name2 PRESENT 16 04 2016
3 Name3 PRESENT 16 04 2016
更新后我试图将出勤率更改为" ABSENT"适合所有人
但更新后会发生什么
ROLLNO NAME ATTENDANCE DAY MONTH YEAR
3 Name3 ABSENT 16 04 2016
3 Name3 ABSENT 16 04 2016
3 Name3 ABSENT 16 04 2016
这是更新数据库的代码。但是这里的问题是整个表格在更新时填充了最后一行的值。我已经回显了foreach中的值,以检查存储和传递的值是否正确并且是完美的。问题是将其更新到DB
foreach ($name_array as $key => $name_values) {
$name_values = mysqli_real_escape_string($connection,$name_values);
$roll_values = mysqli_real_escape_string($connection,$roll_array[$key]);
$att_values = mysqli_real_escape_string($connection,$att_array[$key]);
echo $name_values."<br>";
echo $att_values."<br>";
echo $roll_values."<br>";
$sql= "UPDATE `aclass10` SET
Name='".$name_values.
"',attendance='".$att_values.
"',RollNo='".$roll_values.
"',day='".$day.
"',month='".$month.
"',year='".$year.
"'WHERE day='".$day."'";
$result = mysqli_query($connection,$sql);
}
我犯的错误是什么以及如何解决?
答案 0 :(得分:2)
你的where子句错了!
更改它以使用滚动编号,我认为这是唯一的,就像这样,您还可以简化查询字符串以使其更易于阅读。
foreach ($name_array as $key => $name_values) {
$name_values = mysqli_real_escape_string($connection,$name_values);
$roll_values = mysqli_real_escape_string($connection,$roll_array[$key]);
$att_values = mysqli_real_escape_string($connection,$att_array[$key]);
echo $name_values."<br>";
echo $att_values."<br>";
echo $roll_values."<br>";
$sql= "UPDATE `aclass10` SET
Name='$name_values',attendance='$att_values',
RollNo='$roll_values',day='$day`,
month='$month,year='$year
WHERE RollNo ='$roll_values'";
$result = mysqli_query($connection,$sql);
}
您的脚本可能会向SQL Injection开放,具体取决于您创建输入数组的方式。您应该检查此帖子并尝试使用参数化查询。
如果您之前的查询可以将所有roll_number列修改为相同的ID,那么您可能希望将其设置为一个唯一的密钥,但这会删除许多其他我不了解您的数据库设计的内容我无法确定
答案 1 :(得分:0)
我怀疑您只需使用一个循环更新要更新的行:
update aclass10
set attendance = 'ABSENT'
where ??;
我不确定这是什么情况。如果它适用于所有人,那么您就不需要where
条款。如果是某一天,那么:
update aclass10
set attendance = 'ABSENT'
where year = $year and month = $month and day = $day;
(注意:这应该是一个参数化值,但我将其保留为原始形式。)
另一个问题是,当MySQL提供非常方便的数据类型date
来存储此类信息时,为什么要使用三列作为日期。