2014-10-10 47 views
0

選擇國家下拉菜單顯示狀態列表框帶有多個選項而不刷新頁面。但選擇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> 

回答

1

這是因爲MySQL查詢是錯誤的。你在簡單的平等中提供多個數字。

這應該是:

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

如果$ g是一個逗號separeted數字列表。 如果沒有,你必須這樣做。

所以,如果$ g是你必須做的破滅()就可以了,比你可以用它在查詢

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

如何選擇查詢申請$ G值,如果$ G有三個值 – 2014-10-10 20:21:59

+1

是'$ g'數組或字符串?如果字符串是如何分開的數字? – 2014-10-10 20:26:16

+0

$ g是值,我從index.php頁面從這一行獲得。 'xmlhttp.open(「GET」,「loadData.php?g =」+ str,true);'如果我在$ g中獲得單值,如何獲取多個值? – 2014-10-11 01:52:06

相關問題