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 :

Reformulation de code [PHP 5.4]


Sujet :

Langage PHP

  1. #1
    Candidat au Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Janvier 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2015
    Messages : 4
    Points : 3
    Points
    3
    Par défaut Reformulation de code
    Bonjour,

    Je suis débutant en php, j'ai réalisé un script de section membre, ce code fonctionne correctement cependant j'aimerais le rendre plus claire en utilisant une class avec deux fonctions, une fonction pour le login et une autre pour la gestion d'erreurs. Après plusieurs essais, les résultats ne pas concluant!
    Si une personne plus experte pouvait m'aider à résoudre ce problème, je le remercie d'avance.

    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
    <?php
     
            //PDO Database Connection
            try {
                $databaseConnection = new PDO('mysql:host=' . _HOST_NAME_ . ';dbname=' . _DATABASE_NAME_, _USER_NAME_,
                    _DB_PASSWORD);
                $databaseConnection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            } catch
            (PDOException $e) {
                echo 'ERROR: ' . $e->getMessage();
            }
     
            if (isset($_POST['submit'])) {
                $errMsg = '';
                //username and password sent from Form
                $username = trim($_POST['username']);
                $password = trim($_POST['password']);
     
                if ($username == '' and $password != '' ) {
                    $errMsg .= 'Your Username is required<br>';
                }
                if ($password == '' and $username != '') {
                    $errMsg .= 'Your Password is required<br>';
                }
                if ($username == '' and $password == ''){
                      $errMsg .= 'Your username and Password are required<br>';
                }
     
                $username = addslashes($username);
                $password = sha1($password);
                if ($errMsg == '') {
                    $records = $databaseConnection->prepare
                    ('SELECT id,username,password
                      FROM  tbl_users
                      WHERE username = :username
                      AND password = :password');
                    $records->bindParam(':username', $username);
                    $records->bindParam(':password', $password);
                    $records->execute();
                    $count = $records->rowCount();
                    if ($count > 0) {
                        $_SESSION['Auth'] = array(
                            'username' => $username,
                            'password' => $password
                        );
                    } else {
                        $errMsg .= 'Mauvais identifiant<br>';
                    }
                }
            }
            if (isset ($_SESSION['Auth'])) {
                header('location: pagesecurisee.php');
            }

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Montre nous ton meilleur essai plutôt.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre averti
    Avatar de Kyuudan
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2015
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2015
    Messages : 100
    Points : 308
    Points
    308
    Billets dans le blog
    1
    Par défaut
    Salut !

    Déjà je pense que tu pourrais séparer tes instructions de connexion dans un fichier php que tu appelles "connect.php" par exemple.
    Ensuite il te suffit d'appeler ce fichier depuis chaque page php de la sorte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    require("connect.php");
    Cordialement,
    «Soyez la mesure de la qualité. De nombreuses personnes n’ont pas l’habitude d’un environnement où ce qui est attendu, c’est l’excellence.» Steve Jobs

    Pense à mettre un !

    de mettre vos sujets en une fois que vous avez la réponse à votre question !

  4. #4
    Candidat au Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Janvier 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2015
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    sabotage
    Merci pour votre réponse.

    Désolé mais je n'ai rien gardé!
    j'ai réussi à créer une class Login ou j'ai créer une fonction Se_connecter() qui fonctionnait,
    j'ai essayé de créer une autre fonction Login_errors() dans cette class Login pour rassembler les messages d'erreurs mais cette fonction n'a jamais fonctionné et là, malgré le temps passé, je bloque.
    Je précise que ce fichier est actuellement placé grâce à require("Login.php"), celà fonctionne correctement, j’essaie juste de m'améliorer afin d'utiliser les class pour rendre mon code plus clair.

    Kyuudan

    Ce fichier est déjà séparé du celui contenant le formulaire.
    Tout cela fonctionne correctement, j’essaie seulement de reformuler ce code pour l'utiliser sous forme de class avec une fonction Se_connecter() pour les instructions de connexion et une autre fonction Login_errors() pour gérer les erreurs dans le cas ou le formulaire serait mal compléter.

  5. #5
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Désolé mais je n'ai rien gardé!
    Et souhaites qu'on l'écrive pour toi ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  6. #6
    Candidat au Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Janvier 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2015
    Messages : 4
    Points : 3
    Points
    3
    Par défaut Reformatage du code - réponse à sabotage
    Au stade de mes connaissances, d'avoir créer un système de sécurisation par session qui fonctionne, même s'il reste basique, même s'il est certainement imparfait, est déjà un un gros progrès. J'aimerais maintenant l'ameliorer encore pour le rendre moins "fouillis" !
    Je me suis adressé a ce forum car, malgré mes recherches, je bloque sur ce probleme.
    Sans demander que l'on fasse pour moi, j'espère trouver quelqu'un qui me donnerait des pistes pour pouvoir progresser sur ce probléme, est ce qu'il est plus judicieux de créer deux class distinct ? Juste avoir quelque piste pour avancer plus rapidement !
    bonne soirée.

  7. #7
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 576
    Points : 2 440
    Points
    2 440
    Par défaut
    Salut,

    Ton code, s'il s'arrête là, est très simple et n'a pas besoin d'être divisé en fonctions/classes.

    Maintenant, si tu veux utiliser des classes (ou des fonctions), par exemple pour apprendre les basses de la POO, il faut réflechir en termes de responsabilités: chaque classe/fonction doit avoir une (et une seule) responsabilité.
    - tu as une partie qui s'occupe uniquement de la création et la connexion à la base de données. C'est une responsabilité distincte, donc ça doit être dans une classe/fonction séparée.
    - tu as une partie qui valide $_POST et renvoie des messages d'erreur. Responsabilité distincte, donc entité séparée.
    - tu as une partie qui vérifie si l'utilisateur existe dans la base de données. Responsabilité distincte, donc entité séparée.

    Autre chose, tu as des parties critiquables dans ton code.
    - Pourquoi tu utilises trim() sur le nom d'utilisateur et le mot de passe? Tu penses qu'un mot de passe ne doit pas avoir d'espace en tant que premier ou dernier caractère? Un espace est un caractère comme un autre. Les gestionnaire de mots de passe (lastpass, keepass,...) peuvent très bien ajouter un espace au début ou à la fin d'un mot de passe. Tu viens d'un seul coup de rejeter tous les utilisateurs de ces logiciels (et tout le monde devrait les utiliser, il y aurait beaucoup moins de mots de passe crackés)

    - Pourquoi tu utilises addslashes() sur $username? Si c'est pour le SELECT, tu utilises déjà les requêtes préparées (et addslashes n'est pas fait pour être utilisée avec une base de données de toutes façons)
    - Puisque tu débutes, passe directement à PHP 5.6 ou au moins 5.5, et utilise password_hash et password_verify pour encrypter tes mots de passe. sha1 n'a pas été conçu pour le chiffrement de mots de passe. Et utilisé non salé comme tu le fais, ce n'est pas conseillé du tout.
    - rowCount() ne donne pas toujours des résultats fiables sur un SELECT. Utilises fetchAll plutôt, puis compte le nombre de valeur dans le tableau.

  8. #8
    Candidat au Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Janvier 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2015
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Bonsoir et merci pour ta réponse très détaillée, c'est exactement ce que j'espérais, mon but étant de comprendre chaque ligne de code et surtout pas de copier un script récupérer sur Github ou phpclasses.
    Je vais reprendre point par point toutes tes recommandations pour retravailler mon code.
    J'apprends avec la version php 5.6 en utilisant pdo , a ce stade de mes connaissances, c'est déjà suffisant !
    Mais je veux aussi pouvoir structurer mon code avec des class pour pouvoir m'intéresser a la POO et l'architecture MVC lorsque j'aurai acquis des connaissances suffisantes, pour l'instant, j'en suis très loin

    Merci encore pour m'avoir accordé un peu de ton temps.

  9. #9
    Membre averti
    Avatar de Kyuudan
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2015
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2015
    Messages : 100
    Points : 308
    Points
    308
    Billets dans le blog
    1
    Par défaut
    Pense à mettre le sujet en "résolu"

    Cordialement,
    «Soyez la mesure de la qualité. De nombreuses personnes n’ont pas l’habitude d’un environnement où ce qui est attendu, c’est l’excellence.» Steve Jobs

    Pense à mettre un !

    de mettre vos sujets en une fois que vous avez la réponse à votre question !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2007] Reformulation d'un code
    Par damiot dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 15/04/2010, 17h02
  2. De la rapidité du code
    Par jfloviou dans le forum Contribuez
    Réponses: 233
    Dernier message: 29/05/2009, 02h17
  3. [MFC](encapsulation ADO) ou placer le code
    Par philippe V dans le forum MFC
    Réponses: 2
    Dernier message: 13/06/2002, 14h58
  4. Explorateur de code C
    Par Zero dans le forum C
    Réponses: 14
    Dernier message: 06/06/2002, 09h41
  5. OmniORB : code sous Windows et Linux
    Par debug dans le forum CORBA
    Réponses: 2
    Dernier message: 30/04/2002, 17h45

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