Problème fonction login PDO
Pti Filou
-
jojo673 Messages postés 235 Statut Membre -
jojo673 Messages postés 235 Statut Membre -
Bonjour à toutes & à tous,
je vous soumet mon problème:
J'ai créé une fonction de login me permettant de connecter un utilisateur membre à une application qui viendra se greffer sur un site internet, voici la fonction (tiré d'un fiichier Membre.class.php) :
le $pdo en question est dans un fichier init.php, chargé depuis ma page index :
et voila ma fonction database:
je me retrouve avec un message d'erreur de ce type :
Fatal error: Call to undefined method PDO::select() in D:\Programmes\Wamp\www\Marble\php\classes\Membre.class.php on line 58 ( la ligne du "$a = $pdo->select("membre","nom='$u' and mot_de_passe='$p'");" )
Il semblerait qu'il ne reconnaisse pas la fonction select,
Que puis je fais pour corriger cela ?
Merci d'avance :)
je vous soumet mon problème:
J'ai créé une fonction de login me permettant de connecter un utilisateur membre à une application qui viendra se greffer sur un site internet, voici la fonction (tiré d'un fiichier Membre.class.php) :
function login($u, $p) {
global $pdo;
if ($u && $p) {
// recherche du compte
//Si il a retourne un login et mot de passe
$_SESSION['nom'] = $u;
$_SESSION['mot_de_passe'] = $p;
// remplacer les ' et # par des espaces
$u = str_replace(array("'","#"),"",$u);
$a = $pdo->select("membre","nom='$u' and mot_de_passe='$p'");
if ($a) {
return true;
}else{
return false;
}
}
return false;
}
le $pdo en question est dans un fichier init.php, chargé depuis ma page index :
include_once("Database.class.php");
$pdo = new database();
et voila ma fonction database:
class database {
function database($base='test') {
$this->_id = mysql_connect('localhost','XXX','XXX') or die('Connexion bdd impossible!');
mysql_select_db($base) or die('Selection bdd '.$base.' impossible!');
$this->set_debug();
}}
//XXX remplacés par nom et mdp
je me retrouve avec un message d'erreur de ce type :
Fatal error: Call to undefined method PDO::select() in D:\Programmes\Wamp\www\Marble\php\classes\Membre.class.php on line 58 ( la ligne du "$a = $pdo->select("membre","nom='$u' and mot_de_passe='$p'");" )
Il semblerait qu'il ne reconnaisse pas la fonction select,
Que puis je fais pour corriger cela ?
Merci d'avance :)
A voir également:
- Problème fonction login PDO
- Fonction si ou - Guide
- Kelma login - Forum Réseaux sociaux
- On me demande mon login ✓ - Forum Webmastering
- Fonction trier excel - Guide
- Cette fonction n'est pas disponible actuellement tv lg - Forum Téléviseurs
9 réponses
Utilise "prepare" et "execute" :
De cette manière la requête est préparée avant d'être exécutée ce qui permet de se protéger contre les injections SQL.
$a = $pdo->prepare("SELECT * FROM membre WHERE nom= :nom AND mot_de_passe= :mdp");
$a->execute(array(":nom" => $u, ":mdp" => $p));
De cette manière la requête est préparée avant d'être exécutée ce qui permet de se protéger contre les injections SQL.
je me suis mal exprimé :)
le $pdo n'est pas celui que tu crois, ce n'est pas un objet pdo, je me suis trompé.
hors la fonction database n'utilise pas pdo, erreur de ma part d'ailleurs, je corrige..
a la place de $pdo, j'utilise $bdd, ca sera un peu moins farfelue deja.
le $pdo n'est pas celui que tu crois, ce n'est pas un objet pdo, je me suis trompé.
$pdo = new database;
hors la fonction database n'utilise pas pdo, erreur de ma part d'ailleurs, je corrige..
a la place de $pdo, j'utilise $bdd, ca sera un peu moins farfelue deja.
C'est bien compliqué tout ça :)
Et quand tu fais appel à la méthode $pdo->select(...);
où est définie cette méthode select() ?
Et quand tu fais appel à la méthode $pdo->select(...);
où est définie cette méthode select() ?
La méthode select est définie dans le fichier Database.class.php,
mais celle ci est fonctionnelle :) deja testée
un seul parametre obligatoire, le nom de la table
mais celle ci est fonctionnelle :) deja testée
function select($from, $where="1", $what="*", $option="", $utf8=true) {
$q = "select $what from $from where $where $option";
// echo "<br>req: $q";
$r = mysql_query($q) or $this->debug($q);
if (mysql_num_rows($r)) {
while ($o = mysql_fetch_object($r)) {
unset($p);
foreach ($o as $k=>$v) {
if($utf8) $p->$k = $this->utf8($v,"decode");
else $p->$k = $v ;
}
$a[] = $p;
}
} else {
$a = false;
}
return $a;
}
un seul parametre obligatoire, le nom de la table
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Et est-ce que cette méthode est bien dans la classe database de tel sorte :
Car d'après le message d'erreur il ne trouve pas cette méthode, donc elle ne doit pas être au bon endroit.
Ou alors il y à un conflit avec php qui croît que $pdo est l'objet PDO de php, mais si tu as bien changé le nom en $bdd, je mise sur le mauvais endroit :)
class database {
function database(...) {...}
function select(...) { ... }
}
Car d'après le message d'erreur il ne trouve pas cette méthode, donc elle ne doit pas être au bon endroit.
Ou alors il y à un conflit avec php qui croît que $pdo est l'objet PDO de php, mais si tu as bien changé le nom en $bdd, je mise sur le mauvais endroit :)
oui les méthodes sont bien implémentées de cette manière.
note: j'ai essayé de faire de meme avec un affichage de ce que j'ai deja en base de données avec une fonction getListeMembres() :
et ca marche impec...
alors que l'autre non
note: j'ai essayé de faire de meme avec un affichage de ce que j'ai deja en base de données avec une fonction getListeMembres() :
public function getListeMembres(){
global $bdd;
return $bdd->select("membre");
}
et ca marche impec...
alors que l'autre non
J'avoue je bloque un peu aussi..
Peut-être dernière chance : essaye de définir ta classe membre comme héritage de la classe database :
Et ensuite d'appeler la méthode select() avec :
Peut-être dernière chance : essaye de définir ta classe membre comme héritage de la classe database :
class membre extends database { ... }
Et ensuite d'appeler la méthode select() avec :
parent::select();