problème de boucle avec plusieurs $_GET

Petit nouveau ! | 6 Messages

23 févr. 2008, 11:07

Bonjour,

J'ai un petit soucis avec une boucle, c'est au niveau des elseif et du else que ca foire. En gros, lorsqu'il n'y a qu'un seul $_GET, c'est parfait mais dès le moment ou il y en a 2, le "type" prend le dessus sur le "pseudo" et il n'y a plus de sélection par rapport au pseudo. Je suppose que c'est une histoire de "Strictement égal à" ou "Différent de" qui va rentrer en jeu mais je sais pas comment le faire avec un $_GET.

J'espère que j'ai donné assez de détails dans le post.

Merci d'avance pour votre aide.
<?php mysql_connect("*****", "*****", "*****");
		mysql_select_db("*****");

if ($_GET == null) { 
$reponse = mysql_query("SELECT * FROM arcos_medias, arcos_users WHERE arcos_medias.pseudo = arcos_users.id ORDER BY nom"); }

elseif  ($_GET['type']) {
$reponse = mysql_query("SELECT * FROM arcos_medias, arcos_users WHERE type='" . mysql_real_escape_string($_GET['type']) . "' AND arcos_medias.pseudo = arcos_users.id ORDER BY nom"); }

elseif  ($_GET['pseudo']) { 
$reponse = mysql_query("SELECT * FROM arcos_medias, arcos_users WHERE  arcos_medias.pseudo='" . mysql_real_escape_string($_GET['pseudo']) . "' AND arcos_medias.pseudo=arcos_users.id ORDER BY nom"); }

else {
$reponse = mysql_query("SELECT * FROM arcos_medias, arcos_users WHERE arcos_medias.pseudo='" . mysql_real_escape_string($_GET['pseudo']) . "' AND arcos_medias.pseudo = arcos_users.id AND type='" . mysql_real_escape_string($_GET['type']) . "' ORDER BY nom"); }

// On fait une boucle pour lister tout ce que contient la table :
while ($donnees = mysql_fetch_array($reponse) )


{

?><li><div align="left"><strong><?php echo $donnees['nom']; ?></strong> <span class="texte_pseudo_petit"><?php echo $donnees['pseudo']; ?></span></div></li><?php }
mysql_close(); // Déconnexion de MySQL
?>

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

23 févr. 2008, 13:19

Un elseif n'est rien de plus qu'un else avec une condition if().
Donc si le premier test est concluant, il n'a aucune raison d'entrer dans le "sinon" du else.

Pour faire ce que tu veux un peu plus proprement, il faudrait construire ta requête dynamiquement en fonction des données spécifiées. Ta requête SQL n'étant qu'une chaine de caractères, tu peux le faire facilement en la complétant en fonction de tes tests. Pour chaque valeur spécifiée on complète la requête :
$sql = " SELECT champ1, champ2, ... FROM ta_table WHERE ta_condition ";

if (isSet($_GET['data1'])) // si la donnée est spécifiée, on ajoute un filtre à la requête
  $sql.= " AND champX = '". mysql_real_escape_string($_GET['data1']) . "'";

if (isSet($_GET['data2'])) 
  $sql.= " AND champY = '". mysql_real_escape_string($_GET['data2']) . "'";

//....

$sql.= " ORDER BY champZ ";

echo $sql; // affiche la requête générée pour vérification
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Petit nouveau ! | 6 Messages

23 févr. 2008, 15:35

Merci pour ta réponse, j'ai essayé de l'adapter mais sans succès. Voila ce que j'ai pour le moment.
<?php mysql_connect("***", "***", "***");
		mysql_select_db("***");
		
$reponse = mysql_query (" SELECT * FROM arcos_medias, arcos_users  WHERE "); 

if (isSet($_GET['type'])) 
  $reponse.= mysql_query (" AND type='" . mysql_real_escape_string($_GET['type']) . "' "); 

if (isSet($_GET['pseudo'])) 
  $reponse.= mysql_query (" AND pseudo='" . mysql_real_escape_string($_GET['pseudo']) . "' "); 
  
  $reponse.= mysql_query (" AND arcos_medias.pseudo = arcos_users.id ORDER BY nom "); 
  
  // On fait une boucle pour lister tout ce que contient la table :
while ($donnees = mysql_fetch_array($reponse) )


{

?>
Message d'erreur :

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource

Mammouth du PHP | 1339 Messages

23 févr. 2008, 16:32

Met un espace entre $reponse et .=
Bon sinon tu me fais un message privé et on se fait un TeamViewer

Petit nouveau ! | 6 Messages

23 févr. 2008, 16:41

Toujours la même erreur. :(

Mammouth du PHP | 1339 Messages

23 févr. 2008, 16:50

<?php mysql_connect("***", "***", "***");
        mysql_select_db("***");
        
$reponse = mysql_query ("SELECT * FROM arcos_medias, arcos_users WHERE "); 

$reponse .= isset($_GET['type']) ? "type='".mysql_real_escape_string($_GET['type'])."' AND " : NULL;
$reponse .= isset($_GET['pseudo']) ? "pseudo='".mysql_real_escape_string($_GET['pseudo'])."' AND " : NULL;
$reponse .= "arcos_medias.pseudo = arcos_users.id ORDER BY nom"; 
  
  // On fait une boucle pour lister tout ce que contient la table :
while ($donnees = mysql_fetch_array($reponse) )


{ 
Bon sinon tu me fais un message privé et on se fait un TeamViewer

Petit nouveau ! | 6 Messages

23 févr. 2008, 17:27

Aucun changement.

J'ai également essayé en changeant "pseudo" par "arcos_medias.pseudo" sans succès.

Merci pour ton aide Elie.

Mammouth du PHP | 1339 Messages

23 févr. 2008, 17:44

Je suis tellement mauvais !
<?php mysql_connect("***", "***", "***");
        mysql_select_db("***");
        
$sql = "SELECT * FROM arcos_medias, arcos_users WHERE "; 

$sql .= isset($_GET['type']) ? "type='".mysql_real_escape_string($_GET['type'])."' AND " : NULL;
$sql .= isset($_GET['pseudo']) ? "pseudo='".mysql_real_escape_string($_GET['pseudo'])."' AND " : NULL;
$sql .= "arcos_medias.pseudo = arcos_users.id ORDER BY nom"; 

$reponse = mysql_query($sql) or die('Erreur SQL<br />'.$sql'.<br />'.mysql_error());
  
  // On fait une boucle pour lister tout ce que contient la table :
while ($donnees = mysql_fetch_array($reponse) )


{
Bon sinon tu me fais un message privé et on se fait un TeamViewer

Petit nouveau ! | 6 Messages

23 févr. 2008, 17:54

Je pense qu'il manque un
'
dans cette ligne :
$reponse = mysql_query($sql) or die('Erreur SQL<br />'.$sql'.<br />'.mysql_error());
Mais je sais pas ou...

Car tous es grisé après.

Mammouth du PHP | 1339 Messages

23 févr. 2008, 17:57

Code : Tout sélectionner

'.$sql'.
devient

Code : Tout sélectionner

'.$sql.'
[/php]
Bon sinon tu me fais un message privé et on se fait un TeamViewer

Petit nouveau ! | 6 Messages

23 févr. 2008, 18:22

Merci beaucoup ! Ça marche comme sur des roulettes. :P