Я заполняю выпадающий список записей 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
, но не повезло. Что я делаю не так?
Вашего кода уязвим по отношению к инъекции SQL, и будет проблемой в будущем - либо нарочно или случайно. ** Не доверяйте пользовательским переменным. ** Проверьте [bobby-tables.com] (http://bobby-tables.com/) – h2ooooooo
При использовании 'mysqli' вы должны использовать параметризованные запросы и [' bind_param'] (http : //php.net/manual/en/mysqli-stmt.bind-param.php), чтобы добавить данные пользователя в ваш запрос. ** Избегайте **, используя интерполяцию строк, чтобы выполнить это. – tadman
Btw, если course_cost - это просто числовое значение, вы можете пропустить 'json_encode' вокруг него. –