【问题标题】:How to insert data to database using multiple array using POST method with ajax:如何使用带有 ajax 的 POST 方法使用多个数组将数据插入数据库:
【发布时间】:2015-05-01 04:29:47
【问题描述】:

我在这个问题中读到了类似的答案:How to insert into MYSQL row from multiple $_POST arraysHow to insert into MYSQL row from multiple $_POST arrays 但问题是这些答案在我的代码中不起作用。是因为我使用了ajax吗?我只得到第一个数组的值。

如果我也将变量声明放在 for 循环中,它也不起作用。

这是我的 ajax:

var name = []; 
$('input[name="name[]"]').map(function(){ name.push($(this).val()); }); var studid = []; 
$('input[name="studid[]"]').map(function(){ studid.push($(this).val()); }); var nameStr = name != '' ? '&name='+ name : '';
var studStr = studid != '' ? '&studid='+ studid : '';
var dataString = 'subject='+ subject + '&section=' + section + studStr + nameStr;

$.ajax({ type: "POST", url: 'save.php', data: dataString, dataType: "html", 
success: function(data) {
    $('input#subject-field').val('');
    $('input#section-field').val('');
    $('input.record-input-forms').val('');
    $('#status-message').css({"color":"#39b1c6"});
    $('#status-message').html('Save successfully',function(){
    $('#status-message').fadeOut(2000); }); }, 
error:function (xhr, ajaxOptions, thrownError){
    alert(thrownError); } });
    return false;
}); 

这是我的 php:

if(isset($_POST['studid']) || isset($_POST['name'])){
    $studid = array_map(mysql_real_escape_string, explode(",",$_POST['studid']));
    $name = array_map(mysql_real_escape_string, explode(",",$_POST['name']));   

    for ($i=0; $i<count($studid); $i++){
        $sql_1 = "INSERT INTO tbl_student(StudentID, StudentName, SubjectID)  VALUES ('".$studid[$i]."', '".$name[$i]."', LAST_INSERT_ID())"; 
        mysqli_query($con,$sql_1);  
    } 
}

【问题讨论】:

    标签: php jquery mysql ajax mysqli


    【解决方案1】:

    您没有从 jQuery 正确发送数据,并且您似乎将数组和字符串混合在一起。

    这是一个从 jQuery 发布 studid-array 的简单请求

    var saveData = $.ajax({
                        type: 'POST',
                        data: {studid: studid},
                        url: 'save.php',
                        dataType: 'html'
                    });
    
    saveData.done(function(data) {                                                   
        $('input#subject-field').val('');
        $('input#section-field').val('');
        $('input.record-input-forms').val('');
        $('#status-message').css({"color":"#39b1c6"});
        $('#status-message').html('Save successfully',function(){
        $('#status-message').fadeOut(2000); });
    
    });                        
    
    saveData.fail(function(ts) {
        alert(ts.responseText);
    });
    

    当 save.php 被调用时,$_POST['studid'] 将被设置(如果数组中有任何东西)

    如果你这样做:

    var saveData = $.ajax({
                            type: 'POST',
                            url: 'save.php?studid=' + studid,
                            dataType: 'html'
                        });
    

    当调用 save.php 时,$_GET['studid'] 将被设置(如果数组中有任何内容)。最好的方法是在 ajax 函数调用中使用数据选项(在我的第一种情况下)。如果您选择使用此选项,则必须先序列化 stuid-array,然后再将其作为 url 的一部分。

    更新 如果要传递多个数组,则必须执行以下操作:

    var saveData = $.ajax({
                            type: 'POST',
                            data: {studid: studid, name_arr2: data_arr2},
                            url: 'save.php',
                            dataType: 'html'
                        });
    

    【讨论】:

    • 感谢您的回复,这实际上与我的问题有关:stackoverflow.com/questions/28665983/… 如果我只使用一个数组并使用 foreach 循环每个数组,它实际上是有效的,没有问题将数据发送到数据库。当我试图在我的请求中添加另一个数组时,我偶然发现了 var $name。,因为 foreach 只能处理一个参数,所以我尝试使用 forloop,但我无法弄清楚。
    • 如果你有两个数组,你想用 data-option 发送,只需这样做: data: {name of arr1: data from arr1, name of arr2: data from arr2}
    • 但是我的 php 编码是否正确?我在使用 ajax 方面还是新手,而且我还没有那么好。我希望有一个更直接的答案。但谢谢你,我会尝试配置你提供的答案。 :)
    • @rigorcadiz - 一个更直接的答案? “这些答案在我的代码中不起作用。”,“我只得到第一个数组的值。”,“如果我也将变量声明放在 for 循环中,它也不起作用。”。 ---- 我看到你的代码不工作,但从基础开始......你想用你的代码实现什么?
    • 我想知道,我上面的代码做错了什么,尤其是在 php 中。为什么我无法使用 for 循环获取每个数组的值,如果我从 jquery/ajax 错误地发送数据,那么为什么如果使用 foreach 它会起作用?例如,如果我只使用一个数组。我可以单独从变量 $studid 中保存每个数组的值。
    【解决方案2】:

    使用 mysql_insert_id(); 而不是 LAST_INSERT_ID()

    【讨论】:

    • 这是我所拥有的解决方案的一部分,ajax 没有任何问题。这是我的错,我将他的主题 ID 设置为表学生中的外键。我将语法 last_insert_id() 更改为上面的语法,现在它正在工作。谢谢。
    猜你喜欢
    • 2016-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多