2013-12-18 2 views
0

Я заполняю выпадающий список записей MySQL, используя технику в this answer. Это отлично работает - когда я выбираю событие, создается новое раскрывающееся меню, содержащее даты, в которых выполняется событие.Кодирование PHP/JSON

Однако мне также необходимо получить стоимость события из базы данных и назначить его как значение ввода формы. Самый простой способ сделать это - назначить его атрибуту value раскрывающегося списка событий, но это уже используется для создания второго выпадающего списка.

Итак, я полагаю, что я могу использовать другой вызов Ajax в событии выпадающего списка событий, чтобы запросить базу данных снова и получить стоимость, а затем передать ее как переменную, закодированную JSON. Вот мои Ajax звонки:

$('#event_menu').on('change', function() { 
    // get selected value and build data string for AJAX 
    var event_selected = "event_selected="+$(this).val(); 

    // send the selected data to a PHP page to build the populated menu 
    $.ajax({ 
     url : 'populate_menu.php', 
     type: 'POST', 
     data : event_selected, 
     dataType : 'html', 
     success : function(data) { 
     $('#instancemenu').html(data); 
     }, error : function() { 
      alert("Something went wrong!"); 
     } 
    }); 

    $.ajax({ 
     url : 'get_eventprice.php', 
     type: 'POST', 
     date: event_selected, 
     dataType : 'json', 
     success : function(data){ 
      $('#totalcost').val(data); 
     }, error : function(){ 
      alert("Something went wrong with the price setter!") 
     } 
    }); 
}); 

А вот код в get_eventprice.php:

$event_selected = isset($_POST['event_selected']) ? $_POST['event_selected'] : null; 

    $q="SELECT event_cost FROM events WHERE event_id=$event_selected"; 
    $r=mysqli_query($dbc,$q); 

    $row=mysqli_fetch_field($r, MYSQLI_ASSOC); 

    echo json_encode($row['course_cost']); 

Однако это вызывает условие ошибки при вызове Ajax. Я также пробовал mysqli_fetch_array, но не повезло. Что я делаю не так?

+5

Вашего кода уязвим по отношению к инъекции SQL, и будет проблемой в будущем - либо нарочно или случайно. ** Не доверяйте пользовательским переменным. ** Проверьте [bobby-tables.com] (http://bobby-tables.com/) – h2ooooooo

+2

При использовании 'mysqli' вы должны использовать параметризованные запросы и [' bind_param'] (http : //php.net/manual/en/mysqli-stmt.bind-param.php), чтобы добавить данные пользователя в ваш запрос. ** Избегайте **, используя интерполяцию строк, чтобы выполнить это. – tadman

+0

Btw, если course_cost - это просто числовое значение, вы можете пропустить 'json_encode' вокруг него. –

ответ

1

В вашей второй Ajax вы пишете date в смену data

редактировать:

Кроме того, используйте Element Inspector вашего браузера, и посмотреть в:

  • вкладке Net, что происходит во время вызова Ajax. Посмотрите, действительно ли данные отправляются. И что возвращает веб-сервер.
  • вкладку Console, чтобы увидеть, если вы получаете любые JavaScript сообщения/ошибки
+0

Хороший глаз. Это действительно проблема. Но, возможно, ElendilTheTall также нуждается в некоторой проверке на стороне сервера для устранения такого типа ошибок. –

+0

Да, вы ... смотрите в свой собственный код, который вы опубликовали. 'datE: event_selected,' –

+0

@ElendilTheTall: да, вы делаете –

Смежные вопросы