如何通过AJAX发送大量数据,用PHP插入MySQL数据库

时间:2017-08-01 10:19:00

标签: php jquery mysql ajax

我有一个页面,我可以从数据库动态生成大量学生行(最多约50个)。该页面允许教师一次为每个学生输入成绩。这些行是使用AJAX / jQuery生成的,看起来像这样:

$("#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数组中的第一个值相互连接并相应地输入到DB中。 / p>

4)使用AJAX将此数据发送到后端是否安全?我计划稍后使用HTTPS。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

如果您正在使用AJAX,我会寻求一个不错的用户体验解决方案,其中包括反馈是否已保存输入的数据。另外,出于数据完整性的原因,我会在输入字段上使用数据集,例如

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

这样,输入的值默认绑定到学生和主题ID,您不需要稍后映射各种数组。

通过在这样的输入字段上使用blur事件,可以发送AJAX请求以更新该单个值(inpmark)以及学生和主题ID,如果请求返回&#34; ok&# 34;,输入的背景可以变为绿色,例如通知用户信息现在保存在数据库中(focus事件可以再次删除背景颜色。)

关于你的问题,

  1. 如果每个标记都有请求,则无需循环。
  2. 最佳解决方案实际上取决于具体的使用案例以及教师将如何使用它。
  3. 通过将学生和主题ID添加到输入数据集中,这已经解决了。
  4. 再次取决于,这是公开的,是DMZ中的数据库服务器还是仅用于内联网?