[PHP-POO/PDO]Vos avis/suggestion sur un simple script

cs_Seby63 8 Messages postés dimanche 25 juillet 2010Date d'inscription 12 août 2010 Dernière intervention - 30 juil. 2010 à 11:56 - Dernière réponse : cs_Seby63 8 Messages postés dimanche 25 juillet 2010Date d'inscription 12 août 2010 Dernière intervention
- 30 juil. 2010 à 11:57
Bonjour,

Je me lance actuellement dans la POO en PHP. Pour me familiariser je suis donc actuellement en train de faire un script qui permet la connexion d'un membre a un espace membre et l'affichage de News.

Voici le script :

/* Le header */
<?php
session_start() ;

$PARAM_hote='localhost'; // le chemin vers le serveur
$PARAM_port='3306';
$PARAM_nom_bd='php'; // le nom de votre base de données
$PARAM_utilisateur='root'; // nom d'utilisateur pour se connecter
$PARAM_mot_passe=''; // mot de passe de l'utilisateur pour se connecter
$connexion = new PDO('mysql:host='.$PARAM_hote.';port='.$PARAM_port.';dbname='.$PARAM_nom_bd, $PARAM_utilisateur, $PARAM_mot_passe);

class Membre
{

/* Paramètre membre */
private $pseudo ;
private $email ;
private $motdepasse ;
private $error_msg ;

/* Connexion PDO */
private $connexion ;

public function __construct($connexion_PDO)
{
$this->connexion = $connexion_PDO ;
}

public function VerifPseudoPass($data)
{
// Nom des champs du formulaire d'identification -> pseudo//pass
extract($data) ;
$this->pseudo			= trim(strtolower($pseudo)) ;
$this->motdepasse		= trim(strtolower(md5($pass))) ;

if (!empty($this->pseudo))
{
// Si le pseudo n'est pas vide
if (!empty($this->motdepasse))
{
// On vérifie d'abord si le pseudo existe
//$result_pseudo = $this->connexion->query("SELECT COUNT(*) FROM b_membre WHERE pseudo_j='".$this->pseudo."'")->fetchColumn();
$result_pseudo = $this->connexion->prepare("SELECT COUNT(*) FROM b_membre WHERE pseudo_j='".$this->pseudo."'");
$result_pseudo->execute();
$reponse_pseudo=$result_pseudo->fetch(PDO::FETCH_ASSOC);

if ($reponse_pseudo['COUNT(*)'] > 0)
{
// on vérifie ensuite le couple pseudo/mot de passe
$result_couple = $this->connexion->prepare("SELECT COUNT(*) FROM b_membre WHERE pseudo_j='".$this->pseudo."' && password_j='".$this->motdepasse."'");
$result_couple->execute();
$reponse_couple=$result_couple->fetch(PDO::FETCH_ASSOC);
if ($reponse_couple['COUNT(*)'] == 1 )
{
// Tout est ok -> On met à jours les sessions
$_SESSION["membre"] = TRUE ;
$_SESSION["membreid"] = XXX ; 
$_SESSION["login"] = XXX ;

// On rédirige l'utilisateur
$host  = $_SERVER['HTTP_HOST'];
$uri   = rtrim(dirname($_SERVER['PHP_SELF']), '/\\');
$extra = 'ok.php';
header("Location: http://$host$uri/$extra");
exit() ;
}
else
{
$this->error_msg = '
Mot de passe incorrecte
' ;
}
}
else
{
$this->error_msg = '
Ce compte n\'éxiste pas
' ;
}
}
else
{
$this->error_msg = '
Champ mot de passe vide
' ;
}

}
else
{
$this->error_msg = '
Champ pseudo vide
' ;
}
}

public function geterrormsg()
{
echo $this->error_msg ;	
}

} // Fin class Membre

class News
{
private $auth_n ;
private $title_n ;
private $text_n ;
private $date_n ;
private $nbr_news_dispo ;

public function __construct($nbr_n_show, $connexion)
{
$this->nbr_news_dispo = 0 ; /* On initialise les News disponible a 0 */

$show_prepare=$connexion->prepare("SELECT * FROM b_news ORDER BY id DESC LIMIT 0,".$nbr_n_show); // on prépare notre requête
$show_prepare->execute();
while($show_news=$show_prepare->fetch(PDO::FETCH_OBJ))
{
$this->auth_n[] = $show_news->auth_n ;
$this->title_n[] = stripslashes($show_news->title_n) ;
$this->text_n[] = nl2br(stripslashes($show_news->text_n)) ;
$this->date_n[] = $show_news->date_n ;
$this->nbr_news_dispo++;
}
$show_prepare->closeCursor(); // on ferme le curseur des résultats
}

public function getNewsDispo()
{
return $this->nbr_news_dispo ;
}

public function getAuthNews($n)
{
return $this->auth_n[$n] ;
}

public function getTitleNews($n)
{
return $this->title_n[$n] ;
}

public function getTextNews($n)
{
return $this->text_n[$n] ;
}

public function getDateNews($n)
{
return $this->date_n[$n] ;
}


} // Fin class News

/* On crée l'objet $membre */
$membre = new Membre($connexion) ;

/* On crée l'objet News avec l'affichage de x News */
$news = new News(3, $connexion) ;


if (isset($_POST['pseudo'])){$membre->VerifPseudoPass($_POST); }


?>


/* Affichage des News */
<?php
for ($i=0; $i < $news->getNewsDispo() ; $i++)
{
echo '
  


Par '.$news->getAuthNews($i).'

'.$news->getTitleNews($i).' : '.date("d/m/Y : H:i", $news->getDateNews($i)).' 

'.$news->getTextNews($i).'



' ;

}
?>


/* Affichage du message d'erreur (lors d'une tentative de connexion */
<?php $membre->geterrormsg() ; ?>



Qu'en pensez vous?
Afficher la suite 

Votre réponse

1 réponse

cs_Seby63 8 Messages postés dimanche 25 juillet 2010Date d'inscription 12 août 2010 Dernière intervention - 30 juil. 2010 à 11:57
0
Merci
Bonjour,

Je me lance actuellement dans la POO en PHP. Pour me familiariser je suis donc actuellement en train de faire un script qui permet la connexion d'un membre a un espace membre et l'affichage de News.

Voici le script :

/* Le header */
<?php
session_start() ;

$PARAM_hote='localhost'; // le chemin vers le serveur
$PARAM_port='3306';
$PARAM_nom_bd='php'; // le nom de votre base de données
$PARAM_utilisateur='root'; // nom d'utilisateur pour se connecter
$PARAM_mot_passe=''; // mot de passe de l'utilisateur pour se connecter
$connexion = new PDO('mysql:host='.$PARAM_hote.';port='.$PARAM_port.';dbname='.$PARAM_nom_bd, $PARAM_utilisateur, $PARAM_mot_passe);

class Membre
{

/* Paramètre membre */
private $pseudo ;
private $email ;
private $motdepasse ;
private $error_msg ;

/* Connexion PDO */
private $connexion ;

public function __construct($connexion_PDO)
{
$this->connexion = $connexion_PDO ;
}

public function VerifPseudoPass($data)
{
// Nom des champs du formulaire d'identification -> pseudo//pass
extract($data) ;
$this->pseudo			= trim(strtolower($pseudo)) ;
$this->motdepasse		= trim(strtolower(md5($pass))) ;

if (!empty($this->pseudo))
{
// Si le pseudo n'est pas vide
if (!empty($this->motdepasse))
{
// On vérifie d'abord si le pseudo existe
//$result_pseudo = $this->connexion->query("SELECT COUNT(*) FROM b_membre WHERE pseudo_j='".$this->pseudo."'")->fetchColumn();
$result_pseudo = $this->connexion->prepare("SELECT COUNT(*) FROM b_membre WHERE pseudo_j='".$this->pseudo."'");
$result_pseudo->execute();
$reponse_pseudo=$result_pseudo->fetch(PDO::FETCH_ASSOC);

if ($reponse_pseudo['COUNT(*)'] > 0)
{
// on vérifie ensuite le couple pseudo/mot de passe
$result_couple = $this->connexion->prepare("SELECT COUNT(*) FROM b_membre WHERE pseudo_j='".$this->pseudo."' && password_j='".$this->motdepasse."'");
$result_couple->execute();
$reponse_couple=$result_couple->fetch(PDO::FETCH_ASSOC);
if ($reponse_couple['COUNT(*)'] == 1 )
{
// Tout est ok -> On met à jours les sessions
$_SESSION["membre"] = TRUE ;
$_SESSION["membreid"] = XXX ; 
$_SESSION["login"] = XXX ;

// On rédirige l'utilisateur
$host  = $_SERVER['HTTP_HOST'];
$uri   = rtrim(dirname($_SERVER['PHP_SELF']), '/\\');
$extra = 'ok.php';
header("Location: http://$host$uri/$extra");
exit() ;
}
else
{
$this->error_msg = '
Mot de passe incorrecte
' ;
}
}
else
{
$this->error_msg = '
Ce compte n\'éxiste pas
' ;
}
}
else
{
$this->error_msg = '
Champ mot de passe vide
' ;
}

}
else
{
$this->error_msg = '
Champ pseudo vide
' ;
}
}

public function geterrormsg()
{
echo $this->error_msg ;	
}

} // Fin class Membre

class News
{
private $auth_n ;
private $title_n ;
private $text_n ;
private $date_n ;
private $nbr_news_dispo ;

public function __construct($nbr_n_show, $connexion)
{
$this->nbr_news_dispo = 0 ; /* On initialise les News disponible a 0 */

$show_prepare=$connexion->prepare("SELECT * FROM b_news ORDER BY id DESC LIMIT 0,".$nbr_n_show); // on prépare notre requête
$show_prepare->execute();
while($show_news=$show_prepare->fetch(PDO::FETCH_OBJ))
{
$this->auth_n[] = $show_news->auth_n ;
$this->title_n[] = stripslashes($show_news->title_n) ;
$this->text_n[] = nl2br(stripslashes($show_news->text_n)) ;
$this->date_n[] = $show_news->date_n ;
$this->nbr_news_dispo++;
}
$show_prepare->closeCursor(); // on ferme le curseur des résultats
}

public function getNewsDispo()
{
return $this->nbr_news_dispo ;
}

public function getAuthNews($n)
{
return $this->auth_n[$n] ;
}

public function getTitleNews($n)
{
return $this->title_n[$n] ;
}

public function getTextNews($n)
{
return $this->text_n[$n] ;
}

public function getDateNews($n)
{
return $this->date_n[$n] ;
}


} // Fin class News

/* On crée l'objet $membre */
$membre = new Membre($connexion) ;

/* On crée l'objet News avec l'affichage de x News */
$news = new News(3, $connexion) ;


if (isset($_POST['pseudo'])){$membre->VerifPseudoPass($_POST); }


?>


/* Affichage des News */
<?php
for ($i=0; $i < $news->getNewsDispo() ; $i++)
{
echo '
  


Par '.$news->getAuthNews($i).'

'.$news->getTitleNews($i).' : '.date("d/m/Y : H:i", $news->getDateNews($i)).' 

'.$news->getTextNews($i).'



' ;

}
?>


/* Affichage du message d'erreur (lors d'une tentative de connexion */
<?php $membre->geterrormsg() ; ?>



Qu'en pensez vous?
Commenter la réponse de cs_Seby63

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.