IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Boucle sur array [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre actif Avatar de arthuro45
    Profil pro
    Développeur du dimanche
    Inscrit en
    Juillet 2009
    Messages
    602
    Détails du profil
    Informations personnelles :
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur du dimanche

    Informations forums :
    Inscription : Juillet 2009
    Messages : 602
    Points : 265
    Points
    265
    Par défaut Boucle sur array
    Bonjour,

    Je cherche à boucler sur un array dans une requête mais je me retrouve face à une erreur sql : Warning: mysql_fetch_array(): supplied argument is not a valid MySQL.

    Je récupère un array de la forme 1 2 3 (pas de séparateur) via un GET, je boucle dessus et je met le tout dans mon where, le but étant d'afficher les entrées correspondantes.
    La requête ne s'éxécute pas.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    <?php 
    include('connexions/connection.inc.php');
    if (isset($_GET["req"])) {$req=urldecode($_GET["req"]);} else {$req="";}
     
    $d=array($_GET["req"]);
     
    for($i=0; $i<sizeof($d); $i++)
    	{
    	echo $d[$i];
    	}
    $r1 = mysql_query("select id_cmd from commande where id_cmd in ".$d[$i]."");
    	while($tab_r1 = mysql_fetch_array($r1)){
    	echo $tab_r1['id_cmd'];
    		}
     
    ?>

  2. #2
    Membre éclairé
    Profil pro
    Assistant recherche bioinformatique
    Inscrit en
    Novembre 2007
    Messages
    877
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Assistant recherche bioinformatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 877
    Points : 835
    Points
    835
    Par défaut
    BOnjour,
    Essaye d'executer ton code avec cette ligne modifiée ainsi, et reporte nous l'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $r1 = mysql_query("select id_cmd from commande where id_cmd in ".$d[$i]."") die("Query error: "select id_cmd from commande where id_cmd in ".$d[$i] . " - " . mysql_error());
    Z.

  3. #3
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2008
    Messages : 294
    Points : 333
    Points
    333
    Par défaut
    Bonjour,

    Dans ta requête SQL il faut que tu mettes des parenthèse pour ton in :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $r1 = mysql_query("select id_cmd from commande where id_cmd in (".$d[$i].")");
    Par contre il n'y aura qu'une seul valeur dans ton in.

  4. #4
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    where id_cmd in ".$d[$i]."")
    ça ser à rien ""

    de plus le IN c dans un intervalle, un ensemble de valeurs

  5. #5
    Membre actif Avatar de arthuro45
    Profil pro
    Développeur du dimanche
    Inscrit en
    Juillet 2009
    Messages
    602
    Détails du profil
    Informations personnelles :
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur du dimanche

    Informations forums :
    Inscription : Juillet 2009
    Messages : 602
    Points : 265
    Points
    265
    Par défaut
    BOnjour,
    Essaye d'executer ton code avec cette ligne modifiée ainsi, et reporte nous l'erreur :

    Code :
    $r1 = mysql_query("select id_cmd from commande where id_cmd in ".$d[$i]."") die("Query error: "select id_cmd from commande where id_cmd in ".$d[$i] . " - " . mysql_error());
    Voici l'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Parse error: syntax error, unexpected T_EXIT in E:\popup_reception.php on line 11
    Pour les autres solutions, désolé elles n'ont pas fonctionnées.

  6. #6
    Membre éclairé
    Profil pro
    Assistant recherche bioinformatique
    Inscrit en
    Novembre 2007
    Messages
    877
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Assistant recherche bioinformatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 877
    Points : 835
    Points
    835
    Par défaut
    il manque le or dans le 'or die'
    Et utilise des parentheses pour IN, comme Sebastien te l'a fait remarqué.
    Z.

  7. #7
    Membre actif Avatar de arthuro45
    Profil pro
    Développeur du dimanche
    Inscrit en
    Juillet 2009
    Messages
    602
    Détails du profil
    Informations personnelles :
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur du dimanche

    Informations forums :
    Inscription : Juillet 2009
    Messages : 602
    Points : 265
    Points
    265
    Par défaut
    Voici l'erreur avec les modifications sur or die et les parenthéses ajoutées (".$d[$i]."):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Parse error: syntax error, unexpected T_STRING in...

  8. #8
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2008
    Messages : 294
    Points : 333
    Points
    333
    Par défaut
    Dans une requête SQL lorsque tu met un in les parenthèse sont obligatoires, tu ne pourras pas exécuter ta requête sans.

  9. #9
    Membre éclairé
    Profil pro
    Assistant recherche bioinformatique
    Inscrit en
    Novembre 2007
    Messages
    877
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Assistant recherche bioinformatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 877
    Points : 835
    Points
    835
    Par défaut
    ton id est du type numérique, il ne fait pas mettre de guillement dans les parentheses
    Z.

  10. #10
    Membre actif Avatar de arthuro45
    Profil pro
    Développeur du dimanche
    Inscrit en
    Juillet 2009
    Messages
    602
    Détails du profil
    Informations personnelles :
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur du dimanche

    Informations forums :
    Inscription : Juillet 2009
    Messages : 602
    Points : 265
    Points
    265
    Par défaut
    Avec cette syntaxe je n'ai plus d'erreur mais aucune donnée affichée.

  11. #11
    Membre actif Avatar de arthuro45
    Profil pro
    Développeur du dimanche
    Inscrit en
    Juillet 2009
    Messages
    602
    Détails du profil
    Informations personnelles :
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur du dimanche

    Informations forums :
    Inscription : Juillet 2009
    Messages : 602
    Points : 265
    Points
    265
    Par défaut
    En mettant l'accollade de fin de FOR après la requête j'obtiens la 1er entrée du array, ça avance

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    <?php 
    include('connexions/connection.inc.php');
    if (isset($_GET["req"])) {$req=urldecode($_GET["req"]);} else {$req="";}
     
    $d=array($_GET["req"]);
     
    for($i=0; $i<sizeof($d); $i++)
    	{
    	 echo $d[$i]; //pour test
     
    $r1 = mysql_query("select id_cmd from commande where id_cmd in ('$d[$i]')");
    }
    	while($tab_r1 = mysql_fetch_array($r1)){
    	echo $tab_r1['id_cmd'];
    		}
    ?>

  12. #12
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Le problème (si j'ai compris), ton $d[$i] retourne une chaîne 1 2 3 non?

    Donc dans ta requête tu fais un explode(' ', $d[$i]) dans un tableau genre inTab,

    Puis ta requête:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    mysql_query("select id_cmd from commande where id_cmd in ('$inTab[0]', '$inTab[1]', '$inTab[2]')");

  13. #13
    Membre actif Avatar de arthuro45
    Profil pro
    Développeur du dimanche
    Inscrit en
    Juillet 2009
    Messages
    602
    Détails du profil
    Informations personnelles :
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur du dimanche

    Informations forums :
    Inscription : Juillet 2009
    Messages : 602
    Points : 265
    Points
    265
    Par défaut
    Le problème (si j'ai compris), ton $d[$i] retourne une chaîne 1 2 3 non?
    Mon problème (je n'en ai pas qu'un ) est que je ne connais pas à l'avance le nombre de valeurs à afficher. 1 2 3 c'est pour l'exemple.

    j'ai ajouté un comptage des résultats, j'en suis là toujours avec la 1er valeur afficher sans les autres :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    <?php 
    include('connexions/connection.inc.php');
    if (isset($_GET["req"])) {$req=urldecode($_GET["req"]);} else {$req="";}
     
    $d=array($_GET["req"]);
     
    for($i=0; $i<sizeof($d); $i++)
    	{
    	echo $d[$i].'<br>'; //Pour test
     
    $r1 = mysql_query("select id_cmd from commande where id_cmd in ('$d[$i]')");
    }
    	$nombre = mysql_num_rows($r1);
    	if($nombre){
    	while($tab_r1 = mysql_fetch_array($r1)){
    	echo $tab_r1['id_cmd'].'<br>';
    		}
    	}
    ?>

  14. #14
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2008
    Messages : 294
    Points : 333
    Points
    333
    Par défaut
    Dans ce cas il te suffit de faire comme sa :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    <?php 
    include('connexions/connection.inc.php');
    if (isset($_GET["req"])) {$req=urldecode($_GET["req"]);} else {$req="";}
     
    $d=array($_GET["req"]);
     $liste_valeur='';
    for($i=0; $i<sizeof($d); $i++)
    	{
    	echo $d[$i].'<br>'; //Pour test
     
    $liste_valeur=$liste_valeur.','.$d[$i];
    }
    $r1 = mysql_query('select id_cmd from commande where id_cmd in ('.$liste_valeur.')');
    	$nombre = mysql_num_rows($r1);
    	if($nombre){
    	while($tab_r1 = mysql_fetch_array($r1)){
    	echo $tab_r1['id_cmd'].'<br>';
    		}
    	}
    ?>

  15. #15
    Membre actif Avatar de arthuro45
    Profil pro
    Développeur du dimanche
    Inscrit en
    Juillet 2009
    Messages
    602
    Détails du profil
    Informations personnelles :
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur du dimanche

    Informations forums :
    Inscription : Juillet 2009
    Messages : 602
    Points : 265
    Points
    265
    Par défaut
    Dans ce cas il te suffit de faire comme sa :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    <?php 
    include('connexions/connection.inc.php');
    if (isset($_GET["req"])) {$req=urldecode($_GET["req"]);} else {$req="";}
     
    $d=array($_GET["req"]);
     $liste_valeur='';
    for($i=0; $i<sizeof($d); $i++)
    	{
    	echo $d[$i].'<br>'; //Pour test
     
    $liste_valeur=$liste_valeur.','.$d[$i];
    }
    $r1 = mysql_query('select id_cmd from commande where id_cmd in ('.$liste_valeur.')');
    	$nombre = mysql_num_rows($r1);
    	if($nombre){
    	while($tab_r1 = mysql_fetch_array($r1)){
    	echo $tab_r1['id_cmd'].'<br>';
    		}
    	}
    ?>
    Non ça ne fonctionn pas, j'ai à nouveau une erreur sql.

  16. #16
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2008
    Messages : 294
    Points : 333
    Points
    333
    Par défaut
    Oui c'est normal c'est moi qui est oublier un pti truc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
     
    <?php 
    include('connexions/connection.inc.php');
    if (isset($_GET["req"])) {$req=urldecode($_GET["req"]);} else {$req="";}
     
    $d=array($_GET["req"]);
     $liste_valeur='';
    for($i=0; $i<sizeof($d); $i++)
    	{
    	echo $d[$i].'<br>'; //Pour test
    if ($i==0)
    {	
    $liste_valeur=$d[$i];
    }
    else
    {
    $liste_valeur=$liste_valeur.','.$d[$i];
    }
    }
    $r1 = mysql_query('select id_cmd from commande where id_cmd in ('.$liste_valeur.')');
    	$nombre = mysql_num_rows($r1);
    	if($nombre){
    	while($tab_r1 = mysql_fetch_array($r1)){
    	echo $tab_r1['id_cmd'].'<br>';
    		}
    	}
    ?>

  17. #17
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Le pb, c'est la gestion des ',' qui est pas bonne ici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     $liste_valeur='';
    for($i=0; $i<sizeof($d); $i++)
    	{
    	echo $d[$i].'<br>'; //Pour test
     
    $liste_valeur=$liste_valeur.','.$d[$i];
    }
    Tu auras une ',' en premier !!!!
    Il faut virer la première virgule ... par exemple une fonction str (voir manuel)

    Edit: j'ai été trop long,,,, alors comme l'alogo de la boucle ou en utilisant substr en dernier

  18. #18
    Membre actif Avatar de arthuro45
    Profil pro
    Développeur du dimanche
    Inscrit en
    Juillet 2009
    Messages
    602
    Détails du profil
    Informations personnelles :
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur du dimanche

    Informations forums :
    Inscription : Juillet 2009
    Messages : 602
    Points : 265
    Points
    265
    Par défaut
    J'ai toujours l'erreur.

    Pourquoi tu met un séparateur ',' ? Dans $_GET["req"] je n'en ai pas, c'est de la forme (1 2 3).

  19. #19
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Les virgules, c pour la requête et la partie du IN ...

    Fait un echo de $liste_valeur et de ta requête pour que nous voyons mieux ?

    Sinon dans la boucle While j'aurais fait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $tab_r1 =mysql_fetch_array($r1, MYSQL_ASSOC))
    Car je suis pas sûr du retour $tab_r1

  20. #20
    Membre actif Avatar de arthuro45
    Profil pro
    Développeur du dimanche
    Inscrit en
    Juillet 2009
    Messages
    602
    Détails du profil
    Informations personnelles :
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur du dimanche

    Informations forums :
    Inscription : Juillet 2009
    Messages : 602
    Points : 265
    Points
    265
    Par défaut
    Le code avec tes modif. :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    <?php 
    include('connexions/connection.inc.php');
    if (isset($_GET["req"])) {$req=urldecode($_GET["req"]);} else {$req="";}
     
    $d=array($_GET["req"]);
     $liste_valeur='';
    for($i=0; $i<sizeof($d); $i++)
    	{
    	echo $d[$i].'<br>'; //Pour test
    if ($i==0)
    {	
    echo $liste_valeur=$d[$i]; 
    }
    else
    {
    $liste_valeur=$liste_valeur.','.$d[$i];
    }
    }
    echo $r1 = mysql_query('select id_cmd from commande where id_cmd in ('.$liste_valeur.')');
    	$nombre = mysql_num_rows($r1);
    	if($nombre){
    	while($tab_r1 = mysql_fetch_array($r1, MYSQL_ASSOC)) {
    	echo $tab_r1['id_cmd'].'<br>';
    		}
    	}
    ?>
    Le echo $liste_valeur=$d[$i]; ramène bien 1 2 3, par contre le echo devant la requête r1 ne ramène rien.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. boucle for sur array
    Par rebel29270 dans le forum Général JavaScript
    Réponses: 12
    Dernier message: 10/10/2011, 16h53
  2. [XSLT] Faire une boucle sur une variable [i]
    Par PoT_de_NuTeLLa dans le forum XSL/XSLT/XPATH
    Réponses: 8
    Dernier message: 07/06/2010, 12h45
  3. [PHP 5.1] FPDF boucle sur array
    Par arthuro45 dans le forum Langage
    Réponses: 4
    Dernier message: 21/10/2009, 20h08
  4. L'installation d'XP boucle sur elle-même
    Par pf106 dans le forum Windows XP
    Réponses: 13
    Dernier message: 20/08/2005, 14h55
  5. [MFC] Boucle sur un bouton
    Par karl3i dans le forum MFC
    Réponses: 6
    Dernier message: 17/02/2004, 11h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo