Partage
  • Partager sur Facebook
  • Partager sur Twitter

accès à une bdd

    30 mars 2020 à 18:55:06

    Bonjour, je créer actuellement un site tout simple avec une partie connexion/déconnexion et récupérant les données dans une bdd.

    J'ai cette erreur : Call to a member function prepare() on null.

    Je ne comprend pas d'ou elle vient alors que j'ai instancié la variable dans un autre fichier qui lui même est include.

    Je vous met le code pour une meilleur compréhension.

    ----- la partie connexion -----

    <?php
    session_start();
    include_once('accesbase.php');
    
    if (!empty($_POST)){
    	extract($_POST);
    	$valid = (boolean) true;
    	
    	
    	$req = $acces->prepare('select password from client where login = ?');
    	$req->execute(array($_post['login']));
    
    
    	$Identifiant = htmlspecialchars(trim($Identifiant));
    	$Password  = (string) trim($Password);
    	
    	if ($req->rowCount() == 1) {
    		$result = $req->fetch(PDO::FETCH_OBJ);
    		$password = $result->password;
    	}
    	
    	if (empty($Identifiant)) {
    		$valid = false;
    		$error_identifiant = "met un identifiant";
    	}
    
    	if (empty($Password)) {
    		$valid = false;
    		$error_password = "met un mot de passe";
    	}
    	
    	if (!$req['identifiant']) {
    		$valid = false;
    		$error_saisie = "pas bon";
    	}
    	
    	if ($valid) {
    		$_SESSION['identifiant'] = $req['identifiant'];
    		$_SESSION['password'] = $req['password'];
    		header('Location: index.php');
    		exit;
    	}
    
    }
    ?>

    ----- la partie connexion à la bdd -----

    <?php
    
    class accesbase {
    	private $host = 'localhost';
    	private $name = 'camping';
    	private $user = 'root';
    	private $password = '';
    	private $acces;
    
    	function _construct($host=null, $name=null, $user=null, $password=null){
    		if ($host != null) {
    			$this->host = $host;
    			$this->name = $name;
    			$this->user = $user;
    			$this->password = $password;
    		}
    
    		try {
    			$this->acces = new PDO('mysql:host='.$this->host.';dbname='.$this->name, $this->user, $this->password, array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES UTF8', PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING));
    		}
    
    		catch (PDOException $e) {
    			echo "erreur connexion";
    			die();
    		}
    	}
    	
    	public function acces() {
    		return $this->acces;
    	}
    }
    
    ?>

    Merci.



    • Partager sur Facebook
    • Partager sur Twitter
      30 mars 2020 à 18:59:31

      Salut

      Je te conseille d'aller dans la FAQ PHP pour voir comment activer l'affichage des erreurs que PDO rencontre, dans un premier temps.

      Je déconseille l'utilisation de extract() parce que si par malheur avant son utilisation il existait déjà une variable avec un nom d'un des index de $_POST, cela écrasera la valeur de la variable. Il faut savoir que c'est une source de faille XSS.
      Et je conseille d'enlever htmlspecialchars() à la ligne 14, cette fonction ne s'utilise qu'à l'affichage dans du HTML, elle n'a pas de sens ailleurs.

      -
      Edité par Ymox 30 mars 2020 à 19:02:18

      • Partager sur Facebook
      • Partager sur Twitter
        30 mars 2020 à 19:17:07

        Merci pour la réponse

        Alors il se trouve que je n'ai pas 1 erreur mais 3

        une de type notice : "undefined variable: acces"

        une de type fatal error : "uncaught error: to a member function prepare()"

        et la même qu'au début de type error : "call to a member function prepare() on null"

        • Partager sur Facebook
        • Partager sur Twitter
          30 mars 2020 à 19:33:27

          Salut,

          c'est quand que tu fais:

          <?php
              $acces = new Accesbase();

          et il faut une majuscule pour la première lettre du nom d'une classe.



          • Partager sur Facebook
          • Partager sur Twitter
            30 mars 2020 à 19:54:10

            Yo, merci pour la réponse

            j'ai toujours un problème, il vient de cette ligne : 

            <?php
                 $req = $acces->prepare('select password from client where login = ?');
            ?>


            même avec le "extract()" rien ne change

            -
            Edité par Malphite AP 30 mars 2020 à 19:55:43

            • Partager sur Facebook
            • Partager sur Twitter
              30 mars 2020 à 19:59:01

              christouphe a écrit:

              Salut,

              c'est quand que tu fais:

              <?php
                  $acces = new Accesbase();

              et il faut une majuscule pour la première lettre du nom d'une classe.



              Yo !! merci de m'avoir lu correctement, tu réponds Yo !!



              • Partager sur Facebook
              • Partager sur Twitter

              accès à une bdd

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown