Requête SQL inserer plusieurs enregistrements

Consultez la formation au référencement naturel Google de WebRankInfo / Ranking Metrics


webac
WRInaute impliqué
WRInaute impliqué
 
Messages: 359
Inscription: Ven Mar 04, 2005 17:30

Requête SQL inserer plusieurs enregistrements

Message le Mer Mai 21, 2008 8:09

Bonjour, je souhaite pouvoir inserer plusieurs enregistrement dans ma table avec une seule requête voici mon code :

Code: Tout sélectionner
<?

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: Tout sélectionner
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


BadProcESs
WRInaute accro
WRInaute accro
 
Messages: 2656
Inscription: Lun Juil 28, 2003 15:58

Message le Mer Mai 21, 2008 8:16

Le mieux est encore d'ouvrir un recordset editable (avec un transaction), et de faire une boucle pour insérer tes enregistrements.


webac
WRInaute impliqué
WRInaute impliqué
 
Messages: 359
Inscription: Ven Mar 04, 2005 17:30

Message le Mer Mai 21, 2008 8:18

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


Bacteries
WRInaute accro
WRInaute accro
 
Messages: 1333
Inscription: Jeu Mai 27, 2004 13:04

Message le Mer Mai 21, 2008 8:19

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.


webac
WRInaute impliqué
WRInaute impliqué
 
Messages: 359
Inscription: Ven Mar 04, 2005 17:30

Message le Mer Mai 21, 2008 8:21

un p'tit bout de code peut être pour me mettre sur la piste?


UsagiYojimbo
WRInaute accro
WRInaute accro
 
Messages: 5189
Inscription: Mer Nov 23, 2005 10:38

Message le Mer Mai 21, 2008 8:25

Sinon la syntaxe pour faire de l'insert multiple, il me semble que c'est plutôt comme ça :

Code: Tout sélectionner
INSERT INTO table (a,b,c) VALUES (1,2,3),(4,5,6)


webac
WRInaute impliqué
WRInaute impliqué
 
Messages: 359
Inscription: Ven Mar 04, 2005 17:30

Message le Mer Mai 21, 2008 8:38

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.


Bacteries
WRInaute accro
WRInaute accro
 
Messages: 1333
Inscription: Jeu Mai 27, 2004 13:04

Message le Mer Mai 21, 2008 8:48

En supposant que tes variables soit des tableaux bien en forme & cie (exemple avec juste commande, et stock).

Code: Tout sélectionner
$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++
}
}


UsagiYojimbo
WRInaute accro
WRInaute accro
 
Messages: 5189
Inscription: Mer Nov 23, 2005 10:38

Message le Mer Mai 21, 2008 8:50

webac a écrit: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.


En fait le souci vient de ton implode.

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

Code: Tout sélectionner
INSERT INTO table (a,b,c) VALUES ('1,2,3','4,5,6')


Donc normal que ça marche pas.


webac
WRInaute impliqué
WRInaute impliqué
 
Messages: 359
Inscription: Ven Mar 04, 2005 17:30

Message le Mer Mai 21, 2008 9:00

ok merci à tous je vais essayer de me débrouiller avec tous ces bons conseils.


webac
WRInaute impliqué
WRInaute impliqué
 
Messages: 359
Inscription: Ven Mar 04, 2005 17:30

Message le Mer Mai 21, 2008 10:11

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.


Bacteries
WRInaute accro
WRInaute accro
 
Messages: 1333
Inscription: Jeu Mai 27, 2004 13:04

Message le Mer Mai 21, 2008 10:15

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.


webac
WRInaute impliqué
WRInaute impliqué
 
Messages: 359
Inscription: Ven Mar 04, 2005 17:30

Message le Mer Mai 21, 2008 10:20

j'ai bien 56 elements dans mon tableau.

j'obtiens une erreur de syntaxe :

Code: Tout sélectionner
MySQL a répondu:

#1064 - Erreur de syntaxe pr�s de ''Produit', 'Mag', 'Stock', 'Qte') VALUES ('TOMATE GRAPPE','test'' � la ligne 1


Bacteries
WRInaute accro
WRInaute accro
 
Messages: 1333
Inscription: Jeu Mai 27, 2004 13:04

Message le Mer Mai 21, 2008 10:32

Enlève les ' dans la liste des colonnes. Ou mets y des antiquote ( ` ) à la place.


webac
WRInaute impliqué
WRInaute impliqué
 
Messages: 359
Inscription: Ven Mar 04, 2005 17:30

Message le Mer Mai 21, 2008 10:34

Merci Bacteries ça fonctionne impec!

et merci également a tous les autres et a WRI biensur!

Requête SQL inserer plusieurs enregistrements

Formation recommandée sur ce thème :

Formation Référencement naturel Google : apprenez une méthode efficace pour optimiser à fond le référencement naturel dans Google de façon durable... Formation animée par Olivier Duffez et Fabien Facériès, experts en référencement naturel.

Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Yahoo [Bot] et 0 invités