problème de boucle avec plusieurs $_GET

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : problème de boucle avec plusieurs $_GET

par L4ur3nt » 23 févr. 2008, 18:22

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

par Elie » 23 févr. 2008, 17:57

Code : Tout sélectionner

'.$sql'.
devient

Code : Tout sélectionner

'.$sql.'
[/php]

par L4ur3nt » 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.

par Elie » 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) )


{

par L4ur3nt » 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.

par Elie » 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) )


{ 

par L4ur3nt » 23 févr. 2008, 16:41

Toujours la même erreur. :(

par Elie » 23 févr. 2008, 16:32

Met un espace entre $reponse et .=

par L4ur3nt » 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

par Ryle » 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

problème de boucle avec plusieurs $_GET

par L4ur3nt » 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
?>