2013-08-07 2 views
1

J'ai cherché quelque chose sur un système de connexion dans Google, mais le fait est que j'essaie d'y arriver par moi-même, et ne pas suivre un guide qui me dit tout.Classe d'utilisateur PHP avec accès à la connexion

J'ai un index.php qui a un menu.php inclus dans le haut, qui a un include pour un login_form.php, qui appelle login.php pour faire le login. Dans le login.php utilise la classe User pour faire le login. user.php a le require_once pour la connection.php

J'échoue à quelque chose de très facile à réparer mais je n'arrive pas à le voir car c'est nouveau pour moi. Le problème est qu'une erreur se produit:

Undefined variable: MySQL admin \ include \ lib \ user.php sur la ligne 12

connection.php:

require_once 'constants.php'; 
$mysql = new mysqli($db['host'], $db['username'], $db['password'], $db['name']); 

if ($mysql->connect_error){ 
    die('Connection error (' . $mysql->connect_errno.')'. $mysql->connect_error); 
} 
utilisateur

. php -> ligne 12:

$this->password=$mysql->real_escape_string($this->password); 

comme une note de côté index.php comme require_once pour le connection.php, contre tants.php (qui a le tableau $ db avec l'hôte, l'utilisateur, etc ..), et le class.php. J'essaie vraiment d'entrer dans le concept OOP donc j'apprécierais vraiment votre aide!

Merci d'avance les gars! Je crois que ce sera un peu difficile de vous donner la structure du fichier, mais je peux vous assurer que j'ai besoin de bonnes choses. Pour le prouver j'ai fait le var_dump($mysql). Si je l'appelle dans le user.php mais en dehors de la classe User, il affiche du contenu. Cependant si je l'appelle à l'intérieur de la classe Utilisateur, cela me donne l'erreur indéfinie.

+0

Dans user.php, essayez var_dump() en utilisant $ mysql pour vous assurer que c'est ce qu'il devrait être. –

+0

Avez-vous oublié d'inclure 'connection.php' avant d'inclure' user.php'? Ou oubliez de l'inclure ** dans ** 'user.php'? (Évidemment, je ne sais pas comment vos fichiers sont disposés) – Crontab

Répondre

3

Vous avez un problème de portée variable. $mysql est hors de portée dans la classe User. Je suggère passer la variable à la classe dans le constructeur et l'enregistrer comme une propriété:

class User 
{ 
    protected $mysql; 

    public function __construct($mysql) 
    { 
     $this->mysql = $mysql; 
    } 

    public function something() 
    { 
     $this->password = $this->mysql->real_escape_string($this->password); 
    } 
} 

Exemple d'utilisation en passant la connexion:

require_once 'connection.php'; // creates $mysql 
$user = new User($mysql); 

Tout au long de la classe, vous pouvez maintenant utiliser $this->mysql pour accéder à la connexion .

+0

Tout d'abord merci. J'ai vraiment compris ce que tu as dit et j'essayais justement d'en trouver plus sur la portée de la classe! J'ai effectivement fait cela et ensuite utilisé une autre méthode pour la connexion. De cette façon, quand je construis, je dis seulement de créer le $ mysql comme vous l'avez dit. Ensuite, sur la méthode de connexion, j'envoie des paramètres du formulaire pour faire le login. Je crois que c'est ça? –

+0

Oui cela me semble juste :) – MrCode