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 :

Requêtes SQL paramétrée avec un array()


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2007
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2007
    Messages : 197
    Points : 47
    Points
    47
    Par défaut Requêtes SQL paramétrée avec un array()
    Bonjour à tous,

    J'ai une zone de selection multiple via laquelle je selectionne plusieurs valeurs que je récupére dans un tableau:

    Voila ma zone de selection multiple :
    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
     
    <select name="lstbox1" id="one" size="5" multiple="multiple"STYLE="height:150; width:400 ; color:#606060; face:arial; font-weight:bold;"ondblclick="bascule(this,'two')" >
    <?php
    //on recupere le champs Code groupe et libelle client 
    $champs1=$result->Fields(0);
    $champs2=$result->Fields(1);
    // on affiche le resultat dans la zone de selection multiple 
    while (!$result->EOF) 
    {
    	echo "<option value=".$champs1->value.">".$champs1->value." <b>|</b> ".$champs2->value."</option>";
    $result->MoveNext();
    }
    ?>
    </select>
    <!-- Les valeurs seléctionnées sont basculer sur ce <select multiple> -->
    <select name="code_groupe[]" id="two" ondblclick="bascule(this,'one')"STYLE="height:150 ; width:400; color:#ff0000; face:arial; " multiple="multiple" size="9"> 
    </select>

    Ensuite je récupere les valeurs selectionnées :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    if(isset($_POST['code_groupe']))
    {
    $code_groupe = $_POST['code_groupe'];
    $nb1 = count($code_groupe);
    }
    else 
    $code_groupe = "";

    Les valeurs que j'ai récupérer sont dans mon tableau $code_groupe!
    Ma question est comment puis-je les passer en paramètre dans une requete SQL :

    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT * FROM matable 
    where champs= '$code_groupe[1]' 
    OR champs= '$code_groupe[2]'
    ...etc

    Merci d'avance pour votre aide

  2. #2
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 099
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 099
    Points : 8 208
    Points
    8 208
    Billets dans le blog
    17
    Par défaut
    Si est un tableau alors tu peux faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql .= 'WHERE champ IN(' . implode(', ', $_POST['code_groupe'] . ')' ;
    Ce qui créera un WHERE du type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE champ IN(123, 234, 876)
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  3. #3
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2007
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2007
    Messages : 197
    Points : 47
    Points
    47
    Par défaut
    Merci pour ta réponse Séb !

    Effectivement je crois que cette solution me conviendrais mais j'ai un souci de syntaxe un ";" ou une cote en tro...

  4. #4
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 099
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 099
    Points : 8 208
    Points
    8 208
    Billets dans le blog
    17
    Par défaut
    Bout de script ?
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  5. #5
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2007
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2007
    Messages : 197
    Points : 47
    Points
    47
    Par défaut
    Voici ma requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $requete = ' SELECT  mes_champs				
    			FROM mes_tables					
    			WHERE WRKPCSDTA1_OMA_HISCOM.BCCDZA IN(' . implode(', ', $_POST['code_groupe'] .')		
    			GROUP BY mes_champs
    			';
    et l'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Parse error: syntax error, unexpected ';' in G:\ISD\BDD MySQL\EasyPHP-5.3.3\www\Applicom\connexion_access.php on line 49
    Qui correspond au point virgule en bout de requete

  6. #6
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 099
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 099
    Points : 8 208
    Points
    8 208
    Billets dans le blog
    17
    Par défaut
    Manque la parenthèse fermante du implode( ).
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  7. #7
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2007
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2007
    Messages : 197
    Points : 47
    Points
    47
    Par défaut
    effectivement avec la parenthese je n'ai plus l'erreur

    Mais par contre j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    Data type mismatch in criteria expression

  8. #8
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 099
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 099
    Points : 8 208
    Points
    8 208
    Billets dans le blog
    17
    Par défaut
    Quel type de données pour WRKPCSDTA1_OMA_HISCOM.BCCDZA ?
    Si chaînes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE WRKPCSDTA1_OMA_HISCOM.BCCDZA IN("' . implode('", "', $_POST['code_groupe']) . '")
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  9. #9
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2007
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2007
    Messages : 197
    Points : 47
    Points
    47
    Par défaut
    Mon champs est une chaine , j'ai fait la modification que tu m'a dit mais ya un truc qui cloche !
    Voila ma requete complete :

    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
     
    $requete = ' SELECT 
    					WRKPCSDTA1_OMA_HISCOM.PERIODE, 
    					WRKPCSDTA1_OMA_HISCOM.BCCDZA AS Code_Groupe, 
    					WRKPCSDTA1_OMA_HISCOM.BCAN8X AS Compte_Client, 
    					WRKPCSDTA1_OMA_HISCOM.BCB3CD AS N°_Liasse, 
    					WRKPCSDTA1_OMA_HISCOM.BCB4CD AS Liasse_Rattachée, 
    					WRKPCSDTA1_OMA_HISCOM.BCCRTX AS Signataire,
    					WRKPCSDTA1_OMA_HISCOM.BCCPNB AS Nb_Terminaux, 
    					WRKPCSDTA1_OMA_HISCOM.BCCONB AS Nb_Lignes, 
    					WRKPCSDTA1_OMA_HISCOM.BCCQNB AS Nb_Accessoires, 
    					WRKPCSDTA1_OMA_HISCOM.BCEBNB AS Nb_Cartes_SIM, 
    					WRKPCSDTA1_OMA_HISCOM.BCCQTX AS Référence_Commandes, 
    					WRKPCSDTA1_OMA_HISCOM.BCB1CD AS Type_Commandes ,
    					TABLE_PROFIL.Profil_Dise,
    					Tb_statut_cdes.Code_statut
     
    				FROM (WRKPCSDTA1_OMA_HISCOM INNER JOIN Tb_statut_cdes ON WRKPCSDTA1_OMA_HISCOM.BHCNST = Tb_statut_cdes.Code_statut) 
    					INNER JOIN TABLE_PROFIL ON WRKPCSDTA1_OMA_HISCOM.BHCKZJ = TABLE_PROFIL.Profil_DISE
    				WHERE WRKPCSDTA1_OMA_HISCOM.BCCDZA IN("' . implode('", "', $_POST['code_groupe']) . '") 
     
    				GROUP BY WRKPCSDTA1_OMA_HISCOM.PERIODE, WRKPCSDTA1_OMA_HISCOM.BCCDZA, WRKPCSDTA1_OMA_HISCOM.BCAN8X, 
    				WRKPCSDTA1_OMA_HISCOM.BCB3CD, WRKPCSDTA1_OMA_HISCOM.BCB4CD, WRKPCSDTA1_OMA_HISCOM.BCCRTX, 
    				WRKPCSDTA1_OMA_HISCOM.BCCPNB, WRKPCSDTA1_OMA_HISCOM.BCCONB, WRKPCSDTA1_OMA_HISCOM.BCCQNB, 
    				WRKPCSDTA1_OMA_HISCOM.BCEBNB, WRKPCSDTA1_OMA_HISCOM.BCCQTX, WRKPCSDTA1_OMA_HISCOM.BCB1CD,TABLE_PROFIL.Profil_Dise,Tb_statut_cdes.Code_statut
    et lerreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Too few parameters. Expected 1

  10. #10
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 099
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 099
    Points : 8 208
    Points
    8 208
    Billets dans le blog
    17
    Par défaut
    Si tu affiches la requête le IN( ) est vide ou pas ?
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  11. #11
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2007
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2007
    Messages : 197
    Points : 47
    Points
    47
    Par défaut
    c'est à dire l'afficher ?

  12. #12
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2007
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2007
    Messages : 197
    Points : 47
    Points
    47
    Par défaut
    Ah oui j'ai afficher ma requete et les valeur que je selectionne sont bien mis en parametre dans ma requete :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    IN("000472","000352")

  13. #13
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2007
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2007
    Messages : 197
    Points : 47
    Points
    47
    Par défaut
    En faite j'ai trouvé mon probleme
    il faut que je remplace :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    IN("000472","000352")
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    IN('000472','000352')
    Voila un petit rappel de l'alimentation de ma clause where

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    where mon_champs IN("' . implode('","', $code_groupe) . '")
    Serait-tu comment faire seb ?

  14. #14
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 099
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 099
    Points : 8 208
    Points
    8 208
    Billets dans le blog
    17
    Par défaut
    Remplate les " par des \'

    Quel SGBD utilises-tu ?
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

Discussions similaires

  1. requête sql paramétrée avec clause like et astérisque %
    Par adelneo dans le forum Bases de données
    Réponses: 8
    Dernier message: 21/01/2011, 18h10
  2. Requête SQL query avec paramètre non représentable graphiquement
    Par bimone dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 10/08/2009, 17h26
  3. Réponses: 3
    Dernier message: 12/12/2008, 08h05
  4. Réponses: 3
    Dernier message: 04/06/2007, 12h29
  5. Réponses: 4
    Dernier message: 17/02/2007, 15h11

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