Мне нужна небольшая помощь в обновлении таблицы mysql из данных в массиве jquery с использованием ajax. Я пробовал искать похожие проблемы, но ничего не нашел, или, может быть, я не знаю правильных терминов для поиска... Я все еще новичок в веб-разработке/кодировании.

Я постараюсь объяснить, что я пытаюсь сделать так ясно, как я могу. У меня есть страница с местами, которые пользователи выбирают, щелкая по ним, при нажатии идентификатор места добавляется в собственный тег span в своего рода области корзины покупок в левой части страницы. Это прекрасно работает.

При оформлении заказа мой файл js может получить эти идентификаторы мест в массиве, но отсюда я не уверен, как правильно отправить этот массив в файл php, а затем для файла php прочитать идентификаторы мест из массива и обновите соответствующие строки мест, чтобы изменить доступность с 1 на 0 (при этом используется ajax).

Вот мой код:

Checkout.js

$(document).ready(function(){

$('#checkout').click(function(){
    var status = sessionStorage.getItem("username");

    if(sessionStorage.getItem("username")){
        var tickets = [];
        $("#myTickets").find("span").each(function(){ tickets.push(this.id); });

        var type = "POST",
        url = "scripts/sendSeatDetails.php"; 
        console.log(tickets);

        $.ajax ({
            url:url,
            type:type,
            data:tickets,
            success: function(response){
                if(response == 5){
                    alert("Seat update query failed");
                } else {
                    alert("success");
                }
            }

        });





    } else {
        alert("Before purchasing please log in. If you do not have an account please register.");
    }

});

});

В журнале консоли это показывает: ["A2", "A3", "A4"] (если я выбрал места с идентификатором A2, A3, A4 и т. д.).

SendSeatDetails.php

<?php
include("dbconnect.php");
$myseats=$_POST['tickets'];
$query="update seats set status='0' where seatnum=";
for($i=0;$i<count($myseats);$i++){
$query.="'$myseats[$i]'";
if($i<count($myseats)-1){
$query.=" || seatnum=";
}
}  
$link = mysql_query($query);
if (!$link) {
echo 5;
}
?>

Это возвращает предупреждение об успешном выполнении, но это неверно, поскольку таблицы не обновляются. Может ли кто-нибудь помочь мне с этим или указать мне правильное направление?

Я ценю вашу помощь и, надеюсь, смогу внести свой вклад в этот сайт, когда я буду на более высоком уровне навыков в будущем.

Огромное спасибо.

0
skawwwt 24 Ноя 2014 в 17:52
Каков результат $link, когда вы сбрасываете его?
 – 
Matheno
24 Ноя 2014 в 17:54
1
Пожалуйста, не используйте функции mysql_* , Они больше не поддерживаются и официально устарели. Узнайте о подготовленных операторах взамен и используйте PDO или MySQLi. Вы также захотите Предотвратить SQL-инъекцию!
 – 
Jay Blanchard
24 Ноя 2014 в 18:01
1
Добавьте отчеты об ошибках в начало файлов сразу после открытия <?php tag error_reporting(E_ALL); ini_set('display_errors', 1);. Кроме того, добавьте отчеты об ошибках для ваших функций MySQL.
 – 
Jay Blanchard
24 Ноя 2014 в 18:02
Когда я выгружаю $link (эхо $link, затем ответ console.log в файле js), я получаю сообщение об ошибке «уведомление: неопределенный индекс». @JayBlanchard - да, я планирую внести поправки в PDO, как только мне удастся заставить это работать. Спасибо.
 – 
skawwwt
25 Ноя 2014 в 03:51
Как только вы исправите неопределенный индекс, код должен работать.
 – 
Jay Blanchard
25 Ноя 2014 в 16:01

2 ответа

Чтобы отправить массив в jQuery, вы должны сериализовать его, а затем проанализировать в файле PHP:

data: tickets.serialize(),
...
parse_str($_POST['data'], $data);

И тогда вы относитесь к нему как к обычному массиву.

0
Useless Intern 24 Ноя 2014 в 18:14

Запускайте запросы на обновление один за другим.

$myseats=$_POST['tickets'];
   $flag=0;// Total successful updates
    $myseats=explode(',',$myseats);
  for($i=0;$i<count($myseats);$i++){
     $query="update seats set status=0 where seatnum='".$myseats[$i]."'";
     $link = mysql_query($query);
      if (!$link) {
       $flag=$flag+1;
      }
    }

echo $flag;die;

Проверьте ответ. это будет количество обновленных строк.

0
Confused 24 Ноя 2014 в 18:19