Erreur "Notice : Array to string conversion in..."

Résolu
Nenatio -  
 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 !
A voir également:

3 réponses

jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 753
 
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://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs

Tu peux aussi suivre les consignes données ici : https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code


0
Nenatio
 
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.
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 753 > Nenatio
 
Quel est le code modifié ?
A quoi correspond la ligne 96 ?
0
Nenatio
 
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),
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 753
 
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;
    }

0
Nenatio > jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention  
 
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 ?
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 753 > 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...
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 584
 
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?
0
Nenatio
 
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é ?
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584 > 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?
0
Nenatio > yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention  
 
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 !
0