2009-04-26 8 views
0

Depuis un certain temps je me bats pour résoudre ce problème mais je n'arrive à aucune conclusion alors pensé à demander de l'aide ici. Le problème est que je reçois une liste déroulante vide à la place je devrais obtenir la liste des villes peuplées de la base de données. La connexion à la base de données est correcte mais je n'ai rien dans ma liste déroulante.dropdown avec php et ajax

C'est ce que je fais:

<?php 

require 'includes/connect.php'; - database connection 
$country=$_REQUEST['country']; - get from form (index.php) 
$q = "SELECT city FROM city where countryid=".$country;  
$result = $mysqli->query($q) or die(mysqli_error($mysqli));  
if ($result) { 
?> 
    <select name="city"> 
    <option>Select City</option> 
    $id = 0; 
    <?php while ($row = $result->fetch_object()) { 
     $src = $row->city; 
     $id = $id + 1;  
    ?>  
    <option value= <?php $id ?> > <?php $src ?></option> 
<?php } ?> 
</select> 
<?php } ?> 

script ajax est la suivante:

<script> 
    function getXMLHTTP() { //function to return the xml http object 
      var xmlhttp=false; 
      try{mlhttp=new XMLHttpRequest();} 
      catch(e) {  
    try{ xmlhttp= new ActiveXObject("Microsoft.XMLHTTP"); } 
    catch(e){ try{ 
        xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); 
        } 
        catch(e1){ 
         xmlhttp=false; 
        } 
       } 
      } 

      return xmlhttp; 
     } 


     function getCity(strURL) {   
      var req = getXMLHTTP();   
      if (req) {    
       req.onreadystatechange = function() { 
        if (req.readyState == 4) {      
         if (req.status == 200) {       
          document.getElementById('citydiv').innerHTML=req.responseText; 

         } else { 
          alert("There was a problem while using XMLHTTP:\n" + req.statusText); 
         } 
        }    
       }   
       req.open("GET", strURL, true); 

       req.send(null); 

      } 

     } 
    </script> 

Ceci est mon code de formulaire:

<form method="post" action="" name="form1"> 
<table width="60%" border="0" cellspacing="0" cellpadding="0"> 
    <tr> 
    <td width="150">Country</td> 
    <td width="150"><select name="country" onChange="getCity('findcity.php?country='+this.value)"> 
    <option value="">Select Country</option> 
    <option value="1">New Zealand</option> 
    <option value="2">Canada</option> 
     </select></td> 
    </tr> 
    <tr style=""> 
    <td>City</td> 
    <td ><div id="citydiv"><select name="city"> 
    <option>Select City</option> 
     </select></div></td> 
    </tr> 

</table> 
</form> 

Répondre

1

Je pense que le problème est l'endroit où vous générez les balises <option>. Essayez d'utiliser ce bloc de code entre les balises <select>.

<option>Select City</option> 
    <?php 
     $id = 0; 
     while ($row = $result->fetch_object()) { 
     $src = $row->city; 
     $id = $id + 1;  
    ?>   
    <option value="<?php echo htmlspecialchars($id,ENT_QUOTES) ?>"><?php echo htmlspecialchars($src) ?></option> 
<?php } ?> 

Edit: Pour clarifier, vous n'avez pas echo déclarations avant les variables $id et $src. J'ai ajouté htmlspecialchars() comme habitude de produire correctement html échappé.

0

Quelques choses à essayer:

  1. Si vous demandez findcity.php manuellement dans votre navigateur avec une ville que vous connaissez existez dans la base de données, vais-je retourner le code HTML correct? Essayez avec FireBug ou un autre débogueur javascript pour définir un point d'arrêt dans la fonction onreadystatechange et voir si les valeurs renvoyées sont conformes aux attentes. Définissez le point d'arrêt sur la première ligne de la fonction.

0
<input name="acname" type="text" id="acname" value="" maxlength="9"> 
Account Name </p> 

<select name="src"> 
    <option value="number"> :::: Select ::::</option> 
    <option value="did">DID</option> 
    <option value="tfn">TFN</option> 
</select> 
<span id="errmsg"></span> DID/TFN </p> 

<select name="did" onchange='OnChange(this.form1.did);' > 
    <option value=""> :::: Select ::::</option> 
    <? $qry1 = mysql_query("SELECT * FROM ".NUMBERS." where Flag='1'") or die(mysql_error()) ; 
    while($res1 = mysql_fetch_array($qry1)) { ?> 
    <option value="<?=$res1['Numbers'] ?>"><?=$res1["Numbers"]?></option> 
     <? } ?> 
</select> 

SOURCE