Affichage par l'initiale

Eléphant du PHP | 440 Messages

08 avr. 2009, 17:29

en modifiant ainsi :
<?php  
    $table = "subscribers";  
    $sql = "SELECT * FROM " . $table." where UPPER(LEFT(NOM,1)) IN ('A') ORDER BY NOM" ;
    $res = mysql_query($sql);  
    $i = 0;  
	echo "      <table> 
        <tr width=\"70%\" valign=\"top\"> 
          <td width=\"25%\" bgcolor=\"#FF9900\"><i><font face=\"Verdana, Arial, Helvetica, sans-serif\" size=\"1\" color=\"#666666\"></font></i></td> 
          <td width=\"28%\" bgcolor=\"#FF9900\" valign=\"top\"> 
            <div align=\"center\"><b><font face=\"Verdana, Arial, Helvetica, sans-serif\" size=\"2\" color=\"#666666\">Ville </font></b></div> 
          </td> 
         <td width=\"27%\" bgcolor=\"#FF9900\"> 
            <div align=\"center\"><b><font face=\"Verdana, Arial, Helvetica, sans-serif\" size=\"2\" color=\"#666666\">Secteur d'activité</font></b></div>
          </td>
        </tr> 
        <tr width=\"70%\" valign=\"top\">\n"; 

    while ($i < $nb) 
    {  
        echo '<td valign="top"><a href="http://'.mysql_result($res, $i, "SITE").'" target="_blank"<b><font face="Verdana, Arial, Helvetica, sans-serif" size="1" color="#666666" align="center" >'.mysql_result($res, $i, "NOM").' '.mysql_result($res, $i, "prenom").'</font></b></a></td>';  
        echo '<td valign="top"><font face="Verdana, Arial, Helvetica, sans-serif" size="1" color="#666666" align="center" >'.mysql_result($res, $i, "Ville").'<br /></font></td>';  
        echo '<td valign="top"><font face="Verdana, Arial, Helvetica, sans-serif" size="1" color="#666666" align="left" >'.mysql_result($res, $i, "Activite").'<br /></font></td>';  
        echo "</tr>\n";  
		$i++;  
    }  
    echo "      </table>\n"; 
?>
j'obtiens bien une liste de noms commençant par A dans le tableau initial. Mais j'ai aussi àa :

Warning: mysql_result() [function.mysql-result]: Unable to jump to row 9 on MySQL result index 9 in /homez.14/businessr/www/membres3.php on line 122

qui se répète des dizaines de fois avant.
Débutant complet en php/mysql. Merci pour votre aide.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

08 avr. 2009, 18:54

php ne parvient pas à lire le 9 ème enregistrement retourné par ta requête.... sans doute parce qu'elle n'en retourne que 8 ?

Tu demandes à php de s'arrêter de parcourir les enregistrement quand $i est égal à $nb ... mais on ne sait ni d'où sort ce nb, ni ce qui te permet d'affirmer que ta requête a retourné très exactement $nb enregistrements ... :roll:
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 440 Messages

08 avr. 2009, 19:56

$nb = mysql_num_rows(mysql_query("SELECT id FROM $table"));
Cette variable renvoit le nombre d'enregistrements.

J'ai donc modifié l'ensemble du code ainsi :
<?php  
    $table = "subscribers";  
    $sql = "SELECT * FROM " . $table." where UPPER(LEFT(NOM,1)) IN ('A') ORDER BY NOM" ;
    $res = mysql_query($sql);  
	echo "      <table> 
        <tr width=\"70%\" valign=\"top\"> 
          <td width=\"25%\" bgcolor=\"#FF9900\"><i><font face=\"Verdana, Arial, Helvetica, sans-serif\" size=\"1\" color=\"#666666\"></font></i></td> 
          <td width=\"28%\" bgcolor=\"#FF9900\" valign=\"top\"> 
            <div align=\"center\"><b><font face=\"Verdana, Arial, Helvetica, sans-serif\" size=\"2\" color=\"#666666\">Ville </font></b></div> 
          </td> 
         <td width=\"27%\" bgcolor=\"#FF9900\"> 
            <div align=\"center\"><b><font face=\"Verdana, Arial, Helvetica, sans-serif\" size=\"2\" color=\"#666666\">Secteur d'activité</font></b></div>
          </td>
        </tr> 
        <tr width=\"70%\" valign=\"top\">\n"; 
        echo '<td valign="top"><a href="http://'.mysql_result($res,"SITE").'" target="_blank"<b><font face="Verdana, Arial, Helvetica, sans-serif" size="1" color="#666666" align="center" >'.mysql_result($res, $i, "NOM").' '.mysql_result($res, $i, "prenom").'</font></b></a></td>';  
        echo '<td valign="top"><font face="Verdana, Arial, Helvetica, sans-serif" size="1" color="#666666" align="center" >'.mysql_result($res, $i, "Ville").'<br /></font></td>';  
        echo '<td valign="top"><font face="Verdana, Arial, Helvetica, sans-serif" size="1" color="#666666" align="left" >'.mysql_result($res, $i, "Activite").'<br /></font></td>';  
        echo "</tr>\n";  
    echo "      </table>\n"; 
?>
Il n'y a désormais plus de message d'erreur. Mais, il ne s'affiche qu'un seul nom : le dernier des A !

Bizarrerie : le lien sur le nom renvoit vers un numéro : 165 en l'occurrence ?? Cette partie du code n'a pourtant pas été touchée.

Autre bizarrerie : avec B au lieu de A, 1 nom aussi, pas le premier, pas le dernier. Avec C, rien : messages d'erreur. Avec D, un nom.

Je n'y comprends rien !!!
Débutant complet en php/mysql. Merci pour votre aide.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

09 avr. 2009, 15:03

Ta variable $nb contient, d'après le code que tu nous donnes, le nombre total d'enregistrement en base et non pas le nombre d'enregistrements retournés par ta requête... donc forcément, si tu 10 enregistrements en base, mais seulement 2 qui commencent par un A, quand dans ta boucle tu demandes de lire le 3ème, tu as ce message d'erreur puisque la requête n'a retourné que 2 lignes...

Par ailleurs, si tu vires le while(), tu enlèves le message d'erreur (du moins tant qu'il y a au moins un enregistrement qui commence par la lettre demandée), mais par contre, vu que tu ne boucles pas sur chaque ligne, tu n'as que la première...
$i = 0;
$sql = "SELECT * FROM " . $table." where UPPER(LEFT(NOM,1)) IN ('A') ORDER BY NOM" ; 
$res = mysql_query($sql); // exécute la requête
$nombreDEnregistrementTrouvesParLaRequete = mysql_num_rows($res); // récupère le nombre de résultats de la requête

while ($i < $nombreDEnregistrementTrouvesParLaRequete) { // pour $i allant de 0 jusq'au nombre de résultats trouvés
  echo mysql_result($res, $i, "NOM"); // affiche la colonne NOM, de la ligne $i, des enregistrements contenus dans $res.
}
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 440 Messages

09 avr. 2009, 22:30

Merci pour cette dernière aide très précieuse. J'ai modifié le code ainsi
<?php  
    $table = "subscribers";  
	$i = 0;
    $sql = "SELECT * FROM " . $table." where UPPER(LEFT(NOM,1)) IN ('D') ORDER BY NOM" ;
    $res = mysql_query($sql);  
	$nbr_req = mysql_num_rows($res); // récupère le nombre de résultats de la requête 
	echo "      <table> 
        <tr width=\"70%\" valign=\"top\"> 
          <td width=\"25%\" bgcolor=\"#FF9900\"><i><font face=\"Verdana, Arial, Helvetica, sans-serif\" size=\"1\" color=\"#666666\"></font></i></td> 
          <td width=\"28%\" bgcolor=\"#FF9900\" valign=\"top\"> 
            <div align=\"center\"><b><font face=\"Verdana, Arial, Helvetica, sans-serif\" size=\"2\" color=\"#666666\">Ville </font></b></div> 
          </td> 
         <td width=\"27%\" bgcolor=\"#FF9900\"> 
            <div align=\"center\"><b><font face=\"Verdana, Arial, Helvetica, sans-serif\" size=\"2\" color=\"#666666\">Secteur d'activité</font></b></div>
          </td>
        </tr> 
        <tr width=\"70%\" valign=\"top\">\n"; 
		while ($i < $nbr_req) {
        echo '<td valign="top"><a href="http://'.mysql_result($res,$i,"SITE").'" target="_blank"<b><font face="Verdana, Arial, Helvetica, sans-serif" size="1" color="#666666" align="center" >'.mysql_result($res, $i, "NOM").' '.mysql_result($res, $i, "prenom").'</font></b></a></td>';  
        echo '<td valign="top"><font face="Verdana, Arial, Helvetica, sans-serif" size="1" color="#666666" align="center" >'.mysql_result($res, $i, "Ville").'<br /></font></td>';  
        echo '<td valign="top"><font face="Verdana, Arial, Helvetica, sans-serif" size="1" color="#666666" align="left" >'.mysql_result($res, $i, "Activite").'<br /></font></td>';  
        echo "</tr>\n";  
		$i++; 
		}
    echo "      </table>\n"; 
?>
Débutant complet en php/mysql. Merci pour votre aide.