2016-04-17 29 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的真正方便的數據類型來存儲這些信息。

相關問題