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 :

Executer plusieurs requetes sql


Sujet :

PHP & Base de données

  1. #1
    Membre éclairé
    Inscrit en
    Février 2007
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 271
    Par défaut Executer plusieurs requetes sql
    Salut

    Dans le cadre d'un projet web scolaire , je rencontres un soucis afin d'exécuter plusieurs requetes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for($i=0; $i<$NB_ING;$i++)
    {		
    $sql="INSERT INTO composede VALUES($MAX_ID,(SELECT id FROM ingredient WHERE nom_in='$_POST['choix_ingredient'][$i]')) ";
    			$req= mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
    }
    $NB_ING est est un "count" des différentes checkbox sélectionnés.

    En fait , je dois en fonction du nombre d'ingrédients sélectionnés(via checkbox) , insérer les différents tuples de la table "composede" ou un identifiant modèle correspond à un ou des identifiants ingrédients.


    Cela est sensé fonctionné avec ma requete mais j'ai ce message d'erreur malheuresement :

    Parse error: parse error, expecting `T_STRING' or `T_VARIABLE' or `T_NUM_STRING' in d:\www3\traitementajoutermodele.php on line 69

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Petit probleme de concatenation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql="INSERT INTO composede VALUES($MAX_ID,(SELECT id FROM ingredient WHERE nom_in='" . $_POST['choix_ingredient'][$i] ."')) ";
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre éclairé
    Inscrit en
    Février 2007
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 271
    Par défaut
    Et maintenant j'ai ce message que j'avais déja vu d'ailleurs :

    Erreur SQL !INSERT INTO composede VALUES(23,(SELECT id FROM ingredient WHERE nom_in='tomate'))

    Le champ 'idIngredient' ne peut être vide (null)


    quand j'affiches la variable $NB_ING , j'ai bien 2 affiché lors de ma sélection de 2 ingrédients.

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    C'est quoi les champs de ta table composede ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre éclairé
    Inscrit en
    Février 2007
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 271
    Par défaut
    la table "composede" possèdes 2 champs :

    -IdModele : qui correspond à l'identifiant de la table modèle (et ou dans mon cas , je le traites avec le max id puisqu'avant je fais une insertion dans la table modele)

    -IdIngredient: qui correspond à l'identifiant d'un ingrédient.


    Et dans cette instruction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE nom_in='" . $CHOIX_INGREDIENT[$i] ."'
    Je voudrais qu'il récupères l'ID de l'ingrédient en fonction du nom ce l'ingrédient et surtout en fonction du nombre d'ingrédients sélectionnés (géré par ma variable : $NB_ING=count($_POST['tab'])

    Si un autre solution (ce qui est évident) pour que cela fonctionnes , n'hésitez pas.

  6. #6
    Membre éclairé
    Inscrit en
    Février 2007
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 271
    Par défaut
    Le problème doit certainement venir de ma 2e requete imbriqué pour le champ "idingredient".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    for($i=0; $i<$NB_ING;$i++)
    {		
     
    $sql = "SELECT id FROM ingredient WHERE nom_in='" . $CHOIX_INGREDIENT[$i] ."' ";
     
    $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
     
    $total = mysql_num_rows($req);				
    while($data = mysql_fetch_array($req)) 
    {
    								echo $data["id"];
    }
    }
    Puisque la , je n'ai pas ma liste d'ID affiché , je n'ai rien.

    Donc cela veut dire que ma requete imbriqué sensé renvoyer l'ID Ingrédient ne fonctionnes pas , il renvoie un "vide" et d'ou cette erreur qu'il peut pas insérer de l'espace dans le champ not null.

    Pourtant lorsque je fais mon for pour afficher mes noms d'ingrédients , il me les affiches. alala , c'est sacrément embétant ça...


    J'ai essaye d'une autre façon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = "INSERT INTO composede SELECT max(modele.id),ingredient.id FROM modele,ingredient WHERE nom_in='" . $_POST['tab'][$i] ."' group by ingredient.id ";
    La je n'ai pas de message d'erreur , mais hélas , il ne se passe rien.

    j'ai remarqué que lorsque je fais la requete à la main dans phpmyadmin avec un nom d'ingrédient, cela fonctionnes.

    Le problème ne peut venir que de la :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE nom_in='" . $_POST['tab'][$i] ."'
    puisque lorsque je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $sql = "INSERT INTO composede SELECT max(modele.id),ingredient.id FROM modele,ingredient WHERE nom_in='oeuf' group by ingredient.id "; 
    						$req= mysql_query($sql) or die('Erreur SQL ! '.$sql.'<br>'.mysql_error());
    L'insertion se réalise

    Si quelqu'un sait , son aide me serait la bienvenue.

    Ou une autre solution pour contourner le problème , c'est pour récupérer plusieurs valeurs de checkbox pour ensuite les insérer dans une table , c'est à un peu près l'idée...

Discussions similaires

  1. [AC-2013] Programmer une execution de plusieurs requetes sql suivant certaines conditions
    Par JRTConcept dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 27/01/2015, 22h20
  2. [SQL] Executer plusieurs requete sql
    Par fadex dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 14/02/2007, 15h08
  3. Réponses: 2
    Dernier message: 23/11/2006, 14h02
  4. [VBA-E] Temps d'execution de requetes SQL tres long
    Par Tartenpion dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 31/03/2006, 10h25
  5. Pb d'execution de requete sql
    Par Crazynoss dans le forum ASP
    Réponses: 2
    Dernier message: 11/05/2005, 10h19

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