Problème fonction login PDO

Pti Filou -  
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) :

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

jojo673 Messages postés 235 Statut Membre 44
 
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.
0
Pti Filou
 
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.
0
jojo673 Messages postés 235 Statut Membre 44
 
C'est bien compliqué tout ça :)
Et quand tu fais appel à la méthode $pdo->select(...);
où est définie cette méthode select() ?
0
Pti Filou
 
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jojo673 Messages postés 235 Statut Membre 44
 
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 :)
0
Pti Filou
 
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
0
jojo673 Messages postés 235 Statut Membre 44
 
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();
0
Pti Filou
 
^^" pas très concluant malheureusement...
cela me renvoie sur localhost, en dehors de mon projet lorsque je test de me loguer,
de + en + étrange
0
jojo673 Messages postés 235 Statut Membre 44
 
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.
0