résultat erroné

Eléphanteau du PHP | 16 Messages

23 janv. 2008, 14:50

Bonjour, voila mon problème, j'essaie de récupérer les villes a partir des codes postaux(base sql) cela fonctionne mais il ne m'affiche qu'un résultat. Par exemple pour un code postal il peut y avoir plusieurs résultats mais avec mon code il n'y a qu'un résultat qui s'affiche. Merci pour votre aide.

Code : Tout sélectionner

// connexion a la bdd function connect() { global $host,$login,$pass,$base,$mysql_link; $mysql_link = mysql_connect($host,$login,$pass); mysql_select_db($base, $mysql_link); } connect(); $query = "select * from $table where cp='".$_POST['codepostal']."'"; $resultat = mysql_query($query, $mysql_link); $res= mysql_num_rows($resultat); while ($nbr = mysql_fetch_array($resultat)){ $id = $nbr['id']; $ville = $nbr['ville']; $cp = $nbr['cp']; $pays = $nbr['pays']; } ?> <table width="100%" border="0" cellpadding="3" cellspacing="1"> <tr> <td height="25" colspan="3" valign="middle">R&eacute;sultat de votre recherche pour le code postal: <? if ($res==0){echo "<font color=\"red\">Aucun résultat trouvé pour le code ".$_POST['codepostal']." !!!</font>";} ?></td> </tr> <tr> <td id="entete" width="78" height="20" valign="middle">Code postal</td> <td id="entete" width="328" valign="middle">Ville</td> <td id="entete" width="194" valign="middle">Pays</td> </tr> <tr> <td height="20" valign="top"><?=$cp?></td> <td valign="top"><?=$ville?></td> <td valign="top"><?=$pays?></td> </tr> </table> <? } ?> </td> </tr> </table>

d0m
Mammouth du PHP | 1141 Messages

23 janv. 2008, 14:58

Le problème est simple, tu ne stockes et n'affiches que le dernier résultat de ta requête au lieu de tous les prendre.

Dans un premier temps, il faut stocker les résultats dans plusieurs variables. Au lieu d'utiliser une seule variable $ville, $id, $cp, $pays tu peux utilise un tableau :
$villes =
array(id_ville_1 => array('id'=>..., 'nom'=>..., 'cp'=>...., 'pays'=>....),
       id_ville_2 => array('id'=>..., 'nom'=>..., 'cp'=>...., 'pays'=>....),
       .... )
Ensuite pour l'affichage, tu boucle sur le tableau $villes en affichant les informations de chacune.
<?php foreach($villes as $id => $infos){?>
<tr>
        <td height="20" valign="top"><?php echo $infos['cp'];?></td>
        <td valign="top"><?php echo $infos['nom'];?></td>
        <td valign="top"><?php echo $infos['pays'];?></td>
</tr> 
<?php } ?>

Invité
Invité n'ayant pas de compte PHPfrance

23 janv. 2008, 15:36

tout d'abord merci pour la réponse,
bon si j'ai bien compris je fait ceçi:
<?php
// connexion a la bdd
    function connect() {
	    global $host,$login,$pass,$base,$mysql_link;
        $mysql_link = mysql_connect($host,$login,$pass);
        mysql_select_db($base, $mysql_link);
    }

    connect();
    $query = "select * from $table where cp='".$_POST['codepostal']."'";
    $resultat = mysql_query($query, $mysql_link);
	$res= mysql_num_rows($resultat);
	
    while ($nbr = mysql_fetch_array($resultat)){
    	$villes = 
array(id_ville_1 => array('id'=>..., 'nom'=>..., 'cp'=>...., 'pays'=>....), 
       id_ville_2 => array('id'=>..., 'nom'=>..., 'cp'=>...., 'pays'=>....), 
       .... ) 
;
    }
?>
    <table width="100%" border="0" cellpadding="3" cellspacing="1">
     
      <tr>
        <td height="25" colspan="3" valign="middle">R&eacute;sultat de votre recherche pour le code postal: 
		<? if ($res==0){echo "<font color=\"red\">Aucun résultat trouvé pour le code ".$_POST['codepostal']." !!!</font>";} ?></td>
  </tr>
      <tr>
        <td id="entete" width="78" height="20" valign="middle">Code postal</td>
      <td id="entete" width="328" valign="middle">Ville</td>
      <td id="entete" width="194" valign="middle">Pays</td>
      </tr>
      <tr>
        <td height="20" valign="top"><?=$cp?></td>
        <td valign="top"><?php foreach($villes as $id => $infos){?> 
<tr> 
        <td height="20" valign="top"><?php echo $infos['cp'];?></td> 
        <td valign="top"><?php echo $infos['nom'];?></td> 
        <td valign="top"><?php echo $infos['pays'];?></td> 
</tr>  
<?php } ?> 
</td>
        <td valign="top"><?=$pays?></td>
      </tr>
    </table>
    <? } ?>    </td>
  </tr>
</table>
</center>

d0m
Mammouth du PHP | 1141 Messages

23 janv. 2008, 15:43

non je t'ai pas donné le script à copier-coller.
Il faut l'intégrer dans tes boucles et ton code aux bons endroits.

Premièrement il faut déclarer le tableau des villes :
$villes = array();
Ensuite, dans ta boucle :
while ($nbr = mysql_fetch_array($resultat)){
}
Il faut ajouter au tableau $villes chaque ville que tu vas former sous la forme d'un tableau.
while ($nbr = mysql_fetch_array($resultat)){
  //création d'un nouvelle ville
  $villes[$nbr['id']] = array();
  //ondoit ensuite renseigner les champs de cette ville
  $villes[$nbr['id']]['nom'] = $nbr['nom'];
  ....
}
Après pour l'affichage, il faut boucler sur ce tableau tout simplement