Page 1 sur 1

Formulaire d'inscription

Posté : 21 févr. 2020, 14:30
par JokerXgame78
Bonjour à tous,

Contexte: Pour le cours de sciences numériques, je dois coder un site en html/css. J ai décidé de créer un site e commerce. Sur la page d'inscription, j ai écrit un petit script php.

Il devrait permettre d'indiquer que tous les champs ne sont pas remplis dans le cas échéant, que les mots de passes sont trop courts ou ne sont pas identiques, et si tout est correct, il devrait marquer "Connecté(e) !".

Tout fonctionne à un détail près: quoi qu'il arrive, même si un des champs n'est pas rempli ou même si il y a une autre erreur, ça marque "Connecté(e) !" alors que cet echo est censé s'afficher seulement si tout est bon.

J'ai essayé de comprendre la cause du problème en vain. Quelqu'un peut il m'aider ? Voici le script html et php concerné:

<div id="formulaireid">

<form method="post" action="identification.php">
<p>Nom</p>
<input type="text" name="Nom">
<p>Prenom</p>
<input type="text" name="Prenom">
<p>email</p>
<input type="email" name="email">
<p>Passeword</p>
<input type="passeword" name="passeword">
<p>Répetez votre mot-de-passe</p>
<input type="passeword" name="repeatpasseword"><br><br>
<input type="submit" name="submit" value="Valider">
</form>

</div>

</body>
</html>

<?php
if (isset($_POST["submit"])) {

if (empty($_POST["Nom"]) or empty($_POST["Prenom"]) or empty($_POST["email"]) or empty($_POST["passeword"]) or empty($_POST["repeatpasseword"]) ) {
echo "Veuillez remplir tous les champs !";
}


if (strlen($_POST["passeword"])<=6) {
echo "Le mot-de-passe est trop court !";

}

if ((isset($_POST["passeword"]))!==(isset($_POST["repeatpasseword"]))) {
echo "Les mots-de-passe ne sont pas identiques !";
}

else {

echo "Connecté(e) !";

}

}

?>

PS: La moindre remarque / le moindre conseil est bienvenue !

Re: Formulaire d'inscription

Posté : 21 févr. 2020, 14:36
par Saian
Ton else est le else du if ((isset($_POST["passeword"]))!==(isset($_POST["repeatpasseword"]))) { donc si les passwords sont identiques tu auras toujours le echo Connecté(e) !

Re: Formulaire d'inscription

Posté : 21 févr. 2020, 14:57
par JokerXgame78
Ton else est le else du if ((isset($_POST["passeword"]))!==(isset($_POST["repeatpasseword"]))) { donc si les passwords sont identiques tu auras toujours le echo Connecté(e) !
Merci pour ton aide !
comment pourrai-je faire pour que le else intervienne que si les trois if sont faux ?
(J ai fais plusieurs recherches et essayé par moi même en vain :-()

Re: Formulaire d'inscription

Posté : 21 févr. 2020, 15:50
par Saian
Alors y a les fonctions filter_* de php pour valider des variables mais ne m'en étant jamais servi j'aurai du mal à t'aiguiller. Peut être que ça peut permettre de tout valider ou invalider d'un coup, je ne sais pas.

Ce que tu peux faire sinon, c'est au préalable initialiser une variable $hasError à false. S'il y a une erreur, en plus de l'afficher tu passes $hasError à true et tu n'affiches le dernier echo que s'il n'y a pas d'erreur. if (!$hasError)

EDIT je ferais probablement quelque chose dans le genre :
<?php
session_start();

if (isset($_POST["submit"])) {
  // validation du formulaire
  $errors = [];

  if (empty($_POST["Nom"]) or empty($_POST["Prenom"]) or empty($_POST["email"]) or empty($_POST["passeword"]) or empty($_POST["repeatpasseword"]))
    $errors[] = "Veuillez remplir tous les champs !";

  if (strlen($_POST["passeword"])<=6)
    $errors[] = "Le mot-de-passe est trop court !";

  if ((isset($_POST["passeword"]))!==(isset($_POST["repeatpasseword"])))
    $errors[] = "Les mots-de-passe ne sont pas identiques !";

  // si pas d'erreur
  if (!count($errors)) {
    // enregistre l'utilisateur (probablement un insert en base de données)
    // ...

    // connecte l'utilisateur
    // $_SESSION['user_id'] = $user->id;

    // redirige l'utilisateur vers la page d'accueil de l'utilisateur connecté
    // le header permet d'éviter la réinscription de l'utilisateur s'il décide de rafraichir la page
    header('Location: /mon-compte/accueil.html');
    exit();
  }
}
?>
<div id="formulaireid">

  <?php if (isset($errors) && count($errors)): ?>
    <ul>
    <?php foreach ($errors as $error): ?>
      <li><?php echo $error; ?></li>
    <?php endforeach; ?>
    </ul>
  <?php endif; ?>

  <form method="post" action="identification.php">
    <p>Nom</p>
    <input type="text" name="Nom" value="<?php echo $_POST['Nom'] ?? ''; ?>"/>
    <p>Prenom</p>
    <input type="text" name="Prenom" value="<?php echo $_POST['Prenom'] ?? ''; ?>"/>
    <p>email</p>
    <input type="email" name="email" value="<?php echo $_POST['email'] ?? ''; ?>"/>
    <p>Passeword</p>
    <input type="passeword" name="passeword">
    <p>Répetez votre mot-de-passe</p>
    <input type="passeword" name="repeatpasseword"><br><br>
    <input type="submit" name="submit" value="Valider">
  </form>

</div>

Re: Formulaire d'inscription

Posté : 21 févr. 2020, 16:22
par JokerXgame78

Initialiser une variable $hasError à false. S'il y a une erreur, en plus de l'afficher tu passes $hasError à true et tu n'affiches le dernier echo que s'il n'y a pas d'erreur. if (!$hasError)
Merci de ton aide ! J' ai modifié mon code comme ceci et tout fonctionne comme je le souhaite :D :

<?php

if (isset($_POST["submit"])) {

$hasError1 = (empty($_POST["Nom"]) or empty($_POST["Prenom"]) or empty($_POST["email"]) or empty($_POST["passeword"]) or empty($_POST["repeatpasseword"]) );

$hasError2 = (strlen($_POST["passeword"])<=6);

$hasError3 = (isset($_POST["passeword"]))!==(isset($_POST["repeatpasseword"]));

if ($hasError1) {

echo "Veuillez remplir tous les champs !";

}

if ($hasError2) {

echo "Le mot-de-passe est trop court !";

}

if ($hasError3) {

echo "Les mots-de-passe ne sont pas identiques !";

}


if ((!$hasError1) and (!$hasError2) and (!$hasError3)) {

echo "Connecté(e) !";

}

}

?>

J'ai une question. Hier tu m'avais aidé à corriger mon script php pour faire un random number. Je souhaiterai modifier le echo qui disait gagné ou perdu. Dois-je lui donner une class pour le modifier en css ? Comment peut on modifier l'esthétique des echo ?

Re: Formulaire d'inscription

Posté : 21 févr. 2020, 16:25
par Saian
Oui une class css est tout à fait indiquée. Tu peux par exemple mettre ton message dans un p ou un span sur lequel tu vas mettre une class msg-success ou msg-error selon le cas et sur laquelle tu vas définir les styles que tu veux. Tu peux faire ça comme un cochon aussi avec un attribut style, tout dépend si tu penses réutiliser la class ou non et si t'as envi de faire au plus propre ou non.

Re: Formulaire d'inscription

Posté : 21 févr. 2020, 16:42
par JokerXgame78
Oui une class css est tout à fait indiquée. Tu peux par exemple mettre ton message dans un p ou un span sur lequel tu vas mettre une class msg-success ou msg-error selon le cas et sur laquelle tu vas définir les styles que tu veux. Tu peux faire ça comme un cochon aussi avec un attribut style, tout dépend si tu penses réutiliser la class ou non et si t'as envi de faire au plus propre ou non.
Merci pour l'info :D