ERREUR EN PHP catchable fatal error: Object of class stdClass

Suivre ce topic
Ce topic est suivi par : Personne...
bykertix

bykertix Le 27 mars 2016 à 03:24 (Édité le 25 janvier 2019 à 17:50)

Bonjour, donc voila j'ai une erreur en php je n'arrive pas a la regler, vous pouvez m'aider ?

L'erreur: Catchable fatal error: Object of class stdClass could not be converted to string in /home/cristalh/public_html/bykertix/nouveau_topic.php on line 20

Le Code:

<?php $Auth->allow('member'); ?>
<?php if($Auth->user('id')); ?>
<?php
$pdo = new PDO('mysql:dbname=c***;host=localhost', 'cr**', 'C***S');
/* Traitement du formulaire de création de Topic */
if(isset($_SESSION['Auth'])) {
   if(isset($_POST['tsubmit'])) {
      if(isset($_POST['tsujet'],$_POST['tcontenu'])) {
         $sujet = htmlspecialchars($_POST['tsujet']);
         $contenu = htmlspecialchars($_POST['tcontenu']);
         if(!empty($sujet) AND !empty($contenu)) {
            if(strlen($sujet) <= 70) {
               if(isset($_POST['tmail'])) {
                  $notif_mail = 1;
               } else {
                  $notif_mail = 0;
               }
               $ins = $pdo->prepare('INSERT INTO f_topics (id_createur, sujet, contenu, notif_createur, date_heure_creation) VALUES(?,?,?,?,NOW())');
               $ins->execute(array($_SESSION['Auth'],$sujet,$contenu,$notif_mail));
            } else {
               $terror = "Votre sujet ne peut pas dépasser 70 caractères";
            }
         } else {
            $terror = "Veuillez compléter tous les champs";
         }
      }
   }
} else {
   $terror = "Veuillez vous connecter pour poster un nouveau topic";
}
require('nouveau_topic.view.php'); /* Appel du fichier "vue" de notre page */
?>

PrimFX

PrimFX Le 27 mars 2016 à 03:46

Salut !
Je pense que ton erreur vient de cette ligne:
$ins->execute(array($_SESSION['Auth'],$sujet,$contenu,$notif_mail));
On dirait qu'une de tes variables que tu fais passer en array() est un objet "stdClass" et non une string 😦 D'où l'erreur qui te dit que ton objet ne peut pas être converti en string :p
bykertix

bykertix Le 27 mars 2016 à 09:43

Ah 😦 ducoup il faut que je place une variable avant le
$_SESSION
  ?
PrimFX

PrimFX Le 27 mars 2016 à 14:13

Euh nope 😋 Je te conseillerais de faire un var_dump() de chaque variable que tu passes en paramètre de ta requête. La variable qui fait bugger ta requête sera celle qui retournera un objet et non une string 😉
bykertix

bykertix Le 27 mars 2016 à 15:02

Quand je fait un var_dump sa me dit sa: 
array(4) { [0]=> object(stdClass)#1 (16) { ["id"]=> string(1) "1" ["username"]=> string(8) "ByKeRTiX" ["email"]=> string(23) "gog********" ["password"]=> string(60) "$2y$10$x***********PXhie" ["address"]=> string(9) "Fondateur" ["confirmation_token"]=> NULL ["confirmed_at"]=> string(4) "2015" ["remember_token"]=> NULL ["remember_at"]=> NULL ["reset_token"]=> string(60) "wHDlMrRccBos1UZReGo4SieNpeUnDLeS5ScQQpiv8NGOm90pj4p5BSN3AfxX" ["reset_at"]=> string(19) "2016-03-27 00:50:09" ["role_id"]=> string(1) "1" ["avatar"]=> string(0) "" ["name"]=> string(14) "Administrateur" ["slug"]=> string(5) "admin" ["level"]=> string(1) "2" } [1]=> string(3) "dfd" [2]=> string(4) "dffd" [3]=> int(0) } Catchable fatal error: Object of class stdClass could not be converted to string in /home/cristalh/public_html/bykertix/nouveau_topic.php on line 21
PrimFX

PrimFX Le 27 mars 2016 à 15:04

Oui mais là tu as fait un var_dump de $ins non ?
Je pense que le mieux serait de faire un var_dump de chaque variable que tu passes en paramètre séparément, sinon c'est galère de s'y retrouver :p
bykertix

bykertix Le 27 mars 2016 à 15:09

J'ai fait sa juste avant la ligne 20
var_dump(array($_SESSION['Auth'],$sujet,$contenu,$notif_mail));
PrimFX

PrimFX Le 27 mars 2016 à 15:12

Ça marche 😀 Test ça et dis-moi ce que ça te retourne (histoire d'avoir les résultats de chaque variable séparément) ;)
var_dump($_SESSION['auth']);
var_dump($sujet);
var_dump($contenu);
var_dump($notif_mail);
bykertix

bykertix Le 27 mars 2016 à 15:13 (Édité le 27 mars 2016 à 15:13)

NULL string(3) "ttt" string(3) "ttt" int(0) 

sa me dit sa
bykertix

bykertix Le 27 mars 2016 à 15:30

Et sa: 

object(stdClass)#1 (16) { ["id"]=> string(1) "1" ["username"]=> string(8) "ByKeRTiX" ["email"]=> string(23) "gogob***mail.com" ["password"]=> string(60) "$2*******ie" ["address"]=> string(9) "Fondateur" ["confirmation_token"]=> NULL ["confirmed_at"]=> string(4) "2015" ["remember_token"]=> NULL ["remember_at"]=> NULL ["reset_token"]=> string(60) "wHDlMrRccBos1UZReGo4Si***v8NGOm90pj4p5BSN3AfxX" ["reset_at"]=> string(19) "2016-03-27 00:50:09" ["role_id"]=> string(1) "1" ["avatar"]=> string(0) "" ["name"]=> string(14) "Administrateur" ["slug"]=> string(5) "admin" ["level"]=> string(1) "2" } string(2) "tt" string(2) "tt" int(0)
bykertix

bykertix Le 27 mars 2016 à 15:33

J'ai trouver la solution, sa marche ! 😄
$ins->execute(array($_SESSION['Auth']->id,$sujet,$contenu,$notif_mail));
PrimFX

PrimFX Le 27 mars 2016 à 21:05

Ah nickel 😉
Tu vois, grâce aux var_dump() tu peux voir ce qui déconne, quelle variable n'est pas une string, ce qu'elles contiennent, ... :)
Bref, cool que tu ais trouvé solution à ton problème !
@+
theagar

theagar Le 27 mars 2016 à 21:15 (Édité le 27 mars 2016 à 21:16)



MrFreeman

MrFreeman Le 2 septembre 2020 à 13:44

Bonjour, Je me permets de vous contacter, j'ai actuellement un problème similaire, lorsque je veux faire une insertion dans une table contenant des int, float, string.

Le Code :

//INSERTION du BIEN
$bieninsert=$db->prepare('INSERT INTO biens (idbien, iddemande, idsinistre, idartisan, idclient, idutilisateur, typebien, priorite, caracteristique, valeurachat, tva, dateachat, remplacement, prestataire, comtech, causesinistre, conclusion, reclarep, reclaremp, reppresta, remppresta) VALUES (:idbien, :iddemande, :idsinistre, :idartisan, :idclient, :idutilisateur, :typebien, :priorite, :caracteristique, :valeurachat, :tva, :dateachat, :remplacement, :prestataire, :comtech, :causesinistre, :conclusion, :reclarep, :reclaremp, :reppresta, :remppresta)');
$bieninsert->execute([':idbien' => $toto, ':iddemande' => $dossier, ':idsinistre' => $idsinistre, ':idartisan' => $idprestataire, ':idclient' => $idclient, ':idutilisateur' => $idutilisateur, ':typebien' => $biens, ':priorite' => $prio, ':caracteristique' => $produit, ':valeurachat' => $valachat, ':tva' => $tva, ':dateachat' => $dateachat, ':remplacement' => $remplacement, ':prestataire' => $prestataire, ':comtech' => $commtech, ':causesinistre' => $causesin,':conclusion' => $conclusion, ':reclarep' => $reclarep, ':reclaremp' => $reclaremp, ':reppresta' => $reppre, ':remppresta' => $remppre]);

var_dump ($toto);
var_dump ($dossier);
var_dump ($idsinistre);
var_dump ($idprestataire);
var_dump ($idclient);
var_dump ($idutilisateur);
var_dump ($biens);
var_dump ($prio);
var_dump ($produit);
var_dump ($valachat);
var_dump ($tva);
var_dump ($dateachat);
var_dump ($remplacement);
var_dump ($prestataire);
var_dump ($commtech);
var_dump ($causesin);
var_dump ($conclusion);
var_dump ($reclarep);
var_dump ($reclaremp);
var_dump ($reppre);
var_dump ($remppre);

var_dump($bieninsert);
echo $bieninsert;

J'ai fais comme ennoncé, tout les var dump me retourne des string, sauf le idbien, mais je le convertit et apres il me retourne un string , serait ce du à un nom de champs ou au type de champs.

Dans ma table les id sont des int, les montants sont des float, le reste est en varchar.

Merci de votre aide

Vous devez être connecté pour poster une réponse. Se connecter ou Créer un compte