Обработка динамического выпадающего списка с помощью php и javascript

#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, но оно есть в моем коде.