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
29567
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
19 septembre 2020
2 785
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 : https://www.commentcamarche.net/faq/46512-pdo-gerer-les-erreurs

Tu peux aussi suivre les consignes données ici : https://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.
Messages postés
29567
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
19 septembre 2020
2 785 > 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),
Messages postés
29567
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
19 septembre 2020
2 785
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;
    }

>
Messages postés
29567
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
19 septembre 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 ?
Messages postés
29567
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
19 septembre 2020
2 785 > 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
12258
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
19 septembre 2020
691
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é ?
Messages postés
12258
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
19 septembre 2020
691 > 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?
>
Messages postés
12258
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
19 septembre 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 !