sql >> Base de Datos >  >> RDS >> Mysql

Cuadro de lista de selección múltiple de estado que no muestra todas las ciudades en otro cuadro de lista (Php, mysql, ajax)

Es porque la consulta mysql es incorrecta. Proporcionas varios números en un igual simple.

Eso debería ser:

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

si $g es una lista de números separados por comas. Si no, debe hacerlo así.

Entonces, si $g es una matriz, debe hacer una implosión () en ella y luego puede usarla en la consulta

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

si es una cadena y digamos que los números están separados en mi espacio, entonces reemplaza el espacio con una coma:

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

Entonces, en su caso, la consulta de MySQL debería ser esta:

$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);

Y el javascript debería ser este:

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();
}