IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

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


Sujet :

Langage PHP

  1. #1
    Membre du Club Avatar de Seby63
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2010
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2010
    Messages : 47
    Points : 61
    Points
    61
    Par défaut [PHP-POO/PDO]Vos avis/suggestions sur un simple script
    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 */
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
     
    <?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 = '<div class="error_conec">Mot de passe incorrecte</div>' ;
    					}
    				}
    				else
    				{
    					$this->error_msg = '<div class="error_conec">Ce compte n\'éxiste pas</div>' ;
    				}
    			}
    			else
    			{
    				$this->error_msg = '<div class="error_conec">Champ mot de passe vide</div>' ;
    			}
     
    		}
    		else
    		{
    			$this->error_msg = '<div class="error_conec">Champ pseudo vide</div>' ;
    		}
    	}
     
    	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 */
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php
    for ($i=0; $i < $news->getNewsDispo() ; $i++)
    {
    	echo '<div id="left_n"> <img src="style/images/icon_news.png" alt="News"/> </div>
    	<div id="right_n"><div class="left_n_content_txt2">Par '.$news->getAuthNews($i).'</div><div class="left_n_content_t">'.$news->getTitleNews($i).' : '.date("d/m/Y : H:i", $news->getDateNews($i)).' </div><div class="left_n_content_txt">'.$news->getTextNews($i).'</div></div>
    	<div id="clear_both"></div>' ;
     
    }
    ?>
    /* Affichage du message d'erreur (lors d'une tentative de connexion */
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php $membre->geterrormsg() ; ?>

    Qu'en pensez vous?

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Octobre 2015
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Octobre 2015
    Messages : 69
    Points : 36
    Points
    36
    Par défaut
    Moi je verrai plus en parametre 1 argument dans l'appel.
    Le nombre de news a afficher.

    Pourquoi tu fais pas un singleton ?

  3. #3
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    Citation Envoyé par anju-chan Voir le message
    Pourquoi tu fais pas un singleton ?
    L'intérêt ?


    Tes classes qui renvois des erreurs formatées c'est une erreur de conception. Si tu veux réutiliser tes classes dans un site qui n'utilise pas du tout le même balisage ou dans un script cli ? Tu devrais retourner un code d'erreur et le gérer après comme bon te semble.

    D'un point de vue purement objet , tes classes ont trop de responsabilités. Tu devrais plutôt avoir une classe Membre avec tous les attributs du membre et une classe MembreDb qui gère tout ce qui est relatif à la base de données. C'est parfois moins pratique à utiliser mais c'est plus facile à tester.

    Rien à voir avec la POO mais dans VerifPseudoPass tu met dans une requête des données qui viennent d'un utilisateur sans même les traitée => injection sql assurée. Faire une requête préparée sans passer de paramètre ça sert à rien
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    On notera que le message original a pas loin de 6 ans et qu'on espère que, depuis le temps, Seby maitrise la POO
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  5. #5
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    Mouarf j'avais pas vu la date du post original
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    grunk == stakhanoviste ??

    Répond plus vite que son ombre

Discussions similaires

  1. Votre avis, suggestions sur www.marocjournaux.com
    Par adamcom dans le forum Mon site
    Réponses: 4
    Dernier message: 01/12/2009, 16h55
  2. PHP contre .Net : Vos avis ?
    Par cfeltz dans le forum Langage
    Réponses: 21
    Dernier message: 08/07/2009, 18h58
  3. Vos Avis,suggestions m'interesse
    Par elajjouri dans le forum CV
    Réponses: 3
    Dernier message: 09/10/2008, 22h49
  4. Besoin de vos avis éclairé sur ma base de données
    Par scaleo dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 20/12/2005, 18h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo