#javascript #php
#javascript #php
Вопрос:
Я пытаюсь создать динамический выпадающий список, который обращается к MySQL после того, как был сделан выбор. Второе поле зависит от выбора первого поля. Я не слишком знаком с javascript, но я наткнулся на некоторый код, который, казалось, был тем, что я искал, но не выполняется, и я не знаю почему. Первая часть кода — это поля опций с помощью javascript, а вторая часть — dynamicdd.php . Любая помощь была бы отличной. Спасибо.
<tr>
<td>Country: </td>
<td>
<select name="Countrybox" onchange="getlocation(this.value)">
<option value="none"> Please Select </option>
<?php
$qry2 = "Select Country from Locations";
$populate = mysqli_query($conn, $qry2);
while ($run = mysqli_fetch_assoc($populate)){
echo "<option value='".$run['Country']."'>".$run['Country']."</option>";
}
?>
</select>
</td>
</tr>
<tr>
<td>Location:</td>
<td>
<select name="Locationbox" id="locationbycountry">
<option> Select Above First </option>
</select>
</td>
</tr>
<script type="text/javascript">
function getlocation(locationarea) {
var xhttp = new XMLHttpRequest();
var url = "dynamicdd.php";
var data = new FormData();
data.append('SearchValue', locationarea);
xhttp.open('POST', url, true);
xhttp.send(data);
xhttp.onreadystatechange = function() {
if (xhttp.readyState == 4 amp;amp; xhttp.status == 200) {
document.getElementById("locationbycountry").innerHTML = xhttp.responseText;
}
}
}
</script>
dynamicdd.php
<?php
if($_POST['SearchValue']){
$host = "localhost";
$username = "root";
$password = "";
$db = "Work";
$conn = mysqli_connect($host, $username ,$password, $db);
$choice = $_POST['SearchValue'];
$sql = "SELECT * FROM locations WHERE Country = '$choice'";
$result = mysqli_query($conn, $sql) or die(mysqli_error($conn));
while ($row = mysqli_fetch_assoc($result)){
echo "<option value='".$row['Location']."'>".$row['Location']."</option>";
}
}
?>
Комментарии:
1. Готовы ли вы рассмотреть замену jQuery для полей <select>?
2. Я готов рассмотреть любую помощь
3. Вы пытались отлаживать? Включен ли у вас javascript в браузере? Поместите несколько предупреждений в функцию getlocation, чтобы увидеть, работает ли она. Поместите некоторый loggint в dynamicdd.php чтобы увидеть, работает ли это.
4. Я недостаточно знаком с javascript, чтобы знать, как проверять наличие ошибок
5. jQuery представляет множество других проблем, поэтому, если вы не знакомы с javascript, это может быть грубым способом. Но Select2 — это ОТЛИЧНЫЙ вариант замены для поля выбора, и вы можете многое сделать с динамическими источниками данных, такими как то, что вы хотите сделать выше. Проверьте это: select2.org/data-sources/formats
Ответ №1:
попробуйте изменить часть javascript с помощью этого (это приведет к сбою messagebox, и вы увидите, что сценарий завершается ошибкой до конца):
<script type="text/javascript">
function getlocation(locationarea) {
var xhttp = new XMLHttpRequest();
var url = "dynamicdd.php";
var data = new FormData();
data.append('SearchValue', locationarea);
xhttp.open('POST', url, true);
xhttp.send(data);
alert("*step 1*");
xhttp.onreadystatechange = function() {
alert("*step 2*");
if (xhttp.readyState == 4 amp;amp; xhttp.status == 200) {
alert("*step 3*");
alert(xhttp.responseText);
document.getElementById("locationbycountry").innerHTML = xhttp.responseText;
}
}
alert("*step 4*");
}
</script>
<?php
if($_POST['SearchValue']){
$host = "localhost";
$username = "root";
$password = "";
$db = "";
$conn = mysqli_connect($host, $username ,$password, $db);
$choice = $_POST['SearchValue'];
$sql = "SELECT * FROM Locations WHERE country = '$choice'";
echo $sql;
}
else {
echo "value is not posted";
}
?>
Комментарии:
1. Он выдал мне уведомление о том, что «localhost сообщает шаг 1» до конца 10, а затем вернулся к 8 и 9.
2. попробуйте скопировать еще раз. Оповещение о выводе результата из php. С помощью этого предупреждения мы увидим, есть ли какой-либо результат. Еще один вопрос. После того, как вы получили предупреждение о шаге 9, был ли у вас второй список пустым или он все еще содержит текст «Сначала выберите выше»?
3. я согласен, чтобы показывать 8 и 9 после 10. Попробуйте теперь изменить php с помощью скрипта, который я вставляю. При этом будет отображаться только select в предупреждении. После того, как вы получили этот выбор, мы хорошо понимаем, правильно ли это. Кстати. второй список пуст, потому что php не вернул данные для отображения. Возможно, выберите return 0 запись.
4. если вы выполните этот выбор в базе данных, получили ли вы какую-либо запись?
5. ОК. Я рад, что вы решили свою проблему, можете ли вы изменить код в своем вопросе или в моем ответе so, чтобы я был правильным и пометил как решенный?
Ответ №2:
Ваш HTML сформирован достаточно хорошо, но у вас есть ошибки в вашем PHP-скрипте. Попробуйте следующий код, который исправляет некоторые простые опечатки:
<?php
if($_POST['SearchValue']){
$host = "localhost";
$username = "root";
$password = "";
$db = "";
$conn = mysqli_connect($host, $username ,$password, $db);
$choice = $_POST['SearchValue'];
$sql = "SELECT * FROM Locations WHERE country = '$choice'";
$result = mysqli_query($conn, $sql) or die('error');
while ($row = mysqli_fetch_assoc($result)){
echo "<option value='".$row['location']."'> ".$row['location']." </option>";
}
}
?>
Кроме того, пожалуйста, не забудьте подробнее изучить Select2, который является действительно хорошо поддерживаемой заменой стандартным полям выбора. https://select2.org /
Комментарии:
1. Я подробнее рассмотрю select2 к сожалению, пересмотренный php-код не работал. Я не получаю ошибку msyql, поэтому я предполагаю, что это может быть код javascript. Я просто не знаю, где что-то может быть не так
2. Приведенный выше PHP-код работает и является полезным кодом, поэтому, если он не работает для вас, я бы проверил ваши параметры $conn, чтобы убедиться, что вы используете правильный хост, имя пользователя, пароль и базу данных для вашей среды разработки. Это то, где все, возможно, идет боком?
3. Кроме того, ваше имя поля выше в теге <option> — «местоположение», но в других местах вы пишете имена своих полей с заглавной буквы (например, «Страна» и «Местоположения»). Убедитесь, что при вызове имени базы данных из PHP ваш синтаксис точно соответствует данным. Запросы MySQL не требуют такой же точности, но в противном случае PHP не будет соответствовать ей.
4. Параметры должны быть хорошими. Это те же самые, которые я использовал на всех других моих страницах. Я не указал здесь свое dbname, но оно есть в моем коде.