У меня есть веб-программа, цель которой — построить точки данных для определенной печи, которую выбрал пользователь. Моя проблема в том, что когда пользователь хочет выбрать новую печь, как я могу обновить все отдельные страницы JSON, куда данные извлекаются из новой таблицы, которую они выбрали?
Вот мой код создателя выпадающего списка.
<p class="navleft">
Kiln Number:<br>
<select name="kilns" id="kilns">
<?php
$sql = "SHOW TABLES FROM history";
$result = mysqli_query($con,$sql);
while($table = mysqli_fetch_array($result)) { // go through each row that was returned in $result
echo ("<option value='". $table[0] . "'>" . $table[0] . "</option>");
}
?>
</select>
</p>
Если я правильно понимаю, что вы хотите, то вам нужен Ajax.
Вы должны заполнить выбор так, как вы делаете, и при каждом выборе делать Ajax-вызов к .php, где вы будете обрабатывать то, что выбрал пользователь. В вашем случае этот файл .php будет принимать имя таблицы, выбранное пользователем, выполнить запрос и вернуть некоторые результаты обратно в html. Для демонстрации я объясню на примере.
Допустим, в вашем .html у вас есть такой выбор:
Select Value:
<select name="kilns" id="kilns">
<option value="1">Option 1</option>
<option value="2">Option 2</option>
<option value="3">Option 3</option>
</select>
То, что определено в свойстве value опции, это то, что вы собираетесь передать в .php файл, который я упоминал. Для этого вы используете Ajax, поэтому внутри некоторых script
теги у вас есть:
$('#kilns').on('change', function(e) {
var data = {'kilns': this.value};
$.ajax({
type: 'POST',
url: 'submit.php',
data: data,
dataType: 'json'
}).done(function(msg) {
alert(msg);
});
});
Это означает, что каждый раз, когда пользователь выбирает что-то из select
, тогда эта функция вызывается, где значение выбора (var data = {'kilns': this.value};
) отправляется в файл с именем submit.php
, с помощью POST
, submit.php
может выглядеть так:
if ( $_SERVER['REQUEST_METHOD'] == 'POST' ) {
$kilns_error = 0;
if (isset($_POST['kilns']) && !empty($_POST['kilns'])) {
$kilns = $_POST['kilns'];
} else {
$kilns = null;
$kilns_error = 1;
}
if ($kilns_error != 1) {
echo json_encode($kilns);
}
}
Что происходит здесь, после того, как мы проверим, у нас действительно есть POST REQUEST
, мы проверяем, является ли значение неопределенным или пустым. После этой простой проверки мы переходим к echo json_encode($kilns);
где мы возвращаем значение, которое мы первоначально отправили в сценарий .php, которое фактически является значением, выбранным пользователем.
В вашем случае, то, что вам нужно сделать, чтобы сделать некоторые вещи в скрипте .php, а не просто вернуть значение, с которым вы его вызвали. Кроме того, не забудьте передать значение, которое вы берете, в белый список, чтобы убедиться, что пользователь выбирает фактическую таблицу и не пытается создать проблемы для вашей базы данных, потому что было бы очень просто просто изменить значение того, что он собирается выберите, прежде чем фактически выбрать его. Взгляните на подготовленные заявления mysqli и PDO.
В этом сценарии вы должны строго следить за тем, чтобы избежать внедрения SQL. Используйте подход белого списка, как упомянуто Константиносом Витиниотисом, и проверьте это Как я могу предотвратить внедрение SQL в PHP?