Множественный список выбора состояния, не отображающий все города в другом списке (Php, mysql, ajax)

При выборе раскрывающегося списка Страна отображается список состояний с несколькими вариантами выбора без обновления страницы. Но выбор 2 или 3 государств, не отображающих все города в другом lisbox. Города отображаются только для одного государства. Помогите

loadData.php

<?php $q = $_GET['q']; $con = mysqli_connect('localhost','root','','test'); if (!$con) { die('Could not connect: ' . mysqli_error($con)); } mysqli_select_db($con,"test"); $sql="SELECT * FROM state WHERE country_id = '".$q."'"; $result = mysqli_query($con,$sql); echo "<select name='try[]' onchange='showSecondUser(this.value)' multiple>"; while($row = mysqli_fetch_array($result)){ echo "<option value='".$row['id']."'>".$row['state_name']."</option>"; } echo" </select>"; $g = $_GET['g']; $sql="SELECT * FROM city WHERE state_id = '".$g."'"; $result = mysqli_query($con,$sql); echo "<select name='try' multiple>"; while($row = mysqli_fetch_array($result)){ echo "<option value=''>".$row['city_name']."</option>"; } echo" </select>"; mysqli_close($con); ?> 

index.php

 <html> <head> <script> function showUser(str) { if (str=="") { document.getElementById("txtHint").innerHTML=""; return; } 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 (xmlhttp.readyState==4 && xmlhttp.status==200) { document.getElementById("txtHint").innerHTML=xmlhttp.responseText; } } xmlhttp.open("GET","loadData.php?q="+str,true); xmlhttp.send(); } function showSecondUser(str) { if (str=="") { document.getElementById("txtHint2").innerHTML=""; return; } 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 (xmlhttp.readyState==4 && xmlhttp.status==200) { document.getElementById("txtHint2").innerHTML=xmlhttp.responseText; } } xmlhttp.open("GET","loadData.php?g="+str,true); xmlhttp.send(); } </script> </head> <body> <form> <select name="users" onchange="showUser(this.value)"> <option value="">Select Country</option> <option value="1">Australia</option> <option value="2">Japan</option> <option value="3">Russia</option> <option value="4">Germany</option> </select> </form> <br> <div id="txtHint"></div> <div id="txtHint2"></div> </body> </html> 

    Это потому, что запрос mysql неверен. Вы предоставляете несколько чисел простым равным.

    Которые должны быть:

     $g = $_GET['g']; $sql="SELECT * FROM city WHERE state_id IN (".$g.")"; $result = mysqli_query($con,$sql); 

    если $ g – запятый список чисел. Если нет, вам нужно это сделать.

    Поэтому, если $ g – это массив, вам нужно сделать imode () на нем, и вы можете использовать его в запросе

     $g = $_GET['g']; $g = implode(',', $g); $sql="SELECT * FROM city WHERE state_id IN (".$g.")"; $result = mysqli_query($con,$sql); 

    если это строка и позволяет сказать, что числа разделены на мое пространство, чем вы заменяете запятую запятой:

     $g = $_GET['g']; $g = str_replace(' ', ',', $g); $sql="SELECT * FROM city WHERE state_id IN (".$g.")"; $result = mysqli_query($con,$sql); 

    Поэтому в вашем случае запрос MySQL должен быть следующим:

     $sql="SELECT * FROM state WHERE country_id = '".$q."'"; $result = mysqli_query($con,$sql); echo "<select name='try[]' onchange='showSecondUser(this)' multiple>"; // there is a change here ^ while($row = mysqli_fetch_array($result)){ echo "<option value='".$row['id']."'>".$row['state_name']."</option>"; } echo" </select>"; /*######################################################*/ $g = $_GET['g']; $sql="SELECT * FROM city WHERE state_id IN (".$g.")"; $result = mysqli_query($con,$sql); 

    И javascript должен быть следующим:

     function showSecondUser(str){ var xmlhttp; if (window.XMLHttpRequest) { xmlhttp = new XMLHttpRequest(); } else { xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.onreadystatechange = function () { if (xmlhttp.readyState === 4 && xmlhttp.status === 200) { document.getElementById("txtHint2").innerHTML = xmlhttp.responseText; } } var values = new Array(); for (var i=0; i < str.options.length; i++) { cur = sel.options[i]; if (cur.selected) { values.push(cur.value); } } if (values.length) { values = values.join(","); } else { values = null; } xmlhttp.open("GET","loadData.php?g="+values,true); xmlhttp.send(); }