Я пытаюсь отправить весь диапазон (сетка) записей из хранилища на сервер в одном запросе ajax и сохранить все записи в другой таблице.
Однако, кажется, не хватает некоторых деталей.
На стороне клиента console.log (записи) отображает все объекты для отправки.
На стороне клиента echo ‘console.log («PHP:’. $ data. ‘»)’ exit; возвращается console.log («PHP:»);
EXTJS 5
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); // OKExt.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')
}
});
PHP
$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();
Редакция:
Я изменил в запросе ajax jsonData: records
за
params:{records:Ext.encode(records)}
С var_dump($_POST);
на PHP-код я получаю следующий ответ на DevTools
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"}
...
Однако я все еще не могу вставить эти данные в таблицу и создать новый список. Проблема сейчас в коде PHP.
PHP решение:
$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 (?)";
//within for
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();
Является $item
инициализируется до этого цикла foreach? Похоже, вы намеревались 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;
}
Других решений пока нет …