JQuery — AJAX скрипт не разбирает переменную в php правильно

ОБНОВЛЕНИЕ 19/01/2017 — ПРОБЛЕМА РЕШЕНА — Удалено ‘intval’ по запросу get в файле get.php, и значение q теперь захватывает правильные данные.

То, что я пытаюсь достичь, можно суммировать в 2 балла:

1.) Раскрывающийся список, который динамически заполняется в соответствии с таблицей MySql.

2.) В зависимости от того, что выбрано в раскрывающемся списке, в текстовом поле ниже будет отображаться соответствующий идентификатор с помощью SQL-запроса.

Я пытался следовать W3Schools руководство и изменив его соответствующим образом, чтобы соответствовать моим потребностям, но я застреваю.

Вот что у меня сейчас есть:

PHP —

<?php
mysql_connect('localhost', 'root', '');
mysql_select_db('core_log');

$sql = "SELECT local_authority FROM ons_code_tbl";
$result = mysql_query($sql);

echo "<tr>";
echo "<td> Local Authority: </td>";
echo "<td>";
echo "<select name='local_authority'onchange='showLocal_authority(this.value)'>";
echo '<option value=""></option>';
while ($row = mysql_fetch_array($result)) {
echo "<option value='" . $row['local_authority'] . "'>" . $row['local_authority'] . "</option>";
}
echo "</select>";
echo "</td>";
echo "</tr>";
?>

Сценарий —

<script>
function showLocal_authority(str) {
if (str == "") {
document.getElementById("txtHint").innerHTML = "";
return;
} else {
if (window.XMLHttpRequest) {
// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp = new XMLHttpRequest();
} else {
// code for IE6, IE5
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
document.getElementById("txtHint").innerHTML = this.responseText;
}
};
xmlhttp.open("GET","get.php?q="+str,true);
xmlhttp.send();
}
}
</script>

get.php —

<?php
$q = intval($_GET['q']);

$con = mysqli_connect('localhost','root','','core_log');
if (!$con) {
die('Could not connect: ' . mysqli_error($con));
}

mysqli_select_db($con,"ons_code_tbl");
$sql="SELECT ons_code FROM ons_code_tbl WHERE local_authority = '".$q."'";
$result = mysqli_query($con,$sql);
$row = mysqli_fetch_array($result);
$name = $row['ons_code'];

echo "<td>" . $q . "</td>";

mysqli_close($con);
?>

Я сделал тест и просто повторил значение q, чтобы увидеть, что он выводит, это должно быть значение того, что они выбирают в раскрывающемся списке, а вместо этого отображается 0?

На снимке экрана ниже должно отображаться «Amber Valley» с правильным кодом ONS, извлеченным из таблицы MySQL.

mysqlajax

Если кто-нибудь может сказать мне, почему значение q не хранит, например, «Янтарную долину», это было бы здорово, спасибо!

1

Решение

Заменить эту строку:

$q = intval($_GET['q']);

за

$q = $_GET['q'];

Затем сделайте запрос с подготовленным оператором, чтобы избежать SQL-инъекций:

mysqli_select_db($con,"ons_code_tbl");
$sql="SELECT ons_code FROM ons_code_tbl WHERE local_authority = ?";
$stmt = mysqli_prepare($con, $sql);
mysqli_stmt_bind_param($stmt, "s", $q);
mysqli_stmt_execute($stmt);
mysqli_stmt_bind_result($stmt, $ons_code);
mysqli_stmt_fetch($stmt);

Просто замени echo "<td>" . $q . "</td>"; за echo "<td>" . $ons_code . "</td>";

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector