Erreur "Notice : Array to string conversion in..." [Résolu]

Signaler
-
 Nenatio -
Bonjour !

J'ai besoin de votre aide car je suis bloqué sur un problème que je n'arrive pas à résoudre.
Je tombe sur ce code erreur : "Notice : Array to string conversion in...".
Après quelques recherches sur cette erreur, je n'ai toujours pas trouvé de moyen de la résoudre.

Voici le morceau de code contenant l'erreur :
if ($_POST['mot_de_passe']==$_POST['mot_passe_verif']) 
    {
        $mot_de_passe=password_hash($_POST['mot_de_passe'], PASSWORD_DEFAULT);
        $hachage=true;

        $portefeuille=0;
        $victoires=0;
        $statut=0;
        $nom=$_POST['nom'];
        $prenom=$_POST['prenom'];
        $pseudo=$_POST['pseudo'];

        $req = $bdd->prepare('INSERT INTO utilisateur(nom, prenom, pseudo, mot_de_passe, courriel, date_naissance, statut, portefeuille, victoires) VALUES(:nom, :prenom, :pseudo, :mot_de_passe, :courriel, :date_naissance, :statut, :portefeuille, :victoires)');
        $req->execute(array(
         'nom' => $nom,
         'prenom' => $prenom,
         'pseudo' => $pseudo,
                'mot_de_passe' => $mot_de_passe,
                'courriel' => $courriel,
                'date_naissance' => $date_naissance,
                'statut' => $statut,
                'portefeuille' => $portefeuille,
                'victoires' => $victoires
     ));

        echo 'Ajout du membre effectué!';
    }

    else
    {
        $erreur="Les mots de passe saisis sont différents";
        $hachage=false;
    }


L'erreur se trouverait sur la ligne suivante :
'victoires' => $victoires


Je précise que certaines variables sont définies plus haut.

Merci d'avance pour votre aide !

3 réponses

Messages postés
27269
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
17 janvier 2020
2014
Bonjour,

Fais un var_dump de tes différentes variables


NB: Vu que tu fais du PDO, pense à gérer correctement les erreurs.
Applique ce qui est indiqué ici : http://www.commentcamarche.net/faq/46512-pdo-gerer-les-erreurs

Tu peux aussi suivre les consignes données ici : http://www.commentcamarche.net/faq/48399-php-gestion-des-erreurs-debogage-et-ecriture-du-code


Re-bonjour,

Après avoir appliqué ce que tu m'as indiqué, je constate l'apparition de lignes inattendues sur ma page :
C:\wamp64\www\mabase\traitement\t-accountcreate.php:91:string 'Dupont' (length=6)
C:\wamp64\www\mabase\traitement\t-accountcreate.php:92:string 'Jean' (length=4)
C:\wamp64\www\mabase\traitement\t-accountcreate.php:93:string 'jdupont' (length=7)
C:\wamp64\www\mabase\traitement\t-accountcreate.php:94:string '$2y$10$tQnwCVGZFqFZv8ILWUy9d.mgxYwBk2ltDVjflhIUCikJFRRX7Zwyu' (length=60)
C:\wamp64\www\mabase\traitement\t-accountcreate.php:95:string '***@***' (length=21)
C:\wamp64\www\mabase\traitement\t-accountcreate.php:96:
array (size=12)
'year' => int 1970
'month' => int 12
'day' => int 12
'hour' => boolean false
'minute' => boolean false
'second' => boolean false
'fraction' => boolean false
'warning_count' => int 0
'warnings' =>
array (size=0)
empty
'error_count' => int 0
'errors' =>
array (size=0)
empty
'is_localtime' => boolean false
C:\wamp64\www\mabase\traitement\t-accountcreate.php:97:int 0
C:\wamp64\www\mabase\traitement\t-accountcreate.php:98:int 0
C:\wamp64\www\mabase\traitement\t-accountcreate.php:99:int 0
Ajout du membre effectué!


Et lorsque je regarde dans phpmyadmin, le membre n'est pas enregistré dans la table.
jordane45
Messages postés
27269
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
17 janvier 2020
2014 > Nenatio
Quel est le code modifié ?
A quoi correspond la ligne 96 ?
Excuse-moi, je n'ai pas fait attention. Le voici corrigé :
if ($_POST['mot_de_passe']==$_POST['mot_passe_verif']) 
    {
        $mot_de_passe=password_hash($_POST['mot_de_passe'], PASSWORD_DEFAULT);
        $hachage=true;

        $portefeuille=0;
        $victoires=0;
        $statut=0;
        $nom=$_POST['nom'];
        $prenom=$_POST['prenom'];
        $pseudo=$_POST['pseudo'];

        $req = $bdd->prepare('INSERT INTO utilisateur(nom, prenom, pseudo, mot_de_passe, courriel, date_naissance, statut, portefeuille, victoires) VALUES(:nom, :prenom, :pseudo, :mot_de_passe, :courriel, :date_naissance, :statut, :portefeuille, :victoires)');
        $req->execute(array(
	        'nom' => var_dump($nom),
	        'prenom' => var_dump($prenom),
	        'pseudo' => var_dump($pseudo),
            'mot_de_passe' => var_dump($mot_de_passe),
            'courriel' => var_dump($courriel),
            'date_naissance' => var_dump($date_naissance),
            'statut' => var_dump($statut),
            'portefeuille' => var_dump($portefeuille),
            'victoires' => var_dump($victoires)
	    ));

        echo 'Ajout du membre effectué!';
    }

    else
    {
        $erreur="Les mots de passe saisis sont différents";
        $hachage=false;
    }


La ligne 96 correspond à la ligne suivante :
'date_naissance' => var_dump($date_naissance),
jordane45
Messages postés
27269
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
17 janvier 2020
2014
oulaaaaa.....

Alors les var_dump ce n'est pas pour "corriger" quoi que ce soit.....
C'est pour débuguer pour essayer de comprendre où se trouve ton erreur !

Il faut remettre ton code comme il était avant et AJOUT des var_dump des variables à côté !


if ($_POST['mot_de_passe']==$_POST['mot_passe_verif'])    {
        $mot_de_passe=password_hash($_POST['mot_de_passe'], PASSWORD_DEFAULT);
        $hachage=true;

        $portefeuille=0;
        $victoires=0;
        $statut=0;
        $nom=$_POST['nom'];
        $prenom=$_POST['prenom'];
        $pseudo=$_POST['pseudo'];

       $datas = array(
         ':nom' => $nom,
         ':prenom' => $prenom,
         ':pseudo' => $pseudo,
          ':mot_de_passe' => $mot_de_passe,
          ':courriel' => $courriel,
          ':date_naissance' => $date_naissance,
          ':statut' => $statut,
          ':portefeuille' => $portefeuille,
          ':victoires' => $victoires
     );
        $sql = 'INSERT INTO utilisateur(nom, prenom, pseudo, mot_de_passe, courriel, date_naissance, statut, portefeuille, victoires) VALUES(:nom, :prenom, :pseudo, :mot_de_passe, :courriel, :date_naissance, :statut, :portefeuille, :victoires)';

       var_dump($nom);
 var_dump($prenom);
 var_dump($pseudo);
 var_dump($mot_de_passe);
 var_dump($courriel);
 var_dump($date_naissance);
 var_dump($statut);
 var_dump($portefeuille);
 var_dump($victoires);

      try{
        $req = $bdd->prepare($sql);
        $req->execute($datas);
        echo 'Ajout du membre effectué!';
      }catch(Exception $e){
         echo " Erreur " . $e->getMessage();
      }

    }  else   {
        $erreur="Les mots de passe saisis sont différents";
        $hachage=false;
    }

> jordane45
Messages postés
27269
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
17 janvier 2020

Ah...
Autant pour moi.

Mais de ce fait, si je comprends bien, var_dump() permet de connaître le type de la variable, c'est bien ça ?
jordane45
Messages postés
27269
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
17 janvier 2020
2014 > Nenatio
Oui.

Car ton message d'erreur indique que tu essaies d'utiliser une variable de type "array" là où ne devrait se trouver qu'une string.
Tes var_dump sont là pour essayer de déterminer quelle est la variable qui te pose problème...
Messages postés
9330
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
16 janvier 2020
488
bonjour, c'est la variable $date_naissance qui pose problème. comment l'as-tu définie?
quel est le type du champ date_naissance dans la base de données?
Bonjour !

Ma variable $date_naissance est définie dans ma base sous la forme DATE, à la différence des autres champs qui sont aux formats TEXT, VAR ou encore INT. Le problème est-il donc ce format qui doit être modifié ?
yg_be
Messages postés
9330
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
16 janvier 2020
488 > Nenatio
c'est le champ date_naissance qui est défini comme DATE dans la base de données.
comment la variable $date_naissance est-elle définie dans ton code PHP?
> yg_be
Messages postés
9330
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
16 janvier 2020

Disons que j'ai réalisé quelque chose qui je pense n'était pas du tout optimisé. En fait, j'avais placé dans ma variable $date_naissance le contenu d'un input. De ce fait (je pense), le format était différent, ce qui a conduit à cette erreur.
Après avoir tout corrigé, tout semble correct et fonctionnel.

Je te remercie grandement ainsi que @jordane45 pour votre patience car c'était pas gagné ;).

Merci encore et bonne continuation !