2017-09-29 91 views
1

我目前正在開展一個網站項目,以幫助講師鎖定學生作業標記。我的問題在於,只要輸入分數,它只會輸入表格中最後一名學生的分數,並將其保存給所有學生。如何按行輸入學生作業標記

例如:

student1 quiz1 = 1 
student2 quiz1 = 2 

它只會讀取和保存student2馬克並將其保存在student1student2

下面的代碼:

<?php 

$sql8 = "SELECT pelajar, matrix_no, class, subjek FROM daftar WHERE subjek='$subjek' AND program='$program' AND semester='$semester' AND status='$status' AND ic_no='$ic_no'"; 
$result8 = mysqli_query($db, $sql8); 

while ($row = mysqli_fetch_array($result8)) { 
?> 

<?php 

     if (isset($_POST['kuiz1'])){ 
     $kuiz1 = $_POST['kuiz1'];} 

     if (isset($_POST['kuiz2'])){ 
     $kuiz2 = $_POST['kuiz2'];} 

     if (isset($_POST['lab1'])){ 
     $lab1 = $_POST['lab1'];} 

     if (isset($_POST['lab2'])){ 
     $lab2 = $_POST['lab2'];} 

     if (isset($_POST['lab3'])){ 
     $lab3 = $_POST['lab3'];} 

     if (isset($_POST['pbt1'])){ 
     $pbt1 = $_POST['pbt1'];} 

     if (isset($_POST['pbt2'])){ 
     $pbt2 = $_POST['pbt2'];} 

     if (isset($_POST['case1'])){ 
     $case1 = $_POST['case1'];} 

     if (isset($_POST['case2'])){ 
     $case2 = $_POST['case2'];} 

?> 

    <tr> 
    <td><?php echo $row['pelajar']?></td> 
    <td><?php echo $row['matrix_no']?></td> 

    <td><input type ="textbox" name="kuiz1" size="1" align="center"><br><br> 

    <td><input type ="textbox" name= ="kuiz2" size="1"><br><br> 

    <td><input type ="textbox" name="lab1" size="1"><br><br> 

    <td><input type ="textbox" name="lab2" size="1"><br><br> 

    <td><input type ="textbox" name="lab3" size="1"><br><br> 

    <td><input type ="textbox" name="pbt1" size="1"><br><br> 

    <td><input type ="textbox" name="pbt2" size="1"><br><br> 

    <td><input type ="textbox" name="case1" size="1"><br><br> 

    <td><input type ="textbox" name="case2" size="1"><br><br> 

    </tr> 
    <?php 
    if (isset($_REQUEST['hantarMarkah'])) { 
      $sql9 = "UPDATE daftar SET kuiz1='$kuiz1', kuiz2='$kuiz2', lab1='$lab1', lab2='$lab2', lab3='$lab3',  pbt1='$pbt1', pbt2='$pbt2', case1='$case1', case2='$case2' WHERE subjek='$subjek' AND program='$program' AND semester='$semester' AND status='$status' AND ic_no='$user_check'"; 
     $result9 = mysqli_query($db, $sql9); 
    } ?>  


    </form> 
<?php  
} 
?>   

如何輸入每個學生相應的標誌,並將其保存在每個學生排?

+0

您總是將'$ _POST ['kuiz1']'和* others *保存給每個學生。 – Wreigh

+0

但是在數據庫中它只會保存表格中最後一個學生的記錄。我的代碼有什麼問題? –

+0

'$ user_check'從哪裏來的? – Wreigh

回答

0

這是你的代碼是這樣做的:(我將使它簡單)

這將運行查詢(比方說,讓學生的所有記錄)

$sql8 = "SELECT pelajar, matrix_no, class, subjek FROM daftar WHERE subjek='$subjek' AND program='$program' AND semester='$semester' AND status='$status' AND ic_no='$ic_no'"; 
$result8 = mysqli_query($db, $sql8); 

現在,這將遍歷查詢結果迭代。 (迭代通過所有行

while ($row = mysqli_fetch_array($result8)) { 

然後,你這樣做是:(比方說,得到輸入kuiz1並保存到$kuiz1

if (isset($_POST['kuiz1'])) 
     $kuiz1 = $_POST['kuiz1']; 

注意您正在從$_POST['kuiz1']中檢索一個值,該值在整個循環中始終保持相同的值。

因此,在每次迭代,你分配相同相同變量,總之,這些變量將始終具有相同的作爲第一次迭代。

繼續......

完成所有這些變量設置後,執行更新。 (比方說,更新所有行WHERE ...)

$sql9 = "UPDATE daftar SET kuiz1='$kuiz1', kuiz2='$kuiz2', lab1='$lab1', lab2='$lab2', lab3='$lab3',  pbt1='$pbt1', pbt2='$pbt2', case1='$case1', case2='$case2' WHERE subjek='$subjek' AND program='$program' AND semester='$semester' AND status='$status' AND ic_no='$user_check'"; 
$result9 = mysqli_query($db, $sql9); 

在這裏,我已經注意到了(糾正我,如果我錯了),有沒有獨特的屬性,以對抗比較,這裏是你的WHERE條款。

"... WHERE subjek='$subjek' AND program='$program' AND semester='$semester' AND status='$status' AND ic_no='$user_check'" 

什麼,將要做的是更新與你剛剛取回值的所有行

  • 主題= $subjek
  • 程序= $program
  • 學期= $semester
  • 個狀態= $status
  • ic_no = $user_check

我看你的WHERE條款可能實際上指向的行數(從而更新所有行的),因爲你沒有任何屬性來指單列這樣的:IDRECORD_ID

然後你再重複,直到所有是牽強。

我的觀點

  • 你從相同源每次迭代檢索值,因此,所有的整個迭代過程中,你在節省相同值數據庫
  • 您的更新查詢,您沒有行的唯一標識符,因此您可能會同時更新多行(無論何時通過您的WHERE子句)。
+0

一旦一切都清楚,我會更新我的答案。:) – Wreigh

+0

謝謝你。感謝您花時間回答我的問題。所以我應該在這裏做什麼? –

+0

你是從表單輸入中檢索'kuiz1' ...嗎? – Wreigh