【问题标题】:AJAX POST of multidimensional array- writing to MYSQL database with PHP多维数组的 AJAX POST - 使用 PHP 写入 MYSQL 数据库
【发布时间】:2011-11-09 21:34:47
【问题描述】:

感谢 Elf Sternberg(我无法让您的解决方案正常工作,抱歉),我认为我正朝着正确的方向前进,但我无法将 php 写入 mysql 数据库。

原帖:jQuery AJAX POST to mysql table for dynamic table data- Am I doing this in anything like the right way?

首先,我网页上的动态表格表单有多个用户输入数据,我正在使用这个 jQuery 函数和 AJAX 调用来发送到一个 php 文件。我在这里正确地创建了多维数组吗? Firebug 显示 dataString 包含我想要的所有数据,但 POST 参数和源只是说 dataString。警报功能还显示数据都在那里:

编辑:感谢 Jancha 和 Andrew,我更改了 AJAX 帖子的数据源。现在正在写入数据库,但只有 BLANK 数据被写入,与表中的条目一样多。 firebug 控制台正在显示帖子中应显示的所有数据。我现在只是不知道如何构建 php 循环。

  jQuery(function() {  
  jQuery(".button1").click(function() {  
    // process form here
    var rowCount = jQuery('#dataTable tr').length;

    var dataString = [];
    dataString.length = rowCount - 2;
    for(var i=2; i<rowCount; i++) {
    var txtRow1 = jQuery('#txtRow' + (i-1)).val();
    var tickerRow1 = jQuery('#tickerRow' + (i-1)).val();
    var quantRow1 = jQuery('#quantRow' + (i-1)).val();
    var valueRow1 = jQuery('#valueRow' + (i-1)).val();
    // previous code: dataString[i-2] = 'txtRow1='+ txtRow1 + '&tickerRow1=' + tickerRow1 + '&quantRow1=' + quantRow1 + '&valueRow1=' + valueRow1; 
    // new code:
    dataString[i-2] = [txtRow1, tickerRow1, quantRow1, valueRow1];
    }       
    //alert (dataString);return false;  

    jQuery.ajax({  
    type: "POST",  
    url: "form_action2.php",  
    data: { 'data': dataString }
    });  
return false;  
});  
});  

如果这可以发送数据,那么我认为 php 函数需要看起来像这样:

能否请我帮忙处理一下 php 函数。感谢您的时间。

$data = $_POST['data'];


foreach ($data as $key => $value){

$txtRow1 = $data['txtRow1'];
$tickerRow1 = $data['tickerRow1'];
$quantRow1 = $data['quantRow1'];
$valueRow1 = $data['valueRow1'];

$sqlinsert = "INSERT INTO stock_port (name, ticker, quantity, value) VALUES ('$txtRow1', '$tickerRow1', '$quantRow1', '$valueRow1')"; 

mysql_query($sqlinsert, $conn);
}

最终编辑:好的,这样可以将数据输入数据库:

$data = $_POST['data'];

foreach ($data as $value){
$txtRow1 = $value[0];
$tickerRow1 = $value[1];
$quantRow1 = $value[2];
$valueRow1 = $value[3];

$sqlinsert = "INSERT INTO stock_port (name, ticker, quantity, value) VALUES ('$txtRow1', '$tickerRow1', '$quantRow1', '$valueRow1')"; 

mysql_query($sqlinsert, $conn);
}

似乎在 AJAX jQuery 调用中使用 data: {'data':dataString} 意味着我丢失了数组中发送到 POST 的数据的所有变量名称。即使这行得通,但感觉并不像它应该做的那样。我已经看到其他人在他们的 id 或名称中使用数组结构来输入表单,这似乎应该是要走的路。

【问题讨论】:

    标签: php mysql jquery


    【解决方案1】:

    data: "dataString" 更改为data: dataString,否则您传递的不是变量而是“字符串”。

    【讨论】:

    • 你确定吗?实际上,根据我搜索的堆栈溢出问题的建议,我将其从 data: dataString 更改为 data: "dataString"。如果我做出您建议的更改,我会在 firebug 控制台中得到未定义的 POST 信息。
    • api.jquery.com/jQuery.ajax data: "Object, String 要发送到服务器的数据。如果还不是字符串,则将其转换为查询字符串。"所以,如果你想传递实际的数组而不是字符串“dataString”,我非常确定它应该不带引号。把 console.log(dataString);就在 jQuery.ajax 之前,并在控制台中查看它是什么。如果它仍然未定义,则问题出在生成它的循环之上。
    • 当我检查 dataString 时,它包含了我认为应该包含的所有数据,所以我认为问题不在于创建变量 dataString。
    • 我已经更改了创建数组的代码,它现在看起来更像是在萤火虫中查询时的样子。然而,控制台中帖子的来源在使用 " 引号时仍然只显示 'dataString',而当我不使用 " 时显示为 undefined。
    • 我同意jancha。如果要设置 $_POST['whatever'] ,则需要将 dataString 变量作为对象传递。用双引号括起来不会传递 dataString 的值(JavaScript 不能那样工作)。你应该这样做: data: { 'whatever': dataString }
    【解决方案2】:

    你的 foreach 语句有问题试试这个

    $data = $_POST['datastring'];
    foreach($data as $key => $value){
      $txtRow1 = $data['txtRow1'];
    }
    

    你试一次还没有测试过

    【讨论】:

    • 我试过了,但它也没有写入数据库。它看起来比我所拥有的要正确得多。可能是数据没有以正确的格式进入 php 文件。这就是jancha的想法。虽然,同时使用你的建议和他的建议,也不会写入数据库。
    猜你喜欢
    • 2011-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-20
    • 2019-01-01
    • 2017-06-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多