Formulaire d'inscription

Signaler
Messages postés
24
Date d'inscription
jeudi 26 septembre 2019
Statut
Membre
Dernière intervention
8 avril 2020
-
 Ortolan -
Bonjour, je sais que CCM est fait pour aider a trouver les solutions, j'en suis cependant arriver à la conclusion que je ne réussirai jamais a faire ce que je voulais faire, c'est a dire un formulaire utilisant PhPMyAdmin et bref le PHP sauf que la plupart des discussion et/ou des "tutoriel" date de 3-4 voir même 5 ans pour certains, ceux-ci n'étant plus du tout d'actualité je ne trouve strictement aucune source d'aide. C'est pourquoi je me tourne vers CCM en dernier recours.

Voici ce que j'ai réussi a obtenir après de longues heures de recherches et qui pourtant ne fonctionne pas,

  <?php
$bdd = new PDO('mysql:host=127.0.0.1;dbname=espace_membre', 'root', '');
 
if(isset($_POST['forminscription'])) {
   $pseudo = htmlspecialchars($_POST['pseudo']);
   $mail = htmlspecialchars($_POST['mail']);
   $mail2 = htmlspecialchars($_POST['mail2']);
   $mdp = sha1($_POST['mdp']);
   $mdp2 = sha1($_POST['mdp2']);
   if(!empty($_POST['pseudo']) AND !empty($_POST['mail']) AND !empty($_POST['mail2']) AND !empty($_POST['mdp']) AND !empty($_POST['mdp2'])) {
      $pseudolength = strlen($pseudo);
      if($pseudolength <= 255) {
         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) {
                  if($mdp == $mdp2) {
                     $insertmbr = $bdd->prepare("INSERT INTO membres(pseudo, mail, motdepasse) VALUES(?, ?, ?)");
                     $insertmbr->execute(array($pseudo, $mail, $mdp));
                     $erreur = "Votre compte a bien été créé ! <a href=\"connexion.php\">Me connecter</a>";
                  } else {
                     $erreur = "Vos mots de passes ne correspondent pas !";
                  }
               } else {
                  $erreur = "Adresse mail déjà utilisée !";
               }
            } else {
               $erreur = "Votre adresse mail n'est pas valide !";
            }
         } else {
            $erreur = "Vos adresses mail ne correspondent pas !";
         }
      } else {
         $erreur = "Votre pseudo ne doit pas dépasser 255 caractères !";
      }
   } else {
      $erreur = "Tous les champs doivent être complétés !";
   }
}
?>
<html>
   <head>
      <title>TUTO PHP</title>
      <meta charset="utf-8">
   </head>
   <body>
      <div align="center">
         <h2>Inscription</h2>
         <br /><br />
         <form method="POST" action="">
            <table>
               <tr>
                  <td align="right">
                     <label for="pseudo">Pseudo :</label>
                  </td>
                  <td>
                     <input type="text" placeholder="Votre pseudo" id="pseudo" name="pseudo" value="<?php if(isset($pseudo)) { echo $pseudo; } ?>" />
                  </td>
               </tr>
               <tr>
                  <td align="right">
                     <label for="mail">Mail :</label>
                  </td>
                  <td>
                     <input type="email" placeholder="Votre mail" id="mail" name="mail" value="<?php if(isset($mail)) { echo $mail; } ?>" />
                  </td>
               </tr>
               <tr>
                  <td align="right">
                     <label for="mail2">Confirmation du mail :</label>
                  </td>
                  <td>
                     <input type="email" placeholder="Confirmez votre mail" id="mail2" name="mail2" value="<?php if(isset($mail2)) { echo $mail2; } ?>" />
                  </td>
               </tr>
               <tr>
                  <td align="right">
                     <label for="mdp">Mot de passe :</label>
                  </td>
                  <td>
                     <input type="password" placeholder="Votre mot de passe" id="mdp" name="mdp" />
                  </td>
               </tr>
               <tr>
                  <td align="right">
                     <label for="mdp2">Confirmation du mot de passe :</label>
                  </td>
                  <td>
                     <input type="password" placeholder="Confirmez votre mdp" id="mdp2" name="mdp2" />
                  </td>
               </tr>
               <tr>
                  <td></td>
                  <td align="center">
                     <br />
                     <input type="submit" name="forminscription" value="Je m'inscris" />
                  </td>
               </tr>
            </table>
         </form>
         <?php
         if(isset($erreur)) {
            echo '<font color="red">'.$erreur."</font>";
         }
         ?>
      </div>
   </body>
</html> 


de plus, le fameux FONT ne fonctionne plus en HTML5 et je ne veut pas utiliser de CSS (en tout cas pas dans un fichier externe) si jamais vous avez une soluce pour sa aussi je suis preneur


Merci pour votre aide !

2 réponses

Messages postés
28531
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
6 juin 2020
2 500
Bonjour,
un formulaire utilisant PhPMyAdmin

PhpMyadmin étant un "logiciel" développé en PHP pour manipuler les Bases de données Mysql, je suppose que tu veux, en réalité, faire un formulaire utilisant une bdd Mysql. ?

Plusieurs remarques concernant ton code :

- la fonction htmlspecialchar ne doit s'utiliser que lors de l'affichage. En aucun cas pour stocker les données dans une bdd

- La fonction rowCount (en pdo) ne s'utilise jamais sur une requête Select.

- Le Sha1 n'est plus sécurisé. A la place il est préférable d'utiliser la fonction password_hash




- Le souci se situe à quel endroit ? Tu as un message d'erreur ?

- Ta variable POST contient bien les données voulues ? (fais donc un print_r($_POST); au début de ton script... )

Ensuite, commence par activer l'affichage des erreurs PHP ainsi que l'affichage des erreurs PDO
Pour ça, je t'invite à suivre ce qui est indiqué ici :
https://www.commentcamarche.net/faq/46512-pdo-gerer-les-erreurs

Je t'invite également à lire ET à appliquer les conseils donnés là :
https://www.commentcamarche.net/faq/48399-php-gestion-des-erreurs-debogage-et-ecriture-du-code

Reviens nous voir ensuite avec le code modifié si tes soucis persistent... et pense à nous indiquer en "quoi ça ne marche pas" (avec les éventuels messages d'erreurs )


Messages postés
24
Date d'inscription
jeudi 26 septembre 2019
Statut
Membre
Dernière intervention
8 avril 2020
2
Ah oui merci effectivement, par contre pour les messages d'erreur il n'y en a aucun, la page s'ouvre bien mais elle ne m'affiche que le code, Pour le reste il faudrait effectivement que je regarde la documentation liée aux changements apportée a PHP depuis 2015 :P

Merci de ton aide !
Salut,

"et je ne veut pas utiliser de CSS"
Pourquoi? C'est la méthode en vigueur depuis plus de 20 ans et il y a bien des raisons que je ne détaillerais.

" (en tout cas pas dans un fichier externe)"
ah bon pourquoi? Cela permet de rendre indépendant le HTML de sa présentation et de réutiliser l'un comme l'autre dans différents contextes, donc écrire moins pour de meilleurs résultats. Voilà que je commence à détailler...

Pas besoin d'aller vous renseigner sur les changements depuis 2015 il vous suffit de lire le manuel sur PDO pour envoyer des requêtes et n'importe quel cours sur l'utilisation d'un formulaire avec PHP ; PDO date de bien avant et remplace d'anciennes fonctions beaucoup moins sécurisées donc potentiellement dangereuses. En plus c'est de l'objet comme son nom l'indique. Je ne détaillerais pas non plus.
https://www.php.net/manual/fr/book.pdo.php

"la page s'ouvre bien mais elle ne m'affiche que le code"
Vous avez bien un serveur Apache(ou autre pour PHP) qui est lancé et compris le principe de PHP qui comme son nom l'indique fonctionne avant que l'affichage de la page n'arrive?
Le mieux est qu'un script pour l'insertion de données SQL permit par PHP et donc PDO renvoie à la page qui doit afficher le résultat du traitement, l'utilisateur n'a aucun besoin de pouvoir accéder à quoique ce soit de PHP c'est le HTML dont il a besoin, celui ci pouvant être écrit par la fonction "echo" que ce soit une simple variable ou des balises HTML.

C'est une bonne habitude de séparer le formulaire de son traitement, c'est même indispensable si vous voulez un peu de sécurité(et qu'un petit malin ne puisse accéder à votre base par injection de SQL t tout détruire s'il en a envie) puisque cela doit se faire en utilisant la méthode POST:

https://www.php.net/manual/fr/tutorial.forms.php