Индекс неопределенности POST из массива Ajax jQuery - PullRequest
0 голосов
/ 29 апреля 2018

Я пытаюсь вставить информацию из массива в мою базу данных. Во-первых, проблема в том, что я получаю неопределенный индекс $ _POST ['Person'], $ _POST ['Color_name'], $ _POST ['Opinion'] от php.

Вторая проблема заключается в том, что я хотел бы использовать dataType: "json"; в моем Ajax jQuery, но мои данные не доходят до php-файла, если я его использую.

То, что я пытался до сих пор, это json преобразовать мои возвращаемые данные в функцию get_data без какого-либо успеха. Я также попытался расшифровать данные в php, но так как он получает неопределенный индекс, я предполагаю, что в jQuery должна быть проделана некоторая работа.

Это массив, который возвращает функция get_data ()

{Person: "James", Color_name: "blue", Opinion: "Looks good"}
{Person: "James", Color_name: "green", Opinion: "Looks ok"}
{Person: "Rebecka", Color_name: "blue", Opinion: "Looks bad"}
{Person: "Rebecka", Color_name: "black", Opinion: "Looks very bad"}

HTML

<div>
  <ul data-person="James">
    <li data-color_opinion="blue">Looks good</li>
    <li data-color_opinion="green">Looks ok</li>
  </ul>
  <ul data-person="Rebecka">
    <li data-color_opinion="blue">Looks bad</li>
    <li data-color_opinion="black">Looks very bad</li>
  </ul>
</div>

JQuery

function get_data() {
  var data = [];
  $.each($('ul'), function(i, el) {
    $.each($(el).find("[data-color_opinion]"), function(j, child) {
      let person = $(el).data('person');
      let color_name = $(child).data('color_opinion');
      let opinion = $(child).text();
      data.push({ Person: person, ColorName: color_name, Opinion: opinion });
    });
  });
  return data;
};
console.log(get_data())

$.ajax({
type: "POST",
url:'colors.php',
data:get_data´(),
success: function(data) {
  console.log(data);
}
});
});

PHP

<?php

$servername = "servername";
$username = "username";
$password = "password";

$person = $_POST['Person'];
$color_name = $_POST['Color_name'];
$opinion = $_POST['Opinion'];


try {
$db = new PDO("mysql:host=$servername;dbname=DB_NAME", $username, $password);
 $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
 $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);


 $sql = "INSERT INTO colors (person, color_name, opinion)
     VALUES ($person, $color_name, $opinion)";

$db->exec($sql);
echo "New records created successfully";
}
catch(PDOException $e)
{
echo $sql . "<br>" . $e->getMessage();
}
$db = null;

 ?>

Ответы [ 2 ]

0 голосов
/ 29 апреля 2018

Помимо другого ответа, этот VALUES ($person, $color_name, $opinion) содержит строковые значения, которые необходимо заключать в кавычки.

VALUES ('$person', '$color_name', '$opinion')

Однако, это открыто для инъекции SQL; используйте подготовленное утверждение.

0 голосов
/ 29 апреля 2018

Нет $_POST['Person'];, потому что все объекты javascript находятся во внешнем массиве, а get_data() возвращает весь массив

Попробуйте что-то вроде:

$.ajax({
  type: "POST",
  url: 'colors.php',
  data: {items : get_data()},
        // ^^ items contains an array
  success: function(data) {
    console.log(data);
  }
});

Тогда в php

$items = $_POST['items'];// is array of sub arrays

foreach($items as $item){
   $person = $item['Person'];
    // get the other values and do a query within each iteration of this loop
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...