#javascript #php #jquery #sql
#javascript #php #jquery #sql
Вопрос:
Итак, я пытаюсь создать историю для своего сайта, но когда я выполняю запрос select с помощью переменной jquery, это не работает. ВОТ таблица, в которой показаны значения из базы данных, а вот всплывающее окно, которое открывается для отображения подробной информации, но я хочу показать значения из каждой строки, которую я нажимаю
Вот код jquery:
var idocorrencia;
$(document).on("click","#listagem tr td a", function(e){
e.preventDefault();
idocorrencia = $(this).parent().attr("idlista");
$("#listagem caption").text($(this).text());
console.log(idocorrencia);
alert(idocorrencia);
$.post( "historico.php", { idoc: idocorrencia })
$.ajax({
method:"POST",
url:"historico.php",
data:{idoc : "idlista"},
dataType: 'json',
});
});
Вот php:
$id = $_POST['idoc'];
$result = mysqli_query($conn, "SELECT id FROM ocorrencia where id=$id");
$row = mysqli_fetch_assoc($result);
$idoc = isset($_POST['idoc']) ? $_POST['idoc'] : $row['id'];
Комментарии:
1. Что должен делать код? Ваш PHP-код фактически не возвращает никакого ответа, и ваш Ajax ничего не делает с ответом, если он его получит. Также не отображается код PHP для обновления базы данных (просто выбирает) — короче говоря, этот код никогда ничего не будет «делать». И я тоже не знаю, что вы хотите, чтобы он делал.
2. Каким образом это не работает? Какую отладку вы уже выполнили? Выполняется ли запрос ajax? Если да, проверили ли вы вкладку сети вашего браузера, чтобы убедиться, что ожидаемые значения были опубликованы? Вы подтвердили значение
$id
в вашем PHP?3. Вы действительно должны избегать этого значения, прежде чем вводить его в свой запрос. Вы оставляете себя широко открытыми для атак SQL-инъекций.
4. Логика sql-запроса отсутствует в соответствии с вашим php-кодом: если
$_POST['idoc']
задано$idoc
, ему будет присвоен возврат, если$_POST['idoc']
не задано, ваш sql-запрос ничего не вернет… и$idoc
не будет присвоен ничему5. Предупреждение: вы широко открыты для SQL-инъекций и должны действительно использовать параметризованные подготовленные операторы вместо того, чтобы вручную создавать свои запросы. Они предоставляются PDO или MySQLi . Никогда не доверяйте никаким входным данным, особенно тем, которые поступают со стороны клиента. Даже если ваши запросы выполняются только доверенными пользователями, вы все равно рискуете повредить свои данные .
Ответ №1:
Попробуйте сделать это так:
if (isset($_POST['idoc'])) {
$id = $_POST['idoc'];
$result = mysqli_query($conn, "SELECT id FROM ocorrencia where id='" . mysqli_real_escape_string($conn, $id) . "'");
if($result!==false amp;amp; mysqli_num_rows($result)>0){
$row = mysqli_fetch_assoc($result);
$idoc = $row['id'];
}
}
Обновить
и вот тот же сценарий с подготовленными операторами:
if (isset($_POST['idoc'])) {
$statement = mysqli_prepare($conn, "SELECT id FROM ocorrencia where id=?");
mysqli_stmt_bind_param($statement, 's', $id);
$id = $_POST['idoc'];
mysqli_stmt_execute($statement);
$result = mysqli_stmt_get_result($statement);
if ($result !== false amp;amp; mysqli_num_rows($result) > 0) {
$row = mysqli_fetch_assoc($result);
$idoc = $row['id'];
}
}
Здесь я использовал процедурный стиль, поскольку исходный сценарий был таким. Но его можно легко переписать в объектно-ориентированном стиле.
Комментарии:
1. Не могли бы вы, пожалуйста, переписать свой код с помощью подготовленных операторов? Давайте не будем учить других использовать
mysqli_real_escape_string