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

PHP & Base de données Discussion :

Vérification de mon code


Sujet :

PHP & Base de données

  1. #1
    Nouveau candidat au Club Avatar de Baugeois-Sélidaires
    Homme Profil pro
    Président de l'association Baugeois-Sélidaires
    Inscrit en
    Novembre 2019
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Président de l'association Baugeois-Sélidaires
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Novembre 2019
    Messages : 1
    Par défaut Vérification de mon code
    Bonjour,

    Je suis en cours de création d'un site internet en PHP/Mysql pour la gestion de mon association. Je suis totalement novice en la matière et apprends au fur et a mesure de cours sur internet.

    Je viens de creer le début de mon formulaire d'inscriptin, qui fonctionne très bien, et enregistre parfaitement sur la base de données. Cependant, avant de continuer, je souhaiterais avoir vos avis sur celui ci.

    Merci d'avance de vos commentaire.

    PS : Essayer d'être indulgent, je suis novice de chez novice lol
    PS2: Prochaine étape : champ date de naissance et civilité

    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
     <!-- Début du formulaire d'inscription des particuliers -->
         <?php
     
     
    if(isset($_POST['forminscription'])) {
    	//récupération des informations saisies dans les champs du formulaire
       $pseudo = htmlspecialchars($_POST['pseudo']);
       $nom = htmlspecialchars($_POST['nom']);
       $prenom = htmlspecialchars($_POST['prenom']);
       $mail = htmlspecialchars($_POST['mail']);
       $mail2 = htmlspecialchars($_POST['mail2']);
       $profession = htmlspecialchars($_POST['profession']);
    	$adresse1 = htmlspecialchars($_POST['adresse1']);
    	$adresse2 = htmlspecialchars($_POST['adresse2']);
    	$codepostal = htmlspecialchars($_POST['codepostal']);
    	$ville = htmlspecialchars($_POST['ville']);
    	$telfixe = htmlspecialchars($_POST['telfixe']);
    	$telgsm = htmlspecialchars($_POST['telgsm']);
       $mdp = sha1($_POST['mdp']);
       $mdp2 = sha1($_POST['mdp2']);
       //vérification que les champs ne sont pas vide
       if(!empty($_POST['pseudo']) AND !empty($_POST['nom']) AND !empty($_POST['prenom']) AND !empty($_POST['mail']) AND !empty($_POST['mail2']) AND !empty($_POST['profession']) AND !empty($_POST['adresse1']) AND !empty($_POST['adresse2']) AND !empty($_POST['codepostal']) AND !empty($_POST['ville']) AND !empty($_POST['telfixe']) AND !empty($_POST['telgsm']) AND !empty($_POST['mdp']) AND !empty($_POST['mdp2'])) {
    	   //vérifie que le pseudo ne dépasse pas les 255 caractères
          $pseudolength = strlen($pseudo);
          if($pseudolength <= 255) {
    		  //vérifie que l'adresse mail n'est pas deja utilisée
             if($mail == $mail2) {
                if(filter_var($mail, FILTER_VALIDATE_EMAIL)) {
                   $reqmail = $bdd->prepare("SELECT * FROM membres WHERE mail = ?");
                   $reqmail->execute(array($mail));
                   $mailexist = $reqmail->rowCount();
                   if($mailexist == 0) {
    				   //vérifie que les 2 mot de passe correspondent
                      if($mdp == $mdp2) {
    					  // Préparation de l'insertion des données dans la base de données
                         $insertmbr = $bdd->prepare("INSERT INTO membres(pseudo, nom, prenom, mail, profession, adresse1, adresse2, codepostal, ville, telfixe, telgsm, mdp) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
    					  //envois des données dans la base de données                  
                         $insertmbr->execute(array($pseudo, $nom, $prenom, $mail, $profession, $adresse1, $adresse2, $codepostal, $ville, $telfixe, $telgsm, $mdp));
    					 //message indiquant que le compte a bien était creer et lien de redirection vers la page de connection
                         $erreur = "Votre compte a bien été créé ! <a href=\"index.php\">Me connecter</a>";
                      } else {
    					  //message indiquant que les mot de passe ne sont pas identiques
                         $erreur = "Vos mots de passes ne correspondent pas !";
                      }
                   } else {
    				   //message indiquant que l'adresse mail est deja attribuée a un compte
                      $erreur = "Adresse mail déjà utilisée !";
                   }
                } else {
    				//message indiquant que l'adresse n'est pas valide, donc pas de type XXXX@XXXX.XX
                   $erreur = "Votre adresse mail n'est pas valide !";
                }
             } else {
    			 //message indiquant que les 2 adresses mail ne sont pas identique
                $erreur = "Vos adresses mail ne correspondent pas !";
             }
          } else {
    		  //Message indiquant que la limite du pseudo est de 255 caractères
             $erreur = "Votre pseudo ne doit pas dépasser 255 caractères !";
          }
       } else {
    	   //message obligeant le remplissage de tous les champs
          $erreur = "Tous les champs doivent être complétés !";
       }
    }
    ?>
    	 <section>
    		<div id="agileits-sign-in-page" class="sign-in-wrapper">
    			<div class="agileinfo_signin">
    			<h3>INSCRIPTION</h3>
                <?php
    			//ici s'affiche les messages d'erreurs lié au champ du formulaire
             if(isset($erreur)) {
                echo '<font color="red">'.$erreur."</font>";
             }
             ?>
             <br />
             <!--Début du formulaire d'inscription HTML-->
    <form method="POST" action="">
     
    <!--Champ Pseudo-->
    <input type="text" placeholder="Votre pseudo" id="pseudo" name="pseudo" value="<?php if(isset($pseudo)) { echo $pseudo; } ?>" />
    <!--Champ Nom-->              
    <input type="text" placeholder="Votre nom" id="nom" name="nom" value="<?php if(isset($nom)) { echo $nom; } ?>" />
    <!--Champ Prénom-->
    <input type="text" placeholder="Votre Prénom" id="prenom" name="prenom" value="<?php if(isset($prenom)) { echo $prenom; } ?>" />
    <!--Champ Email-->                 
    <input type="email" placeholder="Votre mail" id="mail" name="mail" value="<?php if(isset($mail)) { echo $mail; } ?>" />
    <!--Champ confirmation d'email-->                  
    <input type="email" placeholder="Confirmez votre mail" id="mail2" name="mail2" value="<?php if(isset($mail2)) { echo $mail2; } ?>" />
    <!--Champ profession-->
    <input type="text" placeholder="Votre Profession" id="profession" name="profession" value="<?php if(isset($profession)) { echo $profession; } ?>" />
    <!--Champ adresse-->
    <input type="text" placeholder="Votre adresse" id="adresse1" name="adresse1" value="<?php if(isset($adresse1)) { echo $adresse1; } ?>" />
    <!--Champ complement d'adresse-->
    <input type="text" placeholder="Complément d'adresse" id="adresse2" name="adresse2" value="<?php if(isset($adresse2)) { echo $adresse2; } ?>" />
    <!--Champ code postal-->
    <input type="text" placeholder="Votre Code Postal" id="codepostal" name="codepostal" value="<?php if(isset($codepostal)) { echo $codepostal; } ?>" />
    <!--Champ ville-->
    <input type="text" placeholder="Votre Ville" id="ville" name="ville" value="<?php if(isset($ville)) { echo $ville; } ?>" />
    <!--Champ telephone fixe-->
    <input type="tel" placeholder="Votre Telephone Fixe" id="telfixe" name="telfixe" value="<?php if(isset($telfixe)) { echo $telfixe; } ?>" />
    <!--Champ telephone mobile-->    
       <input type="tel" placeholder="Votre Telephone Mobile" id="telgsm" name="telgsm" value="<?php if(isset($telgsm)) { echo $telgsm; } ?>" />  
    <!--Champ mot de passe-->            
    <input type="password" placeholder="Votre mot de passe" id="mdp" name="mdp" />
    <!--Champ confirmation du mot de passe-->               
    <input type="password" placeholder="Confirmez votre mdp" id="mdp2" name="mdp2" />
     
                         <br />
    <!--Bouton de validation du formulaire-->                     
    <input type="submit" name="forminscription" value="Je m'inscris" />
     
             </form>
     <!--Fin du formulaire d'inscription HTML-->        
     
    			</div>
    		</div>
    	</section>
    	<!-- //Fin du fomulaire d'inscription des membres particuliers -->

  2. #2
    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 : 40
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Techniquement :
    • Pas de htmlspecialchars avant l'insertion en base. Les fonctions htmlxxx sont des fonctions d'affichage. Pour l'insertion en base, le mieux est d'utiliser les méthodes de l'API d'accès à la base. En l'occurrence, tu utilises déjà des requêtes préparées et tu passes bien les paramètres comme il faut, donc c'est géré
    • Il vaut mieux comparer le mot de passe et sa confirmation avant de les hacher.
    • D'ailleurs, utilise un vrai système de hash pour le mot de passe. Il y a des fonctions pour ça Mots de passe sécurisés avec PHP.
    • Pour la vérification de l'existence du mail en base, tu peux faire une simple requête COUNT, vu que tu ne t'intéresses absolument pas aux données :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      $reqmail = $bdd->prepare("SELECT count(*) FROM membres WHERE mail = ?");
      $reqmail->execute(array($mail));
      $mailexist = $reqmail->fetchColumn();
      if($mailexist == 0) {


    Fonctionnellement :
    • Tous les champs ont obligatoires ? Même le complément d'adresse et les deux téléphones ?
    • Une fois que la vérification en PHP fonctionnera bien, tu pourra ajouter l'attribut required sur tes champs, histoire de faciliter la vie de ton utilisateur. (ça ne dispense pas de la validation en PHP hein )
    • De la même façon, tu peux mettre un attribut maxlength sur le pseudo.
    • Au niveau de la construction de ton formulaire, tu peux éventuellement ajouter des <label> pour nommer chaque champ


    Pour le reste, jusqu'ici tout va bien
    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]

  3. #3
    Membre Expert Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 895
    Par défaut
    J'ajouterais :
    1. indentation chelou en PHP et inexistante en HTML (ça vient peut-être du copier/coller mais dans le doute, je le mentionne ^^)
    2. éviter les conditions compliquées à 300 conditions

    C'est facilement évitable avec l'utilisation de boucles et fonctions :
    (en plus, avec ce code, il suffit de commenter une ligne de l'array pour qu'un champ ne soit plus requis, car comme @Celira l'a dit, c'est bizarre que tout soit requis)
    Code php : 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
    $form_errors = [];
    $required_fields = [
        'pseudo',
        'nom',
        'mail',
        'mail2',
        'profession',
        'adresse1',
        'adresse2',
        'codepostal',
        'ville',
        'telfixe',
        'telgsm',
        'mdp',
        'mdp2'
    ];
    foreach ($required_fields AS $v) {
        if (empty($_POST[$v])) {
            $form_errors[$v] = 'empty';
        }
    }
     
    // On traite maintenant les cas particuliers
    // Pour certains champs, il faudrait quand-même vérifier leurs valeurs, même s'il y a des erreurs (à voir en fonction de chaque champ)
    if (empty($form_errors)) {
        // Email valide
        if (!filter_var($mail, FILTER_VALIDATE_EMAIL)) {
            $form_errors['email'] = 'invalid';
        }
        // Email does not exist
        // ...
        // Autres vérifications
        // ...
    }
    // Si toujours pas d'erreurs, on va pouvoir traiter l'insertion en DB
    if (empty($form_errors)) {
     
    }


    3. la tendance actuelle est d'éviter tous les if/else et garder un maximum de if uniquement. Cela permet également d'avoir toujours une valeur par défaut à quelque chose (même si cette valeur par défaut doit être un string vide). Ton code à ce niveau-là est pas très lisible :/ il y a également trop d'imbrications (if imbriqués)
    Tout cela est également résolu directement par le code plus haut

  4. #4
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 418
    Par défaut
    Et n'utilises pas l'opérateur AND mais plutôt &&.

    AND a un comportement un peu particulier, tu pourrais avoir des surprises dans certains cas, ne l'utilises qu'en connaissance de cause. De même l'opérateur classique "ou" se traduit par || et non pas OR

Discussions similaires

  1. Vérification de mon code
    Par Lamat16 dans le forum Odoo (ex-OpenERP)
    Réponses: 1
    Dernier message: 15/01/2018, 11h40
  2. [V8] Vérification de mon code
    Par Lamat16 dans le forum Odoo (ex-OpenERP)
    Réponses: 14
    Dernier message: 28/12/2017, 09h24
  3. Réponses: 7
    Dernier message: 20/09/2010, 11h17
  4. Mon code n'est pas interprété !
    Par korriganez dans le forum Langage
    Réponses: 3
    Dernier message: 31/05/2006, 15h46
  5. [langage] algo de bissection dans mon code
    Par killy dans le forum Langage
    Réponses: 5
    Dernier message: 19/01/2004, 18h35

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