Problème de code php

Fermé
xooit21 Messages postés 99 Date d'inscription mardi 2 janvier 2018 Statut Membre Dernière intervention 4 août 2023 - Modifié le 24 févr. 2018 à 17:22
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 - 24 févr. 2018 à 17:58
Bonjour,
quand j'essaye de m'inscrire sur mon site j'ai un message d'erreur qui s'affiche:

Fatal error: Uncaught Error: Call to a member function prepare() on string in /volume1/web/inscription.php on line 33 Error: Call to a member function prepare() on string in /volume1/web/inscription.php on line 33 Call Stack: 0.0003 354192 1. {main}() /volume1/web/inscription.php:0

donc j'ai regardé mon code mais je trouve pas l'erreur, voici mon code php:

<?php
   //connection a la base de donnée
 $bdd = 'mysql:dbname=espace_membre;host=127.0.0.1';
   $user = 'root';
   $password = 'root';
   // fin de connection


   // dés qu'on clik sur envoyer il faut que les champs soit remplis //
  if (isset($_POST['envoyer'])) 
  {
   if (!empty($_POST['pseudo']) AND !empty($_POST['mail']) AND !empty($_POST['mail2']) AND !empty($_POST['mdp']) AND !empty($_POST['mdp2']))
   { 
    /////// securisation anti-java ////////
    $pseudo = htmlspecialchars($_POST['pseudo']);
     $mail = htmlspecialchars($_POST['mail']);
      $mail2 = htmlspecialchars($_POST['mail2']);
       $mdp = sha1($_POST['mdp']);
        $mdp2 = sha1($_POST['mdp2']);
    /////// fin securisation anti-java ////////
    $pseudolength = strlen($pseudo);
     if ($pseudolength <= 255) 
     {
      // Si mail est egale a mail2 //
      if ($mail == $mail2) 
      {
        // verification si l'adresse email existe vraiment //
       
        if (filter_var($mail, FILTER_VALIDATE_EMAIL)) 

      {
        $reqmail = $bdd->prepare("SELECT * FROM membres WHERE mail = ? ");
       $reqmail->execute(array($mail));
       $mailexist = $reqmail->rowCount();

       
       if ($mailexist == 0)
       {

        
       if ($mdp == $mdp2) 
        {
         $insernbr = $bdd->prepare("INSERT INTO membres(pseudo, mail, motdepasse) VALUES(?, ?, ?)");
         $insernbr -> execute(array($pseudo, $mail, $mdp)); 
         $erreur = "Votre compte a bien ete crée!<br><a href=\"connection.php\">Me connecter</a>  ";
         

        }
        else
         {
        $erreur = "Votre mot de passse ne corespond pas!";
         }
        }
        else
        {
         $erreur = "adresse email deja utilisé!";
        }


      }
       else
       {
        $erreur = "Votre adresse email n'est pas valide";
       }
      }
      else
      {
       $erreur = "Votre adresse email ne corespond pas!";
      }
     }
     else
     {
      $erreur = "Votre pseudo ne doit pas depassé 255 caractére!";
     }
   }
   else
   {
    $erreur = "Tous les champs doivent être renpli!";
   }
  }  
 ?>




A voir également:

3 réponses

jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
24 févr. 2018 à 17:23
Bonjour,

Tu as écris :
   //connection a la base de donnée
 $bdd = 'mysql:dbname=espace_membre;host=127.0.0.1';
   $user = 'root';
   $password = 'root';
   // fin de connection

.... il te manque quelques lignes de code....

Applique ceci :
https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs

0
xooit21 Messages postés 99 Date d'inscription mardi 2 janvier 2018 Statut Membre Dernière intervention 4 août 2023
24 févr. 2018 à 17:37
bonjour,
Quand je remplace par ce code:

try{
$bdd = new PDO('mysql:host=localhost;
dbname=espace_membre; charset=utf8', 'root', 'root');
// Activation des erreurs PDO
$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// mode de fetch par défaut : FETCH_ASSOC / FETCH_OBJ / FETCH_BOTH
$bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
} catch(PDOException $e) {
die('Erreur : ' . $e->getMessage());
}


sa me dis:

Erreur : SQLSTATE[HY000] [1045] Accès refusé pour l'utilisateur: 'root'@'@localhost' (mot de passe: OUI)
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
24 févr. 2018 à 17:48
Ce qui est déjà mieux.
Cela signifie que tes identifiants ne sont pas bons !

Tu es en local ou sur un serveur ?
Si tu es en local ... essaye de laisser vide ("") le password
Si tu es sur un serveur.... il faut que tu utilises les identifiants qui t'ont été fournis pas ton hébergeur.
0
xooit21 Messages postés 99 Date d'inscription mardi 2 janvier 2018 Statut Membre Dernière intervention 4 août 2023
24 févr. 2018 à 17:52
ha oui merci heuuu

maintenant j'ai ça?

0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
24 févr. 2018 à 17:58
Cela signifie que, dans ta table, tu as un champ nommé "avatar" ...
et que, comme le dit le message d'erreur qu'il suffit de lire....... il ne possède pas de valeur par défaut (default value).
Donc soit tu revois la définition de ce champ dans ta bdd ... soit tu l'ajoutes dans ta requête INSERT.


De plus.. attention.
Désormais on utilise la fonction password_verify pour stocker les password et les vérifier :
https://www.php.net/manual/fr/function.password-verify.php
et donc, pour encoder le password (celui que tu stockes dans ta bdd) : http://php.net/manual/fr/function.password-hash.php

Voici un exemple de code : https://forums.commentcamarche.net/forum/affich-34340900-login-password-php#7

.
0