2017-08-01 53 views
0

我有一個頁面,可以從數據庫動態生成很多行的學生(最多大約50個)。該頁面允許教師一次爲每個學生輸入成績。該行使用AJAX/jQuery的產生,看起來是這樣的:如何通過AJAX發送大量數據以便用PHP插入到MySQL數據庫中

$("#tbodystudents").append('<tr><td class="studentid" style="display:none">'+value[0]+'</td><td class="subjectid" style="display:none">'+value[1]+'</td><td><input class="inpmark" type="number"></td>/tr>'); 

我然後將其發送到我的PHP文件是這樣的:

$("#btnaddmarks").click(function(){ 
    var marks= $("input.inpmark").map(function(){ 
    return $(this).val(); 
    }).get().map(); 

    var studentids= $(".studentid").map(function() { 
    return $(this).text(); 
    }).get().map(); 

    var subjectids= $(".subjectid").map(function() { 
    return $(this).text(); 
    }).get().join(); 

$.ajax({ 
    type: "POST", 
    url: "modules/addmarks.php", 
    dataType: 'json', 
    data: {s:studentids,m:marks,subj:subjectids}, 
    cache: false, 
    }) // etc.. 
}); 

和我的PHP,addmarks.php:

<?php 
$inputvalues = $_POST; 
$errors = false; 
$returnResult; 
$result = false; 
include_once '../../../includes/database.php'; 

$studentids = $inputvalues['s']; 
$marks = $inputvalues['m']; 
$subjectids= $inputvalues['subj']; 

$studentid = explode(",",$studentids); 
$mark= explode(",",$marks); 
$subjectid= explode(",",$subjectids); 

    if (mysqli_connect_errno()) { 
     printf("Connect failed: %s\n", mysqli_connect_error()); 
     exit(); 
    } 

if(!$errors) { 
    $sql = "INSERT INTO `marks` (`studentid`, `subjectid`,`mark`) VALUES (?,?,?)"; 
    $stmts = $mysqli->prepare($sql); 
    $stmts->bind_param('iii',$studentid,$subjectid,$mark); 
    $result = $stmts->execute(); 
    $returnResult = "Success"; 
} 
    mysqli_close($mysqli); 
    echo json_encode(['result' => $returnResult, 'errors' => $errors]); 
    exit; 
?> 

所以我的問題是,

1)我怎麼能循環的值和插入相應的值到我的數據庫?

2)這是解決此問題的最佳方法嗎?如果不是,那是什麼?

3)如何確保輸入正確的值,意味着studentids數組中的第一個值和marks數組中的第一個值被連接並相應地輸入到數據塊中。

4)使用AJAX將數據發送到後端安全嗎?我打算以後使用HTTPS。

感謝您的幫助。

回答

1

如果您正在使用AJAX,我會選擇一個不錯的UX解決方案,其中包括反饋輸入的數據是否已保存。另外,出於數據完整性的原因,我會在輸入字段上使用數據集,例如

<input class="inpmark" type="number" data-studentid="123" data-subjectid="45"> 

通過這種方式,將輸入的值綁定到默認的學生,主體ID,你不需要在不同的陣列稍後進行映射。

通過在這樣的輸入字段上使用blur事件,可以發送一個AJAX請求來與該學生和主題ID一起更新該單個值(inpmark),如果請求返回「ok」,則輸入的背景可能會變成綠色,例如通知用戶信息現在保存在數據庫中(focus事件可能會再次移除背景顏色)。

關於您的問題,

  1. 無需循環是否有對於每個標記的請求。
  2. 最好解決方案真的取決於具體的用例以及教師如何使用它。
  3. 通過將學生和主題ID添加到輸入的數據集中,這已經解決了。
  4. 再次依賴,這是公開的嗎,DMZ中的數據庫服務器還是隻能在Intranet中使用?
+0

關於輸入字段的數據集思想非常棒!我對編程非常陌生,所以這是一個我正在學習的項目:)我可能沒有正確解釋,但是我點擊了一個按鈕發送所有數據,因此每個學生及其標記都不會單獨輸入到DB中。關於4,我打算設置一個小型服務器,以便我可以學習服務器管理員。這不是供公衆使用的,但我仍然想學習如何正確執行:) – Bruno

+0

發送所有數據(您不需要AJAX,只需提交表單)的問題,如果網絡出現故障或服務器,所有輸入的數據可能會丟失。因此,通過發送小片段數據,應用程序在數據完整性方面變得更加安全(並且減少了用戶的沮喪)。 – Paul

相關問題