Mammouth du PHP |
19672 Messages
19 sept. 2006, 23:06
Ok, effectivement, c'est plus facile de comprendre pourquoi ça marche pas. Tu utilises ta classe pour te connecter. Très bien, maintenant, tu as un objet pour ta connexion. Là où ça se gâte, c'est qu'ensuite tu ne l'utilises plus pour utiliser des fonctions MySQL. Par exemple, tu mets ceci :
<?php
//...
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
//...
?>
Mais de cette manière là, ton objet ne te sert strictement à rien.
L'idée d'utiliser une classe pour accéder aux données, c'est mieux si les méthodes sont dans la classe.
Il serait donc logique que tu transposes ta fonction dans une méthode d'exécution de la requête. On va transformer ça de la manière suivante, lis biens les commentaires que j'ai ajouté dans le code :
-1- la classe :
<?php
class BaseDeDonnee {
var $adresseServeur;
var $nomBase;
var $nomUser;
var $motDePasse;
var $database;
var $erreur;
var $exec; // ressource d'exécution de requête
function BaseDeDonnee( )
{
$this->adresseServeur = "localhost";
$this->nomBase = "docteurpc67";
$this->nomUser = "root";
$this->motDePasse = "";
}
function seConnecter() {
//création de la connexion
$this->database = mysql_connect($this->adresseServeur, $this->nomBase, $this->motDePasse);
if( ! $this->database){
echo 'Impossible de se connecter à la base de données';
return 0;
}
// selection de la bdd
if( !mysql_select_db($this->nomBase, $this->database))
{
echo( mysql_error($this->bdd) );
return 0;
}
}
function executer($sql)
{
$reussi = false;
if(false !== ($this->exec = mysql_query($sql)))
{
$reussi = true;
}
else
{
$this->erreur = 'Erreur SQL !<br>'. $sql .'<br>'. mysql_error();
}
return $reussi;
}
function listedonnees()
{
$retour = false;
/* On tente de récupérer les données */
if(false !== ($donnees = mysql_fetch_assoc($this->exec)))
{
/* On assigne les données pour le retour */
$retour = $donnees;
}
else
{
$this->erreur = 'Erreur SQL !<br>'. $sql .'<br>'. mysql_error();
}
/* On retourne les données s'il n'y a pas eu de problème, sinon on retournera FALSE */
return $retour;
}
function seDeconnecter() {
mysql_close($this->database);
}
function requete($requete) {
$resultat = mysql_query ($requete);
return $resultat;
}
}
?>
Et ensuite ta page :
<?php
// pensez a ouvrir une connexion vers mysql ici
require_once ('BaseDeDonnee.php');
$DB = new BaseDeDonnee();
$DB->seConnecter();
if(isset($_POST) && !empty($_POST['login']) && !empty($_POST['pass']))
{
extract($_POST);
// on recupère le password de la table qui correspond au login du visiteur
$sql = "select pwd from tbl_user where login='".$login."'";
/* On appelle une méthode de la classe pour exécuter la requête qu'on envoie en paramètre */
$req = $DB->executer($sql);
/* On vérifie le retour avant de continuer */
if(false !== $req)
{
/* l'exécution de la requête est correcte : on utilise une autre méthode pour récupérer le retour */
$data = $DB->listedonnees();
if(false !== $data)
{
if($data['pwd'] != $pass)
{
echo '<p>Mauvais login / password. Merci de recommencer</p>';
include('login.htm'); // On inclus le formulaire d'identification
exit;
}
else
{
session_start();
$_SESSION['login'] = $login;
echo '<p>Identification réussis !</p>';
}
}
else
{
/* La récupération des données a échoué, on récupère le message d'erreur pour affichage (débuggage seulement) */
echo($DB->erreur);
}
}
else
{
/* L'exécution de la requête a échoué, on récupère le message d'erreur pour affichage (débuggage seulement) */
echo($DB->erreur);
}
}
else
{
echo '<p>Vous avez oublié de remplir un champ.</p>';
include('login.htm'); // On inclut le formulaire d'identification
exit;
}
?>
VOilà, teste ça et n'hésite pas à demander des explications si un point t'échappe ou te semble abstrait, il y aura toujours quelqu'un dans les parages pour te remettre sur le chemin

Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse 