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 40050 Statut Modérateur 4 754
 
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 40050 Statut Modérateur 4 754 > 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 40050 Statut Modérateur 4 754
 
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 40050 Statut Modérateur
 
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 40050 Statut Modérateur 4 754 > 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 24281 Statut Contributeur 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 24281 Statut Contributeur 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 24281 Statut Contributeur
 
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