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 :)
9 réponses
-
Utilise "prepare" et "execute" :
$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é.$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() ? -
La méthode select est définie dans le fichier Database.class.php,
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 :
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() :
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 :class membre extends database { ... }
Et ensuite d'appeler la méthode select() avec :parent::select();
-
^^" pas très concluant malheureusement...
cela me renvoie sur localhost, en dehors de mon projet lorsque je test de me loguer,
de + en + étrange -
Bon alors je ne vois pas trop d'où ça viens ^^
Si tu veux envois les fichiers source, j'essayerai d'y jeter un oeuil.