Bonsoir :)
voila j'ai une class PdoManager qui gère les connections a la base de donnée, puis j'ai une class Users qui extend de PdoManager puis j'ai des function, quand je veut utiliser l'une des function j'ai une erreur PHP Fatal error: Call to a member function prepare() on a non-object
Une deuxième question, dans la fonction getID je peut la rappeler elle même si l'id est déjà utiliser ?
Pdo.Class.php
<?php
class PDOManager {
private $driver = "mysql";
private $host = "127.0.0.1";
private $port = "8889";
private $username = "root";
private $password = "root";
private $database = "dps";
protected $pdo;
function __construct() {
$dsn = $this->driver.":host=".$this->host.";port=".$this->port.";dbname=".$this->database;
$this->pdo = new PDO($dsn, $this->username, $this->password);
}
}
Users.Class.php
(plus de function mais je n'en met qu'une)
<?php
require_once 'Pdo.Class.php';
/**
* Users.Class.php
*/
class Users extends PDOManager {
public function getID() {
$id = substr(hash("md5", uniqid(rand(),true)), 0,7);
$query = $this->pdo->prepare("SELECT * FROM users WHERE (id = :id)");
$query->bindValue(':id', $id);
$query->execute();
$result = $query->fetch();
if (empty($result)) {
return $id;
} else {
$this->getID();
}
}
}
Merci beaucoup :)
euh cela veut dire qu'il te manque la fonction prepare dans ta class pdoManager ($this renvoi à ta classe pdoManager et pas à la classe PDO)
pour répondre à ta deuxième question tu peux tout à fait,faire des fonctions récursive mais dans ton cas je ne crains que cela tourne en boucle puisque tu retourne $id si le résultat est vide et tu rejoues la fonction si le résultat est présent sans retourner celui-ci.
Donc si ta requête n'est pas vide ta fonction se joue à l'infini, je pense que le else devrait être $result->id ou quelque chose
mais la fonction prepare est pas defaut sur php non ?
Pour le else c'est si l'ID existe deja il doit en generer un nouveau
Le driver PDO est par défaut depuis php5.3 tout dépend de ta version sur ton serveur.
$this renvoi à ta classe pdoManager et pas à la classe native PDO vu qu'il n'y a pas extends PDO
<?php
require_once 'Pdo.Class.php';
/**
* Users.Class.php
*/
class Users extends PDOManager {
public $pdo;
function __construct($pdo) {
parent::_construct();
if (!isset($_SESSION'user']'id']) && !empty($_SESSION'user']'id'])) {
$id = $_SESSION'user']'id'];
$query = $this->pdo->prepare("SELECT * FROM users WHERE id = :id");
$query->bindValue(':id', $id);
$query->execute();
$result = $query->fetch();
if ($result) {
$this->session($result'id']);
} else {
// $this->redirect("login.php");
}
} else {
// $this->redirect("login.php");
}
}
public function session($id = null) {
if ($id == null) {
echo "ERREUR";
} else {
$query = $this->pdo->prepare("SELECT id,nom,prenom FROM users WHERE id = :id");
$query->bindValue(':id', $id);
$query->execute();
$_SESSION'user'] = $query->fetch();
}
}
public function redirect($page = "http://www.monsite.org/") {
header("Location: $page");
exit();
}
public function login($email,$password,$hash = "default") {
if (empty($email)) {
$error'email'] = "empty";
}
if (empty($password)) {
$error'password'] = "empty";
}
$password = $this->hash($password, $hash);
if (!isset($error)) {
$query = $this->pdo->prepare("SELECT id,email,password FROM users WHERE email = :email");
$query->bindValue(':email', $email);
$query->execute();
$result = $query->fetch();
if (!empty($result)) {
if ($result'password'] == $password) {
$this->session($result'id']);
die("Ok");
// $this->redirect('index.php');
} else {
$error'password'] = "false";
}
} else {
$error'email'] = "false";
}
}
return $error;
}
public function create($email,$password,$nom,$prenom,$hash = "default") {
if (empty($email)) {
$error'email'] = "empty";
}
if (empty($password)) {
$error'password'] = "empty";
}
if (empty($nom)) {
$error'nom'] = "empty";
}
if (empty($prenom)) {
$error'prenom'] = "empty";
}
$id = $this->getID();
$password = $this->hash($password, $hash);
if (!isset($error)) {
$query2 = $this->pdo->prepare("INSERT INTO 'users' ('id', 'email', 'password', 'nom', 'prenom') VALUES (':id', ':email', ':password', ':nom', ':prenom')");
$query2->bindValue(':id', $id);
$query2->bindValue(':email', $email);
$query2->bindValue(':password', $password);
$query2->bindValue(':nom', $nom);
$query2->bindValue(':prenom', $prenom);
$query2->execute();
$error'ok'] = "ok";
}
return $error;
}
public function getID() {
$id = substr(hash("md5", uniqid(rand(),true)), 0,7);
$query = $this->pdo->prepare("SELECT * FROM users WHERE (id = :id)");
$query->bindValue(':id', $id);
$query->execute();
$result = $query->fetch();
if (empty($result)) {
return $id;
} else {
unset($id);
$getID();
}
}
}