par
Ryle » 10 avr. 2008, 12:30
Le problème est qu'à chaque fois que tu fais appel à mysql_fetch_row() tu vas lire le prochain enregistrement retourné par ta requête. Lorsque tu fais "if (!mysql_fetch_row($result)) " tu vas donc lire le premier résultat retourné (celui qui t'interesse) et lorsque tu fais "while ($ligne= mysql_fetch_row($result))" tu passes au second. Sauf qu'il n'y qu'un seul enregistrement, que tu as déjà passé à cause du if.
Tu peux donc soit suivre la proposition de
guilt92, mais il n'y a amha pas vraiment d'intérêt à utiliser le mysql_num_rows() dans la mesure ou ton couple login/pass est (théoriquement) unique. Il n'est du coup pas nécessaire non plus de mettre un while :
if ($ligne = mysql_fetch_row($result)) { // s'il y a un résultat, on l'affecte dans $ligne
$ide=$ligne[0];
echo $ide;
}
else { // au cas ou les identifiants ne sont pas correcte redirection vers cette page index.php
header ("Location:index.php?action=afficher&view=error"); // Location prend un "L" majuscule
exit(); // pas obligatoire mais cela évite que php ne continue inutilement l'exécution du code alors qu'une redirection est demandée
}
Par ailleurs, évite le SELECT * si tu n'as besoin que d'un champ. Nomme le (ou les s'il t'en faut 2, 3, ... N) explicitement afin d'être sur de l'ordre dans lequel tu vas les retrouver, sinon la valeur de $ligne[0] peut être celle d'une autre colonne si la structure de la table change. Je te recommande d'ailleurs d'utiliser mysql_fetch_assoc() et de spécifier en toutes lettres le nom du champ concerné :
$requete = "SELECT champ_ide FROM .... ";
...
if ($ligne = mysql_fetch_assoc($result)) { // s'il y a un résultat, on l'affecte dans $ligne
$ide=$ligne['champ_ide']; // ainsi pas de doute sur le contenu de ta variable
echo $ide;
}
A lire :
http://www.phpfrance.com/forums/voir_sujet-28093.php 
Le problème est qu'à chaque fois que tu fais appel à mysql_fetch_row() tu vas lire le prochain enregistrement retourné par ta requête. Lorsque tu fais "if (!mysql_fetch_row($result)) " tu vas donc lire le premier résultat retourné (celui qui t'interesse) et lorsque tu fais "while ($ligne= mysql_fetch_row($result))" tu passes au second. Sauf qu'il n'y qu'un seul enregistrement, que tu as déjà passé à cause du if.
Tu peux donc soit suivre la proposition de [b]guilt92[/b], mais il n'y a amha pas vraiment d'intérêt à utiliser le mysql_num_rows() dans la mesure ou ton couple login/pass est (théoriquement) unique. Il n'est du coup pas nécessaire non plus de mettre un while :
[php]if ($ligne = mysql_fetch_row($result)) { // s'il y a un résultat, on l'affecte dans $ligne
$ide=$ligne[0];
echo $ide;
}
else { // au cas ou les identifiants ne sont pas correcte redirection vers cette page index.php
header ("Location:index.php?action=afficher&view=error"); // Location prend un "L" majuscule
exit(); // pas obligatoire mais cela évite que php ne continue inutilement l'exécution du code alors qu'une redirection est demandée
}[/php]
Par ailleurs, évite le SELECT * si tu n'as besoin que d'un champ. Nomme le (ou les s'il t'en faut 2, 3, ... N) explicitement afin d'être sur de l'ordre dans lequel tu vas les retrouver, sinon la valeur de $ligne[0] peut être celle d'une autre colonne si la structure de la table change. Je te recommande d'ailleurs d'utiliser mysql_fetch_assoc() et de spécifier en toutes lettres le nom du champ concerné : [php]$requete = "SELECT champ_ide FROM .... ";
...
if ($ligne = mysql_fetch_assoc($result)) { // s'il y a un résultat, on l'affecte dans $ligne
$ide=$ligne['champ_ide']; // ainsi pas de doute sur le contenu de ta variable
echo $ide;
}[/php]
A lire : http://www.phpfrance.com/forums/voir_sujet-28093.php :)