将全部(网格)记录保存在新记录列表中

时间:2016-09-08 11:49:56

标签: javascript php extjs grid extjs5

我正在尝试在单个ajax请求中将整个范围的(网格)记录从商店发送到服务器,并将所有记录保存在另一个表中。

但似乎缺乏一些细节。

在客户端, console.log(记录)显示要发送的所有对象。

在客户端, echo'console.log(“PHP:'。$ data。'”)'exit; 返回 console.log(“PHP:”); < / em>的

EXTJS 5

private _initForm() {
    let now = moment();
    this.submitted = false;
    this.form = this.formBuilder.group({
        date: [now.format('DD.MM.YYYY'), [<any>Validators.required]],
        timeOfDay: [now.format('HH:mm'), [<any>Validators.required]],
        ...
    })
}

PHP

newList: function (button, e, eOpts) {

    var grid = this.lookupReference('gridRef');
    var store = grid.getStore(),

   // http://stackoverflow.com/questions/37663867/what-is-the-best-way-to-create-a-list-from-the-rows-of-a-grid

    //get whole range of records from the store
    var records = store.getRange().map(function(record) { return record.getData() }); 

    //console.log(records); // OK


    Ext.Ajax.request({
        url: 'php/newList.php?',
        method: 'POST',
        //jsonData: records,
        params:{records:Ext.encode(records)} //EDITED

        success: function(conn, response, options, eOpts) {
               console.log('Success');
        },
        failure: function(conn, response, options, eOpts) {
           console.log('Error')
        }
    });

编辑:

我更改了ajax请求 $records = stripslashes($_POST['records']); $data = json_decode($records, true); //var_dump($_POST); // echo 'console.log("PHP: '.$data.'")', exit; foreach($data as $row) { $item[] = $row['item']; } for($i=0; $i<count($data);$i++){ $sqlQuery = "INSERT INTO tab_list (item) VALUES (?)"; } if($statement = $conexao->prepare($sqlQuery)){ $statement->bind_param("s", $item[$i]); $statement->execute(); $success= true; }else{ $erro = $conexao->error; $success = false; } $sucess = array("success" => mysqli_errno($conexao) == 0); echo json_encode(array( "success" => $sucess )); $statement->close(); $conexao->close();  jsonData: records

在PHP代码上使用params:{records:Ext.encode(records)}我在DevTools上得到以下响应

var_dump($_POST);

但是,我仍然无法在表格中插入这些数据并创建新列表。问题现在在PHP代码中。

PHP解决方案:

array(10) {
  [0]=>
  array(5) {  
    ["item"]=>
    string(9) "item five"
    ["id"]=>
    string(22) "MyList.listDataModel-1"
  }
  [1]=>
  array(5) {
    ["item"]=>
    string(10) "item seven"
    ["id"]=>
    string(22) "MyList.listDataModel-2"
  }
  [2]=>
  array(5) {
    ["item"]=>
    string(9) "item four"
    ["id"]=>
    string(22) "MyList.listDataModel-3"
  }
...

1 个答案:

答案 0 :(得分:2)

在foreach循环之前初始化$item吗?看起来您希望if($statement = $conexao->prepare(...行位于for(或可能是foreach)循环中。

编辑问题后,请考虑使用 INSERT语句替代解决方案:

$total = count($item);
$sqlQuery = 'INSERT INTO tab_list (item) VALUES ' . rtrim(str_repeat('(?),', $total), ',');
$statement = $conexao->prepare($sqlQuery);

if ($statement)
{
    for ($i = 0; $i < $total; $i++)
    {
        $statement->bind_param('s', $item[$i]);
    }

    $statement->execute();
    $success = true;
}
else
{
    $erro = $conexao->error;
    $success = false;
}