requête insertion dans 02 tables mysql

Petit nouveau ! | 9 Messages

19 sept. 2018, 07:34

bonjour,
j'aimerai faire une insertion dans 02 tables sur la base d'un formulaire, mais j'ai des erreurs en retour, je vous prie de m'aider, il s'agit de mon application de fin de stage.

Code : Tout sélectionner

<?php require_once "dbconfig.php"; if (isset($_POST['save'])) { $nomclient= isset($_POST['nomclient'])?$_POST['nomclient']:''; $nomtransporteur= isset($_POST['nomtransporteur'])?$_POST['nomtransporteur']:''; $nomconducteur= isset($_POST['nomconducteur'])?$_POST['nomconducteur']:''; $numero= isset($_POST['numero'])?$_POST['numero']:''; $date= isset($_POST['date'])?$_POST['date']:''; $typelettre= isset($_POST['typelettre'])?$_POST['typelettre']:''; $immatracteur= isset($_POST['immatracteur'])?$_POST['immatracteur']:''; $immaremorque= isset($_POST['immaremorque'])?$_POST['immaremorque']:''; $natureproduit= isset($_POST['natureproduit'])?$_POST['natureproduit']:''; $essence= isset($_POST['essence'])?$_POST['essence']:''; $quantitecolis= isset($_POST['quantitecolis'])?$_POST['quantitecolis']:''; $charge= isset($_POST['charge'])?$_POST['charge']:''; $provenance= isset($_POST['provenance'])?$_POST['provenance']:''; $destination= isset($_POST['destination'])?$_POST['destination']:''; $commentaire= isset($_POST['commentaire'])?$_POST['commentaire']:''; $stmt = $bdd->prepare ("INSERT INTO lettre (numero,datelettre,typelettre) VALUES (,numero, datelettre, typelettre)"); $stmt->bindParam(":numero", $numero); $stmt->bindParam(":datelettre", $datelettre); $stmt->bindParam(":typelettre", $typelettre); $stmt1 = $bdd->prepare ("INSERT INTO truck (nomclient,nomtransporteur,nomconducteur,immatracteur,immaremorque,natureproduit, essences,quantitecolis,charge,provenance,destination,commentaire) VALUES (,nomclient, nomtransporteur, nomconducteur, immatracteur, immaremorque, natureproduit, essences, quantitecolis, charge, provenance, destination, commentaire)"); $stmt1->bindParam(":nomclient", $nomclient); $stmt1->bindParam(":nomtransporteur", $nomtransporteur); $stmt1->bindParam(":nomconducteur", $nomconducteur); $stmt1->bindParam(":immatracteur", $immatracteur); $stmt1->bindParam(":immaremorque", $immaremorque); $stmt1->bindParam(":natureproduit", $natureproduit); $stmt1->bindParam(":essences", $essences); $stmt1->bindParam(":quantitecolis", $quantitecolis); $stmt1->bindParam(":charge", $charge); $stmt1->bindParam(":provenance", $provenance); $stmt1->bindParam(":destination", $destination); $stmt1->bindParam(":commentaire", $commentaire); if($stmt->execute() AND $stmt1->execute()) { echo 'Enregistrement réussi'; } else{ echo "Un souci au niveau de la requête"; } header('location:formulaire_camion.php'); die('<br>Requete Erreur !: '.$e->getMessage()); } ?>
et voici le message d'erreur

( ! ) Fatal error: in C:\wamp\www\truck_tracking\traitement.php on line 46
( ! ) PDOException: in C:\wamp\www\truck_tracking\traitement.php on line 46
Call Stack
# Time Memory Function Location
1 0.0021 378912 {main}( ) ...\traitement.php:0
2 0.0155 396904 execute ( ) ...\traitement.php:46
la ligne 46 c'est celle-ci :

Code : Tout sélectionner

if($stmt->execute() AND $stmt1->execute())
j'attends impatiemment votre soutien, merci

Mammouth du PHP | 1029 Messages

19 sept. 2018, 09:48

Il y a minimum deux erreurs dans chaque requêtes (les mêmes) :

Code : Tout sélectionner

$stmt = $bdd->prepare ("INSERT INTO lettre (numero,datelettre,typelettre) VALUES ([b],[/b]numero, datelettre, typelettre)");
La virgule après VALUES est à supprimer

Il faut mettre deux points dans les jokers de values

Code : Tout sélectionner

$stmt = $bdd->prepare ("INSERT INTO lettre (numero,datelettre,typelettre) VALUES (:numero, :datelettre, :typelettre)");
L'expérience est la somme de toutes nos erreurs.

Petit nouveau ! | 9 Messages

19 sept. 2018, 11:14

j'ai remplacé les virgules par les deux points dans les 02 requêtes, j'ai toujours la même erreur.

Mammouth du PHP | 1029 Messages

19 sept. 2018, 12:00

Heu, ce n'est pas ce que j'ai dit ou montré.

Il y a une virgule de trop et il faut mettre : devant chaque joker

exactement comme je l'ai montré.

Code : Tout sélectionner

$stmt = $bdd->prepare ("INSERT INTO lettre (numero,datelettre,typelettre) VALUES (:numero, :datelettre, :typelettre)");
L'expérience est la somme de toutes nos erreurs.

Petit nouveau ! | 9 Messages

19 sept. 2018, 12:15

c'est bien ce que j'ai fais, mais aucune evolution

Code : Tout sélectionner

$stmt = $bdd->prepare ("INSERT INTO lettre_voiture (numero,datelettre,typelettre) VALUES (:numero, :datelettre, :typelettre)"); $stmt->bindParam(":numero", $numero); $stmt->bindParam(":datelettre", $datelettre); $stmt->bindParam(":typelettre", $typelettre); $stmt1 = $bdd->prepare ("INSERT INTO truck (nomclient,nomtransporteur,nomconducteur,immatracteur,immaremorque,natureproduit, essences,quantitecolis,charge,provenance,destination,commentaire) VALUES (:nomclient, :nomtransporteur, :nomconducteur, :immatracteur, :immaremorque, :natureproduit, :essences, :quantitecolis, :charge, :provenance, :destination, :commentaire)"); $stmt1->bindParam(":nomclient", $nomclient); $stmt1->bindParam(":nomtransporteur", $nomtransporteur); $stmt1->bindParam(":nomconducteur", $nomconducteur); $stmt1->bindParam(":immatracteur", $immatracteur); $stmt1->bindParam(":immaremorque", $immaremorque); $stmt1->bindParam(":natureproduit", $natureproduit); $stmt1->bindParam(":essences", $essences); $stmt1->bindParam(":quantitecolis", $quantitecolis); $stmt1->bindParam(":charge", $charge); $stmt1->bindParam(":provenance", $provenance); $stmt1->bindParam(":destination", $destination); $stmt1->bindParam(":commentaire", $commentaire);

Mammouth du PHP | 1029 Messages

19 sept. 2018, 12:23

Une chose à la fois, exécuter juste la première requête....voir si vous êtes toujours en erreur.
L'expérience est la somme de toutes nos erreurs.

Petit nouveau ! | 9 Messages

19 sept. 2018, 12:32

j'ai toujours une erreur au niveau de cette ligne

Code : Tout sélectionner

if($stmt->execute())

Mammouth du PHP | 1029 Messages

19 sept. 2018, 12:37

je peux avoir le retour de

Code : Tout sélectionner

<?php require_once "dbconfig.php"; var_dump($bdd);
L'expérience est la somme de toutes nos erreurs.

Petit nouveau ! | 9 Messages

19 sept. 2018, 12:45

voilà ce que j'ai en retour:

( ! ) Notice: Undefined variable: dbb in C:\wamp\www\truck_tracking\traitement.php on line 6
Call Stack
# Time Memory Function Location
1 0.0057 372192 {main}( ) ...\traitement.php:0
C:\wamp\www\truck_tracking\traitement.php:6:null

( ! ) Fatal error: in C:\wamp\www\truck_tracking\traitement.php on line 31
( ! ) PDOException: in C:\wamp\www\truck_tracking\traitement.php on line 31
Call Stack
# Time Memory Function Location
1 0.0057 372192 {main}( ) ...\traitement.php:0
2 0.0509 387688 execute ( ) ...\traitement.php:31

Petit nouveau ! | 9 Messages

19 sept. 2018, 12:48

il s'agit plutôt de ceci :
C:\wamp\www\truck_tracking\traitement.php:6:
object(PDO)[1]

( ! ) Fatal error: in C:\wamp\www\truck_tracking\traitement.php on line 31
( ! ) PDOException: in C:\wamp\www\truck_tracking\traitement.php on line 31
Call Stack
# Time Memory Function Location
1 0.0027 372168 {main}( ) ...\traitement.php:0
2 0.0176 387088 execute ( ) ...\traitement.php:31

Mammouth du PHP | 1029 Messages

19 sept. 2018, 13:55

et donc ligne 31 c'est toujours if($stmt->execute()) ????
L'expérience est la somme de toutes nos erreurs.

Petit nouveau ! | 9 Messages

19 sept. 2018, 17:01

j'ai modifié mon code en ceci

Code : Tout sélectionner

<?php require_once "dbconfig.php"; //var_dump ($bdd); if (isset($_POST['save'])) { $nomclient = htmlentities($_POST['nomclient']) /*?$_POST['nomclient']:''*/; $nomtransporteur = htmlentities($_POST['nomtransporteur'])/*?$_POST['nomtransporteur']:''*/; $nomconducteur = htmlentities($_POST['nomconducteur'])/*?$_POST['nomconducteur']:''*/; $numero = htmlentities($_POST['numero'])/*?$_POST['numero']:''*/; $datelettre = htmlentities($_POST['datelettre'])/*?$_POST['date']:''*/; $typelettre = htmlentities($_POST['typelettre'])/*?$_POST['typelettre']:''*/; $immatracteur = htmlentities($_POST['immatracteur'])/*?$_POST['immatracteur']:''*/; $immaremorque = htmlentities($_POST['immaremorque'])/*$_POST['immaremorque']:''*/; $natureproduit = htmlentities($_POST['natureproduit'])/*?$_POST['natureproduit']:''*/; $essence = htmlentities($_POST['essence'])/*?$_POST['essence']:''*/; $quantitecolis = htmlentities($_POST['quantitecolis'])/*?$_POST['quantitecolis']:''*/; $charge = htmlentities($_POST['charge'])/*?$_POST['charge']:''*/; $provenance = htmlentities($_POST['provenance'])/*?$_POST['provenance']:''*/; $destination = htmlentities($_POST['destination'])/*?$_POST['destination']:''*/; $commentaire = htmlentities($_POST['commentaire'])/*?$_POST['commentaire']:''*/; try { $stmt = $bdd->prepare ("INSERT INTO lettre_voiture (numero,datelettre,typelettre) VALUES (,numero, datelettre, typelettre)"); $stmt->bindParam(":numero", $numero); $stmt->bindParam(":datelettre", $datelettre); $stmt->bindParam(":typelettre", $typelettre); $stmt1 = $bdd->prepare ("INSERT INTO truck (nomclient,nomtransporteur,nomconducteur,immatracteur,immaremorque,natureproduit, essences,quantitecolis,charge,provenance,destination,commentaire) VALUES (,nomclient, nomtransporteur, nomconducteur, immatracteur, immaremorque, natureproduit, essence, quantitecolis, charge, provenance, destination, commentaire)"); $stmt1->bindParam(":nomclient", $nomclient); $stmt1->bindParam(":nomtransporteur", $nomtransporteur); $stmt1->bindParam(":nomconducteur", $nomconducteur); $stmt1->bindParam(":immatracteur", $immatracteur); $stmt1->bindParam(":immaremorque", $immaremorque); $stmt1->bindParam(":natureproduit", $natureproduit); $stmt1->bindParam(":essence", $essence); $stmt1->bindParam(":quantitecolis", $quantitecolis); $stmt1->bindParam(":charge", $charge); $stmt1->bindParam(":provenance", $provenance); $stmt1->bindParam(":destination", $destination); $stmt1->bindParam(":commentaire", $commentaire); if($stmt->execute() AND $stmt1->execute()) { echo "<script>alert('Successfully Added..')</script>"; echo "<script>window.open('index.php','_self')</script>"; header('Location:formulaire_camion.php'); } else{ echo "Un souci au niveau de la requ�te"; header('location:formulaire_camion.php'); } }catch(PDOException $e) { echo "Erreur lors de l\'enregistrement".$e->getMessage(); } } ?>
mais j'ai toujours cette erreur : Erreur lors de l\'enregistrementSQLSTATE[42000]: Syntax error or access violation: 1064 Erreur de syntaxe pr�s de 'numero, datelettre, typelettre)' � la ligne 1

Mammouth du PHP | 1029 Messages

19 sept. 2018, 17:19

et donc rien a faire de mes remarques ? :

Code : Tout sélectionner

$stmt = $bdd->prepare ("INSERT INTO lettre_voiture (numero,datelettre,typelettre) VALUES (,numero, datelettre, typelettre)");
le virgule de VALUES (,

les deux points :
L'expérience est la somme de toutes nos erreurs.

Petit nouveau ! | 9 Messages

19 sept. 2018, 18:21

voici le nouveau code :

Code : Tout sélectionner

<?php require_once "dbconfig.php"; if (isset($_POST['save'])) { $nomclient = htmlentities($_POST['nomclient']); $nomtransporteur = htmlentities($_POST['nomtransporteur']); $nomconducteur = htmlentities($_POST['nomconducteur']); $numero = htmlentities($_POST['numero']); $datelettre = htmlentities($_POST['datelettre']); $typelettre = htmlentities($_POST['typelettre']); $immatracteur = htmlentities($_POST['immatracteur']); $immaremorque = htmlentities($_POST['immaremorque']); $natureproduit = htmlentities($_POST['natureproduit']); $essence = htmlentities($_POST['essence']); $quantitecolis = htmlentities($_POST['quantitecolis']); $charge = htmlentities($_POST['charge']); $provenance = htmlentities($_POST['provenance']); $destination = htmlentities($_POST['destination']); $commentaire = htmlentities($_POST['commentaire']); try { $stmt = $bdd->prepare ("INSERT INTO lettre_voiture (numero,datelettre,typelettre) VALUES (numero, datelettre, typelettre)"); $stmt->bindParam("numero", $numero); $stmt->bindParam("datelettre", $datelettre); $stmt->bindParam("typelettre", $typelettre); $stmt1 = $bdd->prepare ("INSERT INTO truck (nomclient,nomtransporteur,nomconducteur,immatracteur,immaremorque,natureproduit, essence,quantitecolis,charge,provenance,destination,commentaire) VALUES (nomclient, nomtransporteur, nomconducteur, immatracteur, immaremorque, natureproduit, essence, quantitecolis, charge, provenance, destination, commentaire)"); $stmt1->bindParam("nomclient", $nomclient); $stmt1->bindParam("nomtransporteur", $nomtransporteur); $stmt1->bindParam("nomconducteur", $nomconducteur); $stmt1->bindParam("immatracteur", $immatracteur); $stmt1->bindParam("immaremorque", $immaremorque); $stmt1->bindParam("natureproduit", $natureproduit); $stmt1->bindParam("essence", $essence); $stmt1->bindParam("quantitecolis", $quantitecolis); $stmt1->bindParam("charge", $charge); $stmt1->bindParam("provenance", $provenance); $stmt1->bindParam("destination", $destination); $stmt1->bindParam("commentaire", $commentaire); if($stmt->execute() AND $stmt1->execute()) { echo "<script>alert('Successfully Added..')</script>"; echo "<script>window.open('index.php','_self')</script>"; header('Location:formulaire_camion.php'); } else{ echo "Un souci au niveau de la requ�te"; header('location:formulaire_camion.php'); } }catch(PDOException $e) { echo "Erreur lors de l\'enregistrement".$e->getMessage(); } } ?>
je n'ai aucune erreur en retour, mais mes tables sont vides

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

19 sept. 2018, 19:16

Tu n'as pas respecté la syntaxe des variables dans ta requête SQL preparée, il faut des 2 points.
Cf les exemples de la doc :
http://php.net/manual/fr/pdostatement.bindparam.php
Quand tout le reste a échoué, lisez le mode d'emploi...