Requête SQL inserer plusieurs enregistrements

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par webac, 21 Mai 2008.

  1. webac
    webac WRInaute occasionnel
    Inscrit:
    4 Mars 2005
    Messages:
    385
    J'aime reçus:
    0
    Bonjour, je souhaite pouvoir inserer plusieurs enregistrement dans ma table avec une seule requête voici mon code :

    Code:
    <? 
    
    include ('connexion.php');
    $ids = @implode(',' , $_POST['commande']) ;
    $stock = @implode(',', $_POST['stock']) ;
    $qte = @implode(',', $_POST['qte']) ;
    $magasin = @implode(',', $_POST['magasin']) ;
    
    $sql = "INSERT INTO lignedecommande ('produit', 'magasin', 'stock', 'qte') VALUES ('$ids','$magasin', '$stock', '$qte')" ;
    
    mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error()); 
    
    echo '<center><font color="red" size ="14">Commande transmise avec succès.</center></font>'; 
    
    ?>
    Actuellement j'obtiens ceci :

    Code:
    Erreur SQL !INSERT INTO lignedecommande ('produit', 'magasin', 'stock', 'qte') VALUES ('ABRICOT,AUBERGINE,AVOCAT,BANANE,BREABURN,CANADA PLATEAU 1 RANG,CAROTTE,CERISE,CHANTECLERC PLATEAU 1 RANG,CHOU FLEUR,CHOUX BLANC,CITRON,CONCOMBRE,COURGETTE,ENDIVES SACHET 1KG,ENDIVES VRAC,FENOUIL,GALA PLATEAU IMPORT 3 RANG,GOLDEN PLATEAU 1 RANG,GOLDEN SACHET,GRANY PLATEAU IMPORT 3 RANG,KIWI,LAITUE ICEBERG,MACHE,MANGUE,MELON VERT,MELON CHARENTAIS,MELON GALIA,MELON JAUNE,NASHI,NAVET,NECTARINE,OIGNON BLANC FILET,OIGNON ROUGE FILET,ORANGE FLT,ORANGE VRAC,PACKAMS PLATEAU,PASTEQUE,PECHE,PIMENT VERT,PINK LADY PLATEAU 1 RANG,POIRE CONFERENCE,POIREAU,POIVRON ROUGE,POIVRON VERT,POMELOS,POMME DE TERRE VRAC,PRUNE ROUGE,RAISIN BLANC,RAISIN NOIR RED GLOBE,RED PLATEAU IMPORT 3 RANG,ROUGE SACHET,TOMATE,TOMATE CERISE BARQUETTE,TOMATE COCKTAIL 500G,TOMATE GRAPPE','test,test,test,test,test,test,test,test,test,test,test,test,test,test,test,test,test,test,test,test,test,test,test,test,test,test,test,test,test,test,test,test,test,test,test,test,test,test,test,test,test,test,test,test,test,test,test,test,test,test,test,test,test,test,test,test', '1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0', '2,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0')
    Erreur de syntaxe près de ''produit', 'magasin', 'stock', 'qte') VALUES ('ABRICOT,AUBERGINE' à la ligne 1
    comment coder pour pouvoir inserer tous ces enregistrement en une seule fois?

    Merci de votre aide
     
  2. BadProcESs
    BadProcESs WRInaute passionné
    Inscrit:
    28 Juillet 2003
    Messages:
    1 821
    J'aime reçus:
    0
    Le mieux est encore d'ouvrir un recordset editable (avec un transaction), et de faire une boucle pour insérer tes enregistrements.
     
  3. webac
    webac WRInaute occasionnel
    Inscrit:
    4 Mars 2005
    Messages:
    385
    J'aime reçus:
    0
    peux tu m'expliquer plus en détail car je n'ai pas bien saisi ta réponse étant débutant en php j'avoue que je ne comprends pas trop.
    Merci
     
  4. Bacteries
    Bacteries WRInaute passionné
    Inscrit:
    27 Mai 2004
    Messages:
    1 253
    J'aime reçus:
    0
    webac> Tu mets tes variables dans des tableaux. Tu fais une boucle et à chaque passage de la boucle tu créé un enregistrement dans la base de données.
     
  5. webac
    webac WRInaute occasionnel
    Inscrit:
    4 Mars 2005
    Messages:
    385
    J'aime reçus:
    0
    un p'tit bout de code peut être pour me mettre sur la piste?
     
  6. UsagiYojimbo
    UsagiYojimbo WRInaute accro
    Inscrit:
    23 Novembre 2005
    Messages:
    12 018
    J'aime reçus:
    133
    Sinon la syntaxe pour faire de l'insert multiple, il me semble que c'est plutôt comme ça :

    Code:
    INSERT INTO table (a,b,c) VALUES (1,2,3),(4,5,6)
    
     
  7. webac
    webac WRInaute occasionnel
    Inscrit:
    4 Mars 2005
    Messages:
    385
    J'aime reçus:
    0
    C'est exactement ce que j'essaye de reproduire grace aux implode UsagiYojimbo mais apparament ce n'est pas bon si vous avez une autre piste à me fournir j'en seraiqs très heureux.
     
  8. Bacteries
    Bacteries WRInaute passionné
    Inscrit:
    27 Mai 2004
    Messages:
    1 253
    J'aime reçus:
    0
    En supposant que tes variables soit des tableaux bien en forme & cie (exemple avec juste commande, et stock).

    Code:
    $ok=0;
    $ko=0;
    for ($i = 0; $i < sizeof($_POST['commande']); $i++) {
        $sql = "INSERT INTO lignedecommande ('produit', 'magasin', 'stock', 'qte') VALUES ('" . $_POST['commande'][$i] . "','$magasin', '" . $_POST['stock'][$i] . "', '$qte')" ;
    
    if (mysql_query($sql))
    { 
       $ok++
    } else {
        $ko++
    }
    }
    
     
  9. UsagiYojimbo
    UsagiYojimbo WRInaute accro
    Inscrit:
    23 Novembre 2005
    Messages:
    12 018
    J'aime reçus:
    133
    En fait le souci vient de ton implode.

    Toi ce que tu fais c'est plutôt ça au final :

    Code:
    INSERT INTO table (a,b,c) VALUES ('1,2,3','4,5,6') 
    
    Donc normal que ça marche pas.
     
  10. webac
    webac WRInaute occasionnel
    Inscrit:
    4 Mars 2005
    Messages:
    385
    J'aime reçus:
    0
    ok merci à tous je vais essayer de me débrouiller avec tous ces bons conseils.
     
  11. webac
    webac WRInaute occasionnel
    Inscrit:
    4 Mars 2005
    Messages:
    385
    J'aime reçus:
    0
    pouvez vous me donner un petit coup de main j'ai testé ton code Bacteries mais ça ne fonctionne pas quand je fais un echo de $ok j'obtiens 0 et quand je fais un echo $ko j'obtiens 56.
     
  12. Bacteries
    Bacteries WRInaute passionné
    Inscrit:
    27 Mai 2004
    Messages:
    1 253
    J'aime reçus:
    0
    Tu as bien 56 élément dans ton tableau?
    Fais des écho de ta requête et teste là sous phpmyadmin voir l'erreur SQL.
     
  13. webac
    webac WRInaute occasionnel
    Inscrit:
    4 Mars 2005
    Messages:
    385
    J'aime reçus:
    0
    j'ai bien 56 elements dans mon tableau.

    j'obtiens une erreur de syntaxe :

    Code:
    MySQL a répondu: 
    
    #1064 - Erreur de syntaxe pr�s de ''Produit', 'Mag', 'Stock', 'Qte') VALUES ('TOMATE GRAPPE','test'' � la ligne 1 
     
  14. Bacteries
    Bacteries WRInaute passionné
    Inscrit:
    27 Mai 2004
    Messages:
    1 253
    J'aime reçus:
    0
    Enlève les ' dans la liste des colonnes. Ou mets y des antiquote ( ` ) à la place.
     
  15. webac
    webac WRInaute occasionnel
    Inscrit:
    4 Mars 2005
    Messages:
    385
    J'aime reçus:
    0
    Merci Bacteries ça fonctionne impec!

    et merci également a tous les autres et a WRI biensur!
     
  16. webac
    webac WRInaute occasionnel
    Inscrit:
    4 Mars 2005
    Messages:
    385
    J'aime reçus:
    0
    dernier petit problème que je viens de constater les données s'inserent en double dans ma table, savez vous d'ou cela peut provenir?
     
  17. Bacteries
    Bacteries WRInaute passionné
    Inscrit:
    27 Mai 2004
    Messages:
    1 253
    J'aime reçus:
    0
    T'as fais F5? Les données sont en double dans ton tableau? T'appelles deux fois ta requête? ...
     
  18. webac
    webac WRInaute occasionnel
    Inscrit:
    4 Mars 2005
    Messages:
    385
    J'aime reçus:
    0
    non je n'ai pas fais F5 je n'appelle pas non plus deux fois la requête voici mon code final :

    Code:
    <? 
    
    include ('connexion.php');
    
    $ok=0; 
    $ko=0; 
    for ($i = 0; $i < sizeof($_POST['commande']); $i++) { 
        $sql = "INSERT INTO lignedecommande (Produit, Mag, Stock, Qte, Date) VALUES ('" . $_POST['commande'][$i] . "','" . $_POST['magasin'][$i] . "', '" . $_POST['stock'][$i] . "', '" . $_POST['qte'][$i] . "','" . $_POST['dat'][$i] . "')" ; 
    
    if (mysql_query($sql)) 
    { 
       $ok++ ;
    } 
    else { 
        $ko++ ;
    } 
    } 
    
    
    echo '<center><font color="red" size ="14">Commande transmise avec succès.</center></font>'; 
    
    ?>
     
  19. Bacteries
    Bacteries WRInaute passionné
    Inscrit:
    27 Mai 2004
    Messages:
    1 253
    J'aime reçus:
    0
    Fais un print_r($_POST['commande']) pour voir.

    Vide ta table et relance ton script.
     
  20. webac
    webac WRInaute occasionnel
    Inscrit:
    4 Mars 2005
    Messages:
    385
    J'aime reçus:
    0
    voila ce que me retourne print_r($_POST['commande']) :

    Array ( [0] => ABRICOT [1] => AUBERGINE )

    j'ai bien abricot et aubergine en double dans ma table
     
  21. Bacteries
    Bacteries WRInaute passionné
    Inscrit:
    27 Mai 2004
    Messages:
    1 253
    J'aime reçus:
    0
    Ton code est bon (sauf si j'ai loupé un truc, mais vu la taille je doute), donc je penche pour un include fait deux fois, un script lancé deux fois, ... un problème plus haut du coup.

    Ton script est-il inclut d'une autre page?
     
  22. webac
    webac WRInaute occasionnel
    Inscrit:
    4 Mars 2005
    Messages:
    385
    J'aime reçus:
    0
    j'ai un autre soucis en plus de ça les champs quantité et stock ne s'inserent pas dans la table pour certains articles.

    voici le code de la page du formulaire pour l'erreur de doublon :

    Code:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <script type="text/javascript">
    function Check_all(container_id,state)
     {
      var checkboxes = document.getElementById(container_id).getElementsByTagName('input');
      for (var i=0;i<checkboxes.length;i++)
       {
        if(checkboxes[i].type == 'checkbox')
         {
          checkboxes[i].checked = state;
         }
       }
      return true;
     }
    </script>
    <script langage='javascript'>
    function Cloturer(){
    document.forms['form1'].action ='commande2.php';
    document.forms['form1'].submit();
    }
    </script>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <title>Commande</title>
    </head>
    <body>
      
    <div align="left">
      <? include ('connexion.php'); ?>
      <div align="left"> 
      <form id="form1" name="form1" method="post" target="_self">
       <table width="50%" border="1" align="center" bordercolor="#FFFFFF" style="border: 1 solid #FFFFFF">
      
       <br />
    </div>
    <td bgcolor="#5389EE" class="intitule Style5"><div align="left">    <span class="Style6">Produits<br />
            <span class="Style8">Cochez les produits que vous souhaitez commander puis saississez votre stock et la quantit&eacute; souhait&eacute;e.</span></span></div></td>
      <td bgcolor="#5389EE" class="intitule Style3"><div align="left">	      <b>En Stock</b>
      </div></td>
      <td bgcolor="#5389EE" class="intitule Style2"><div align="left" class="Style3">	      <b>Quantité</b>
      </div></td>
        <div align="left">
          <span class="Style2">
          <?php
    $date = date("Y-m-d"); 
    $magasin= exec('echo %username%');
    $sql = "SELECT * from produits WHERE 1 ORDER BY lib ASC";
    
    $resultat = mysql_query ($sql);
    
    $nblignes = mysql_num_rows($resultat); 
    $i = 0;
    while ($cl = mysql_fetch_array ($resultat))
    {
    
    $couleur = "#5389EE";
    $i++;
    
    	if ($i % 2 ==1)
    	{
    	$couleur = "#0066CC";
    	}
      $lib  = $cl['lib'];
      $id   = $cl['id'];
      
      echo "<tr BGCOLOR=$couleur>";
      echo "<td><input type='checkbox' name='commande[]' value='$lib' /><font size=2 color=white><b>$lib<b>
      <input type='hidden' name='magasin[]' value='$magasin' />
      <input type='hidden' name='dat[]' value='$date' /></font></td>";
      echo "<td><font size=2 color=white><b><input type='text' name='stock[]' size='2' /></font></td>";
      echo "<td><font size=2 color=white><b><input type='text' name='qte[]' size='2'/></font></td>";
      echo "</tr>";
    }
    
    echo "</table>";
    mysql_close()
    ?>
          </span><br />
        </div>
        <div align="center">Cliquez sur l'icone pour valider la commande<input name="Submit" type="image" src="good.gif" alt="Valider la commande" align="bottom" width="20" height="20" onClick="Cloturer()" value="Valider"/>      </div>
    </body>
    </html>
    mais j'avoue que je n'ai rien trouvé.
     
  23. Bacteries
    Bacteries WRInaute passionné
    Inscrit:
    27 Mai 2004
    Messages:
    1 253
    J'aime reçus:
    0
    Etrange...

    Change le nom de ta variable avec la requête pour voir. Change d'abord $sql = en $req =
    Test, regarde si ça plante et/ou si t'as encore des enregistrement qui s'ajoute.

    Puis change le mysql_query($sql) en mysql_query($req), retest.

    Ca sent l'erreur bête mais chiante à trouver.
     
  24. webac
    webac WRInaute occasionnel
    Inscrit:
    4 Mars 2005
    Messages:
    385
    J'aime reçus:
    0
    toujours pareil enregistrement en double très chiant comme tu dis.
    je vais m'arracher les cheveux si ça continue
     
  25. Bacteries
    Bacteries WRInaute passionné
    Inscrit:
    27 Mai 2004
    Messages:
    1 253
    J'aime reçus:
    0
    Quand tu as changé que le nom de ta requete :
    Code:
    $req = "INSERT INTO lignedecommande (Produit, Mag, Stock, Qte, Date) VALUES ('" . $_POST['commande'][$i] . "','" . $_POST['magasin'][$i] . "', '" . $_POST['stock'][$i] . "', '" . $_POST['qte'][$i] . "','" . $_POST['dat'][$i] . "')" ;
    
    if (mysql_query($sql)) 
    
    Ca à quand même planté? (ou au moins rien enregistré)
     
  26. webac
    webac WRInaute occasionnel
    Inscrit:
    4 Mars 2005
    Messages:
    385
    J'aime reçus:
    0
    ca a planté :

    Code:
    Notice: Undefined variable: sql in c:\program files\easyphp1-8\www\mondossier\commande2.php on line 9
    répété 56 fois.

    je viens de trouver quelque chose d'interessant mais je n'arrive pas a le mettre en place si tu peux m'aider regarde cette adresse : http://www.presence-pc.com/forum/pp...nsert-mysql-insertion-double-sujet-3392-1.htm

    effectivement sur firefox je n'ai pas le problème mais sur IE oui!
     
  27. webac
    webac WRInaute occasionnel
    Inscrit:
    4 Mars 2005
    Messages:
    385
    J'aime reçus:
    0
    c'est bon ça fonctionne j'ai remplacé :

    Code:
    <input name="Submit" type="image" src="good.gif" alt="Valider la commande" align="bottom" width="20" height="20" onClick="Cloturer()" value="Cloturer">
    par :
    Code:
    <img style="cursor: pointer" src="good.gif" onClick="Cloturer();">
    et ça passe nickel sur FF et IE

    Merci pour ton aide Bacteries!
     
  28. Bacteries
    Bacteries WRInaute passionné
    Inscrit:
    27 Mai 2004
    Messages:
    1 253
    J'aime reçus:
    0
    Ah oui, sous IE ton formulaire était soumis deux fois!

    Pfiouuuu
     
Chargement...
Similar Threads - Requête SQL inserer Forum Date
Réunir 2 requetes sql (ORDER BY ASC et DESC) Développement d'un site Web ou d'une appli mobile 29 Août 2021
encodage texte sur requete mysql Demandes d'avis et de conseils sur vos sites 21 Octobre 2020
Requête MySql imbriquée Développement d'un site Web ou d'une appli mobile 8 Octobre 2020
Prestashop - Comportement bizarre d'une requête SQL e-commerce 1 Décembre 2018
Requête Mysql avec des string Développement d'un site Web ou d'une appli mobile 6 Février 2018
La syntaxe SQL permet-elle plusieurs mots-clefs dans une (sous-)requête identique ? Développement d'un site Web ou d'une appli mobile 17 Août 2017
Requete mysql Développement d'un site Web ou d'une appli mobile 30 Mai 2017
Problème requête mysql Développement d'un site Web ou d'une appli mobile 1 Mars 2017
Reduire et optimiser une requete sql Développement d'un site Web ou d'une appli mobile 8 Décembre 2016
Anomalie : beaucoup trop de requêtes SQL Administration d'un site Web 18 Novembre 2016
Besoin d'aide pour requête SQL PHP Développement d'un site Web ou d'une appli mobile 12 Novembre 2016
[php/mysql] Eviter de faire 20 requêtes pour un affichage Développement d'un site Web ou d'une appli mobile 19 Janvier 2016
requete Mysql et classement des résultats Administration d'un site Web 1 Novembre 2015
Mysql requête imbriquée Développement d'un site Web ou d'une appli mobile 1 Octobre 2015
Requetes SQL parfois lente : Selon show profile -> Pb opening table Développement d'un site Web ou d'une appli mobile 8 Juillet 2015
PDO Comment vérifier le SQL d'une Requête ??? Développement d'un site Web ou d'une appli mobile 4 Février 2015
Demande Requête SQL Développement d'un site Web ou d'une appli mobile 19 Janvier 2015
[MySQL] Requête SELECT et INSERT entre 3 tables liées+Aide Développement d'un site Web ou d'une appli mobile 30 Avril 2014
Redirection htaccess ou requête sql ? Netlinking, backlinks, liens et redirections 18 Janvier 2014
requete sql avec critère provenant d'un formulaire Développement d'un site Web ou d'une appli mobile 3 Juillet 2013