Problème affichage résultats sql

Eléphant du PHP | 70 Messages

15 nov. 2010, 23:08

le problème c'est que si je le supprimer les titres validés ne s'affichent plus...
En fait je crois que je comprends pas trop ce WHILE :cry:

ViPHP
ViPHP | 5462 Messages

16 nov. 2010, 00:02

le problème c'est que si je le supprimer les titres validés ne s'affichent plus...
En fait je crois que je comprends pas trop ce WHILE :cry:
ouai c'est pas evidant au debut,

le while tourne en boucle jusqu'à ce que l'instruction rend false
a chaque appelle de mysql_fetch_assoc tu va aller chercher le résultat suivant dans la requete, tu peux faire

$ligne1 = mysql_fetch_assoc($result);
$ligne2 = mysql_fetch_assoc($result);
$ligne3 = mysql_fetch_assoc($result);
....


quand y'a plus de resultat, mysql_fetch_assoc rend false

donc
while($row = mysql_fetch_assoc($result))

va tourner jusqu'a ce quemysql_fetch_assoc($result) sois egale a false, donc $row le sera aussi, la condition se fait uniquement sur $row

si tu fais var_dump($row = false) ca rendra false
si tu fais var_dump($row = 'blabla') ca rendra blabla


donc ducoup si tu fais
while($user = mysql_fetch_assoc($result))
{
   //blabla
}
//et plu loin
while($user = mysql_fetch_assoc($result))
{
   //blabla
}
y'aura jamais de résultats dans le 2eme while puisque tout les consommer

si tu fais ca
while($user = mysql_fetch_assoc($result))
{
   echo blabla
    while($user = mysql_fetch_assoc($result))
    {
       echo truc
    }
}
tu va avoir 1 blablabla, suivis de x truc

Eléphant du PHP | 70 Messages

16 nov. 2010, 02:09

Merci pour cette explication. :D
Je viens de refaire le code ce qui donne :
$conn = db_connect();
$sql = "SELECT *
        FROM offre
        LEFT JOIN adherent ON adherent.commun=offre.commun
        where login_user = '$login_user'";
$affichage = mysql_query($sql, $conn);
$aff_user = mysql_fetch_assoc($affichage);	
  	
 
//--------------------------------------FIN CONNEXION A LA BASE----------------------------------	

//  si NULL
	
	if ($aff_user[publier] == NULL) {

			echo "<hr>";
			

	echo "à valider"; 
	
	echo "<b style='color:#F00'>".stripslashes(htmlentities($aff_user['titre']))."</b><br>"; }
	
	else {

echo "<hr>";
//  si non NULL
		
			echo "validé";
			
	echo "<li class=\"a-blanc\"><a href=\"index.php?id=".stripslashes(mb_strtoupper($aff_user['id']))."\">".stripslashes(htmlentities($aff_user['titre']))."</a></li>"; 
	}
	echo "<br>";
Par contre je n'ai que le dernier enregistrement qui s'affiche mais cette fois ci le NULL et NON NULL fonctionnent parfaitement. :D
Il ne reste plus qu'à régler cette affichage multiple et c'est fini! Mais comment procéder? #-o

ViPHP
ViPHP | 5462 Messages

16 nov. 2010, 02:24

il faut faire un while, la tu va chercher qu'un seul resultat, et oublie pas de mettre tes quotes : $aff_user['publier']

Eléphant du PHP | 70 Messages

16 nov. 2010, 03:34

Mes while ne fonctionnent pas très bien.
En fait seul le dernier enregistrement réagit. lorsque je mets le dernier article en NULL et les autres en NON NULL alors tous les enregistrements se trouvent dans la partie "à valider" et lorsque je mets le dernier article en NON NULL et les autres en NULL alors tous les enregistrements se trouvent dans la partie "validé"
Encore une fois le dernier enregistrement règne en maitre!

voici le code :
$conn = db_connect();
$sql = "SELECT *
        FROM offre
        LEFT JOIN adherent ON adherent.commun=offre.commun
        where login_user = '$login_user'";
  $affichage = mysql_query($sql, $conn);
  $affichage1 = mysql_query($sql, $conn);
  $aff_user = mysql_fetch_array($affichage);   
       
 
//--------------------------------------FIN CONNEXION A LA BASE----------------------------------      

//  si NULL
       
        if ($aff_user['publier'] == NULL) {

                        echo "<hr>";
                       

        echo "à valider";
       while ($aff_tout = mysql_fetch_assoc($affichage1)) {	
        echo "<b style='color:#F00'>".stripslashes(htmlentities($aff_user['titre']))."</b><br>"; }
       }
        else {

echo "<hr>";
//  si non NULL
               
                        echo "validé";
                       while ($aff_tout = mysql_fetch_assoc($affichage1)) {	
        echo "<li class=\"a-blanc\"><a href=\"index.php?id=".stripslashes(mb_strtoupper($aff_user['id']))."\">".stripslashes(htmlentities($aff_user['titre']))."</a></li>"; }
        }
        echo "<br>";
 


ViPHP
ViPHP | 5462 Messages

16 nov. 2010, 11:16

c'est pareil, tu fais plusieur while je t'es expliquer comment ca marche avant, je pense que t'as toujours pas compris

Eléphant du PHP | 70 Messages

16 nov. 2010, 13:09

le problème c'est que si je fais un seul while dans la partie si NULL alors mes résultats dans la partie non NULL est égal au dernier enregistrement... :(

Eléphant du PHP | 70 Messages

16 nov. 2010, 13:22

voila je viens de comprendre comment il fallait placer le }
maintenant le if et le else doivent brouiller le while car mes infos ne s'affichent pas... peut-être que le while n'est pas à sa place par rapport au if et au else?
$conn = db_connect();
$sql = "SELECT *
        FROM offre
        LEFT JOIN adherent ON adherent.commun=offre.commun
        where login_user = '$login_user'";
  $affichage = mysql_query($sql, $conn);
  $affichage1 = mysql_query($sql, $conn);
  $aff_user = mysql_fetch_array($affichage);  
       
 
//--------------------------------------FIN CONNEXION A LA BASE----------------------------------      

//  si NULL
       
        if ($aff_user['publier'] == NULL) {

                        echo "<hr>";
                       

        echo "à valider";
       while ($aff_tout = mysql_fetch_assoc($affichage1)) {    
        echo "<b style='color:#F00'>".stripslashes(htmlentities($aff_user['titre']))."</b><br>"; 
       }
        else {

echo "<hr>";
//  si non NULL
               
                        echo "validé";
                       while ($aff_tout = mysql_fetch_assoc($affichage1)) {    
        echo "<li class=\"a-blanc\"><a href=\"index.php?id=".stripslashes(mb_strtoupper($aff_user['id']))."\">".stripslashes(htmlentities($aff_user['titre']))."</a></li>"; }
        }
}
        echo "<br>";
 

 

ViPHP
ViPHP | 5462 Messages

16 nov. 2010, 14:21

c'est le même code t'as toujours 2 while

Eléphant du PHP | 70 Messages

16 nov. 2010, 14:37

pourquoi lorsque je mets where login_user = '$login_user' les titres les s'affichent pas? lorsque je le retire ils s'affichent mais sur tous les comptes... alors que les titres ne doivent s'afficher qu'en fonction du login_user ??? #-o

ViPHP
ViPHP | 5462 Messages

16 nov. 2010, 14:39

quand tu fais ta requete dans phpmyadmin ta les bon resultat ?

Eléphant du PHP | 70 Messages

16 nov. 2010, 14:43

la requête dans phpmyadmin fonctionne si je retire login_user='$login_user'

Eléphant du PHP | 70 Messages

16 nov. 2010, 14:45

en fait il ne me retourne pas de ligne si je ne retire pas login_user='$login_user'

ViPHP
ViPHP | 5462 Messages

16 nov. 2010, 14:57

normale pour test il faut mettre un exemple a la place de $login_user

Eléphant du PHP | 70 Messages

16 nov. 2010, 15:37

ok, problème réglé c'est ok pour login_user...
En revanche je ne comprends pas comment placer mon while par rapport à mon if et else