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

  1. 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
  2. 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
  3. 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
  4. 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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. 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
  7. 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
  8. 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
  9. 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
  10. 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