8791 sujets

Développement web côté serveur, CMS

Bonjour à tous.

Et oui, encore moi et mes erreur étranges.

Problématique :

Sur mon site, j'ai mis en place un système de "pagination" me permettant de trouver des contacts en cliquant simplement sur la lettre correspondant à la première lettre de leur nom Smiley sweatdrop

Ex : A - B - C - D ...

Pour ce faire, voici mon code :


$select="SELECT * FROM contact WHERE affichage='1' AND nom LIKE '".$_GET['l']."%' ORDER BY nom, prenom ASC";
$result = mysql_query($select,$connect)  or die ('Erreur : '.mysql_error() );
$row = mysql_fetch_row($result);
$totalrec = $row[0];


La récupération des données se fait par le code suivant :


if($totalrec) {
while($row = mysql_fetch_array($result)) {

... puis mon code avec mes $row['nom'] et autres $row['prenom']

}
mysql_free_result($result);
}


Erreur rencontrée :

Ma page PHP affiche bien un ensemble de résultats issus de ma base de données SAUF le premier enregistrement (valable pour toutes les lettres de l'alphabet).

Ex :
Ma base à en nom :
Alain, Alex, Anatole, ...

Alain étant le premier contact qui devrait sortir si je clique sur A

Ma page PHP me renvoie :
Alex, Anatole, ... Mais pas Alain !

Question :

D'après vous, où est sensé se trouver le problème ?

Pour information, j'ai testé en ajoutant une requête pour compter le nombre d'occurrences.
Elle me trouve bien le bon nombre mais ma seconde requête (inscrite plus haut) ne m'affiche que ce nombre d'enregistrements moins le premier enregistrement !

Vous qui êtes doués dans ce domaine, pouvez-vous m'aiguiller ?

Un grand merci à tous. Smiley confused
Modifié par nikkyken (03 Oct 2008 - 10:08)
Modérateur
Salut,

Est ce que par hasard Alain ne serait pas écrit différement ? ALAIN ou alain ou ALain ou aLaiN ou ... ?

<<<EDIT
Je crois avoir compris ton soucis, essai de faire ceci :

$select="SELECT * FROM contact WHERE affichage='1' AND nom LIKE '".$_GET['l']."%' ORDER BY nom, prenom ASC";
$result = mysql_query($select,$connect)  or die ('Erreur : '.mysql_error() );

while($row = mysql_fetch_array($result)) {
//puis mon code avec mes $row['nom'] et autres $row['prenom']
}

mysql_free_result($result);



Si tu veux absolument faire une conditionnel afin de savoir s'il y a un enregistrement je peux te conseiller de regarder mysql_num_rows(). Alors, ton code devrait être à peu près ceci :


$select="SELECT * FROM contact WHERE affichage='1' AND nom LIKE '".$_GET['l']."%' ORDER BY nom, prenom ASC";
$result = mysql_query($select,$connect)  or die ('Erreur : '.mysql_error() );

$nb_enregistrement=mysql_num_rows($result);

if($nb_enregistrement>0){
  while($row = mysql_fetch_array($result)) {
  //... puis mon code avec mes $row['nom'] et autres $row['prenom']
 }
}
mysql_free_result($result);



EDIT

++
Modifié par Nolem (02 Oct 2008 - 21:07)
nikkyken a écrit :


[...]
$row = mysql_fetch_row($result);
$totalrec = $row[0];
if($totalrec) {
    while($row = mysql_fetch_array($result)) {
        [...]
    }
}


Le premier mysql_fetch_row (celui qui contient Alain) n'est pas exploité et fait avancer vers le tuple suivant.
Je présume que tu voulais utiliser mysql_num_rows à la place ?

a+
Un grand merci à tous les deux.

Nolem, ton exemple de code à été plus que concluant !!

Il aurais fallu que je fasse plus attention à mon code et je n'aurais pas eu ce problème.

Pour moi, le problème est réglé ! Smiley biggrin