Object of class PDOStatement could not be converted to string

Par jjr, il y a 7 ans


Bonjour,

Voila je rencontre un petit problème avec mon code.

Ce que je fais

Je fais actuellement un formulaire pour insérer des données dans une table

<?php session_start(); try{ $bdd = new PDO('mysql:host=stellar2;dbname=projet', 'root', '',array(PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING)); } catch (PDOException $e) { echo 'Échec de la connexion : ' . $e->getMessage(); exit; } if(isset($_POST['formpv'])) { $unite = ($_POST['unite']); $pv = ($_POST['pv']); $annee = ($_POST['annee']); $cadre = ($_POST['cadre_enquete']); $ipac = ($_POST['ipac']); $ide = ($_POST['pseudo']); $magistrat = ($_POST['magistrat']); if(!empty($_POST['pv'])) { $sql = $bdd->prepare("INSERT INTO una (idunite, pv, idannee, idenqueteur, ipac, magistrat, idcadre_enquete,) VALUES(?, ?, ?, ?, ?, ?, ?)"); $req=$sql->execute (array ($_POST['unite'], $_POST['pv'], $_POST['annee'], $_POST['pseudo'], $_POST['ipac'], $_POST['magistrat'], $_POST['cadre_enquete'])) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error()); $win = "Votre scellé a bien été créé !"; }else { $erreur = "Tous les champs doivent être complétés !"; } } ?>``` Décrivez ici ce que vous cherchez à obtenir que les données s'affichent dans ma table et résoudre l'erreur Ce que que j'obtiens ( ! ) Warning: PDOStatement::execute(): SQLSTATE[42000]: Syntax error or access violation: 1064 Erreur de syntaxe pr�s de ') VALUES('1', '1254', '1', '1', '', 'dsf', '1')' � la ligne 1 in E:\phpmyadmin\stellar2\formpv.php on line 23 Call Stack # Time Memory Function Location 1 0.0000 366344 {main}( ) ...\formpv.php:0 2 0.0130 383192 execute ( ) ...\formpv.php:23 ( ! ) Catchable fatal error: Object of class PDOStatement could not be converted to string in E:\phpmyadmin\stellar2\formpv.php on line 23 Call Stack # Time Memory Function Location 1 0.0000 366344 {main}( ) ...\formpv.php:0 Décrivez ici vos erreurs ou ce que vous obtenez à la place de ce que vous attendez :( MERCI pour votre aide ;)

12 réponses

Carouge10, il y a 7 ans

Bonjour,
Comme dit sur l'autre forum, tu as la solution dans l'erreur, il suffit de regarder. "L'erreur est près de ") VALUES ..."

jjr, il y a 7 ans

Il faut remplacer les ? par les variables $post?????

Carouge10, il y a 7 ans

non, l'erreur est avant

jjr, il y a 7 ans

Non franchement je vois pas je suis désolé à part une virgule en trop sinon......

jjr, il y a 7 ans

Stp pourrais tu me donner la réponse J'en peux plus d'attendre depuis 1 semaine :)

Carouge10, il y a 7 ans

et bien oui la virgule

jjr, il y a 7 ans

Desole du retard de la reponse je suis a l'étranger ici cest la nuit je testerai ca et je te dirai maimais ça m'étonnerait qu'une si petite erreur fasse cela;)

jjr, il y a 7 ans

Bravo CAROUGE 10 tu a répondu à ma question.
Je me permet maintenant de te demander la cerise sur le gateau:
Actuellement avec ce code la liste déroulante affiche les clés. j'ai testé la table affiche bien les enregistrements tout va bien
MAIS...
Je souhaiterai que les listes déroulantes affichent les valeurs (C'est mieux pour les utilisateurs!!!)
Le problème c'est que quand je remplace id_unite, id_annee etc.... dans mes <option> les valeurs s'affichent bien sur le formulaire mais quand je valide le code plante.
C'est normal car la valeur n'est plus la clé et donc ne peut s'insérer dans dans la table.
Comment afficher les valeurs mais par contre récupérer la clé correspondante afin qu'elle s'insère dans la table au moment de la soumission du formulaire??????
J'ai vu quon pouvait écrire
<option value = " un code qui affiche la clef">mon code php qui affiche la valeur pour les utilisateurs</options>
Si tu réponds à ça tu résouds mon projet ......
Je te joins le code complet

<?php session_start(); try{ $bdd = new PDO('mysql:host=stellar2;dbname=projet', 'root', '',array(PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING)); } catch (PDOException $e) { echo 'Échec de la connexion : ' . $e->getMessage(); exit; } if(isset($_POST['formpv'])) { $unite = ($_POST['unite']); $pv = ($_POST['pv']); $annee = ($_POST['annee']); $cadre = ($_POST['cadre_enquete']); $ipac = ($_POST['ipac']); $ide = ($_POST['pseudo']); $magistrat = ($_POST['magistrat']); if(!empty($_POST['pv'])) { $sql = $bdd->prepare("INSERT INTO una (idunite, pv, idannee, idenqueteur, id_ipac, magistrat, idcadre_enquete) VALUES(?, ?, ?, ?, ?, ?, ?)"); $req=$sql->execute (array ($_POST['unite'], $_POST['pv'], $_POST['annee'], $_POST['pseudo'], $_POST['ipac'], $_POST['magistrat'], $_POST['cadre_enquete'])) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error()); $win = "Votre scellé a bien été créé !"; }else { $erreur = "Tous les champs doivent être complétés !"; } } ?> <html> <head> <title>Scellé</title> <meta charset="utf-8"> <link rel="stylesheet" media="screen" type= "text/css" href="css/theme.css"/> <script src="js/bootstrap.min.js" type="text/javascript"></script> <script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" crossorigin="anonymous"></script> </head> <h1>PV</h1><br /><br /> <form method="POST" action="formpv.php"> <table> <tr> </SELECT> </td> </tr> <tr> <td align="right"> <label for="unité">Unité</label> </td> <td> <SELECT class="form-control-sm" type="text" id="unite" name="unite"/> <OPTION></OPTION> <?php $reponse = $bdd->query('SELECT * FROM unite'); while ($donnees = $reponse->fetch()) { echo '<OPTION>'. $donnees['id_unite'] .'</OPTION>'; } $reponse->closeCursor(); ?> </td> </tr> <tr> <td align="right"> <label for="pv">Numéro :</label> </td> <td> <input type="text" class="form-control-sm" placeholder="pv" id="pv" name="pv" value="<?php if(isset($pv)) { echo $pv; } ?>" /> </td> </tr> <tr> <td align="right"> <label for="annee">Année</label> </td> <td> <SELECT class="form-control-sm" type="text" id="annee" name="annee"/> <OPTION></OPTION> <?php $reponse = $bdd->query('SELECT * FROM annee'); while ($donnees = $reponse->fetch()) { echo '<OPTION>'. $donnees['id_annee'] .'</OPTION>'; } $reponse->closeCursor(); ?> </td> </tr> </SELECT> <tr> <td align="right"> <label for="cadre">Cadre d'enquête</label> </td> <td> <SELECT class="form-control-sm" type="text" id="cadre" name="cadre_enquete"/> <OPTION></OPTION> <?php $reponse = $bdd->query('SELECT * FROM cadre_enquete'); while ($donnees = $reponse->fetch()) { echo '<OPTION>'. $donnees['idcadre_enquete'] .'</OPTION>'; } $reponse->closeCursor(); ?> </td> </tr> </SELECT> <tr> <td align="right"> <label for="ide">Enquêteur</label> </td> <td> <SELECT class="form-control-sm" type="text" id="pseudo" name="pseudo"/> <OPTION></OPTION> <?php $reponse = $bdd->query('SELECT * FROM users'); while ($donnees = $reponse->fetch()) { echo '<OPTION>'. $donnees['id'] .'</OPTION>'; } $reponse->closeCursor(); ?> </td> </tr> </SELECT> <tr> <td align="right"> <label for="ipac">L'IPAC est il créé?</label> </td> <td> <SELECT class="form-control-sm" type="text" id="ipac" name="ipac"/> <OPTION></OPTION> <?php $reponse = $bdd->query('SELECT * FROM ipac'); while ($donnees = $reponse->fetch()) { echo '<OPTION>'. $donnees['id_ipac'] .'</OPTION>'; } $reponse->closeCursor(); ?> </td> </tr> </SELECT> <tr> <tr> <td align="right"> <label for="magistrat">magistrat :</label> </td> <td> <input type="text" class="form-control-sm" placeholder="magistrat" id="magistrat" name="magistrat" value="<?php if(isset($magistrat)) { echo $magistrat; } ?>" /> </td> </tr> <td align="center"><br /> <button type="submit" value="formpv" name="formpv" class="btn btn-primary">Enregistrer !</button> </td> </tr> <tr> <td></td> <td align="center"><br /> <a href="index.php">Retour à l'accueil</a> </td> </tr> <div align="center"> <?php if(isset($win)) { echo '<div class="alert alert-dismissible alert-success" align="center"> <button type="button" class="close" data-dismiss="alert">&times;</button> <h4 class="alert-heading">Bravo!</h4> <p class="mb-0">'.$win.' </p> </div>'; } ?> </div> </table> </form> </html>
adrie31228, il y a 7 ans

Toute cette partie est à supprimée car inutile dans ton code :

$unite = ($_POST['unite']); $pv = ($_POST['pv']); $annee = ($_POST['annee']); $cadre = ($_POST['cadre_enquete']); $ipac = ($_POST['ipac']); $ide = ($_POST['pseudo']); $magistrat = ($_POST['magistrat']);

Ensuite, il y a une virgule en trop dans ta requête après le "idcadre_enquete"
Et on écrit pas "$req=$sql->execute" mais juste "$sql->execute", c'est ça dans toutes les requêtes préparées.

jjr, il y a 7 ans

Bravo Propre tu portes bien ton nom, le formulaire marche même mieux comme cela!

Carouge10, il y a 7 ans

option peut avoir une "value" qui sera l'id et tu affiches le nom entre les balises
option

Carouge10, il y a 7 ans

option peut avoir une "value" qui sera l'id et tu affiches le nom entre les balises
option