Page 1 sur 1

probleme condition

Posté : 09 févr. 2012, 22:18
par graffx
Salut a tous!

voila, je fais une messagerie privé simple, il faut que le membre soit connecté (pas de souci pour ca), que la session soit identique a la boite mp consultée (pas de souci non plus), j' aimerai afficher les messages si la base de données n' est pas vide, et simplement "vous n' avez recu aucun message" si la base de données est vide.


Probleme, ca affiche bien les messages si il y en a, mais m' affiche un blanc si c'est vide, j' ai tenté plusieurs formules qui m' ont données le meme resultat, j' ai donc decidé de simplifier le tout meme si ca fait deg*eulasse pour trouver l' erreur, mais toujours le meme probleme.

Methode simple, je compte les données en premier puis dans la condition, si le resultat est = à 0, "vous n'avez recu aucun message" sinon on affiches les messages.

Je ne comprend pas pourquoi cette malheureuse phase déconne. Je suis preneur de tout indice ou conseil, et surtout merci d'avance!
<?php
				  $cmp2 = mysql_query('SELECT COUNT(*) FROM bernay_mp WHERE dest="'.$sessbernay.'" ') or exit(mysql_error());
				  $cmp = mysql_fetch_assoc($cmp2);

			$mp2 = mysql_query('SELECT * FROM bernay_mp WHERE dest="'.$sessbernay.'" ORDER BY timestamp DESC');
			while ($mp = mysql_fetch_array($mp2))
			{
				if($mp['dest'] == $sessbernay)
				{
					  if($cmp['titre'] > '0')
					  {
			?>
                  <table width="680" border="0" align="center" cellpadding="0" cellspacing="0">
                    <tr>
                      <td align="right" valign="bottom" width="63"><?php
                    if($mp['lu'] =="1")
					{
					echo '<img src="images/divers/nouveau.gif" alt="" style="vertical-align: middle;" /> ';
					}
					?></td>
                      <td width="383" align="left" valign="top"><a href="index.php?a=rmp&mid=<?php echo $mp['id']; ?>"><?php echo $mp['titre']; ?></a></td>
                      <td width="203" align="left" valign="top"><a href="index.php?a=profil&n=<?php echo $mp['exp']; ?>"><?php echo $mp['exp']; ?></a></td>
                      <td width="51" align="right" valign="top"><a href="javascript:if(confirm('Effacer le message ?')) document.location.href='index.php?a=mp&delmail=<?php echo $mp['id']; ?>'">Effacer</a></td>
                    </tr>
                  </table>
                  <?php
				  }
                  else
                  {
				  echo '<meta http-equiv="refresh" content="0; URL=index.php">';
				  }
				  
				                    
                
                  $mpid = $_GET['delmail'];
				  
				  if(isset($_GET['delmail'])&&($mp['dest'] == $name))
				  {
				  $sqlmail = 'DELETE FROM bernay_mp WHERE id ="'.$mpid.'" LIMIT 1'; 
				  mysql_query($sqlmail) or die('Erreur SQL !'.$sqlmail.'<br />'.mysql_error());
				  echo '<meta http-equiv="refresh" content="0; URL=index.php?a=mp">';
				 
				  }
				}
				else
				{
					echo 'Vous n\avez pas recu de nouveau message';
				}

		}
		?>

Re: probleme condition

Posté : 09 févr. 2012, 22:28
par xTG
Il y a un souci déjà...
if($cmp['titre'] > '0')
Ta requête d'où provient $cmp ne comporte aucune colonne sélectionnée ou alias nommé titre, tu n'as que le count(*) dedans.

Ensuite ton else pour le message de "aucun nouveau message" est placé sur ce if là actuellement :
if($mp['dest'] == $sessbernay)
Une condition qui n'a d'ailleurs aucun intérêt puisque c'est la condition du WHERE de ta requête.

Re: probleme condition

Posté : 09 févr. 2012, 22:32
par Ryle
S'il n'affiche jamais le else c'est que le test du if ($mp['dest'] == $sessbernay) est toujours vrai...

D'ailleurs, ton message ne devrait-il pas plutôt être après la boucle au lieu de dedans ?

Pourquoi ne pas simplement définir un compteur que tu incrémentes dans ta boucle et à la sortie de la boucle il te suffirait de regarder sa valeur :
$cpt = 0;
while (...) {
   ...
   $cpt++;
}
if ($cpt==0) 
   echo ' désoléyenapas ';

Re: probleme condition

Posté : 09 févr. 2012, 23:22
par graffx
J' ai presque rien compris! :mrgreen:

Si je met le message aprés la boucle je ne pourrai pas faire ma condition dans la boucle ca serait donc un choix entre afficher les infos si il y en a et completement a part laisser le message, mais bien distinctivement.

rien compris a ton implementation ^^


Pourtant je pensais que j' avais fait au plus simple du simple! :lol:

Re: probleme condition

Posté : 09 févr. 2012, 23:30
par graffx
Bon alors en gardant que le principal, meme probleme:
<?php
				  $cmp2 = mysql_query('SELECT COUNT(*) FROM bernay_mp WHERE dest="'.$sessbernay.'" ') or exit(mysql_error());
				  $cmp = mysql_fetch_assoc($cmp2);

			$mp2 = mysql_query('SELECT * FROM bernay_mp WHERE dest="'.$sessbernay.'" ORDER BY timestamp DESC');
			while ($mp = mysql_fetch_array($mp2))
			{
				
				
				if($mp['dest'] == $sessbernay)
				{
					 
					 
					 if($cmp['titre'] > 0)
					  {
			echo 'ok';
					
				  }
                  else
                  {
				  echo 'Vous n\'avez pas recu de nouveau message';
				  }
				  
				  
				
				}
				else
				{
					echo '<meta http-equiv="refresh" content="0; URL=index.php">';
				}
				
				
				

		}
		?>
J' ai laissé de la marge pour bien voir.

donc:

Code : Tout sélectionner

je fais une boucle { si la session correspond a la boite mail { Si il y a des message { afficher les messages } sinon { signaler que la boite est vide } } sinon si la session ne correspond pas a la boite mail { on redirige vers la page d'accueil } }

Je peux pas faire plsu simple, ca devrait fonctionner!

Re: probleme condition

Posté : 10 févr. 2012, 00:14
par graffx
Bon et bien tu m' avais mis sur la voie, je ne voyais pas comment mettre ca hors boucle, j' ai eu un tilt, j' ai essayé, ca marche!

Mais alors en considerant que c'est resolu, pourquoi cela ne marcherait pas dans une boucle? Il y a une regle la dessus?


En tout cas merci mon ami!!!


=D>

Re: probleme condition

Posté : 10 févr. 2012, 23:40
par Ryle
Content que tu ais pu trouver une solution :)

Pour répondre à ta question, ça ne peut pas marcher dans la boucle tout simplement parce que si tu n'as pas d'élément à afficher, le test du while est faux et php ne rentre pas dans la boucle ;)