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

Résolu
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

  1. Modérateur
    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
    1. 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
    2. Modérateur
      @NenatioQuel est le code modifié ?
      A quoi correspond la ligne 96 ?
      0
  2. 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
    1. Modérateur
      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
    2. @jordane45Ah...
      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
    3. Modérateur
      @NenatioOui.

      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
  3. Contributeur
    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
    1. 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
    2. Contributeur
      @Nenatioc'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
    3. @yg_beDisons 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