2016-04-17 28 views
0

我想与列最后一行值被添加到现有的所有行与更新查询

更新表之前UPDATE

ROLLNO NAME  ATTENDANCE  DAY MONTH YEAR 
    1  Name1 PRESENT  16 04  2016 
    2  Name2 PRESENT  16 04  2016 
    3  Name3 PRESENT  16 04  2016 

更新我试图改变出勤后“缺席“每个人都

但是更新后发生的事情是

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中的值来检查存储和传递的值是否正确,并且是完美的。问题是在更新到数据库时

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

在where子句中,您必须使用唯一值进行更新。 –

+0

**警告**:使用'mysqli'时,您应该使用参数化查询和['bind_param'](http://php.net/manual/en/mysqli-stmt.bind-param.php)添加用户数据到您的查询。 **不要**使用字符串插值或连接来实现这一点,因为如果您忘记逃离某些东西,您可以非常轻松地创建严重的[SQL注入漏洞](http://bobby-tables.com/)。 – tadman

+0

你应该显示整个逻辑。将'update'放在循环中通常是可以避免的。 –

回答

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,你可能想看看在做一个独特的密钥,但delends在许多其他的事情我不knwo约你的数据库设计,我不能肯定

0

我怀疑,你可以更新你想用一个循环来更新行:

update aclass10 
    set attendance = 'ABSENT' 
    where ??; 

我不知道的情况是什么。如果它适用于所有日子的每个人,那么你不需要where条款。如果某一天,然后:

update aclass10 
    set attendance = 'ABSENT' 
    where year = $year and month = $month and day = $day; 

(注:这应该是一个参数值,但我把它留在原来的形式。)

的另一个问题是,为什么你使用三列对于某个日期,MySQL提供称为date的真正方便的数据类型来存储这些信息。

相关问题