Renvoi messages d'erreur de formulaire [Résolu]

Signaler
Messages postés
73
Date d'inscription
samedi 28 août 2004
Statut
Membre
Dernière intervention
23 septembre 2020
-
Messages postés
73
Date d'inscription
samedi 28 août 2004
Statut
Membre
Dernière intervention
23 septembre 2020
-
Bonjour à tous

Je suis les cours de php donnés sur ce site. Et en parallèle, je crée un site pour un ami. Je lui ai fait une page "contact.php" avec formulaire et un page de réponse "contact_reponse.php"

Bon, le formulaire ne sera pas le formulaire définitif, car j'y ai faut dessus des tas d'essais... Faut bien apprendre ! En plus, l'objectif est de tout mettre sur la même page. Mais ça viendra après ! Chaque chose en son temps ! ;0)

Voici ma page contact.php

<?php

use utils\Path;

include ( dirname ( __DIR__ ) . "/include/init.php" );

?>

<!doctype html>
<html lang="fr">
<head title="endotapping">
    <?php include ( utils\Path::head () ) ?>
    <title>Endotapping - contact</title>
</head>
<?php include ( utils\Path::navbar () ) ?>
<div id="contenu" class="contenu texte">
    <h1>Contactez-nous.</h1>
    <hr class="separator_bar">
    <div id="contenu" class="texte">
        <div class="centre">
            <p class="centre"><img src="<?= Path::images ( "contact/contact.jpg" ) ?>" width="450" height="312"
                                   alt="contact"></p>
            <p>
                Vous pouvez nous contacter par e-mail, en cliquant sur <a href="mailto:contact@endotapping.fr">contact@endotapping.fr</a>
                <br/>où directement par l'intermédiaire du formulaire ci-dessous :
            </p>
            <p> </p>
        </div>
        <form method="POST" action="<?= utils\Path::views ('contact_reponse') ?>">
<fieldset>
                <legend>Vos coordonnées :</legend>
            <p class="centre">
                <label for="nom">Nom : </label><input type="text" name="nom" id="nom" placeholder="Votre Nom" size="30" autofocus >
                <label for="prenom">Pérnom : </label><input type="text" name="prenom" id="prenom" placeholder="Votre Prénom" size="40">
            </p>
            <p class="centre">
                <label for="numero">N° : </label><input type="text" name="numero" id="numero" placeholder="Numero" size="5">
                <label for="rue">Rue : </label><input type="text" name="rue" id="rue" placeholder="Nom de votre rue" size="60">
            </p>
            <p class="centre">
                <label for="code_postal">Code postal : </label><input type="text" name="code postal" id="code_postal" placeholder="Code Postal" size="30">
                <label for="ville">Ville : </label><input type="text" name="ville" id="ville" placeholder="Ville" size="50">
            </p>
            <p class="centre">
                <label for="email">Email : </label><input type="email" name="email" id="email" placeholder="Adresse mail" size="100">
            </p>
            </fieldset>
            <fieldset>
                <legend>Rédiger votre message : </legend>
            <p class="centre">
                <label for="message"></label><textarea name="message" id="message" placeholder="Rédigez votre message" rows="10" cols="100"></textarea>
            </p>
            </fieldset>
            <p class="centre"><input type="submit" value="Envoyer votre message"><input type="reset" name="Effacer_saisie" value="Effacer le formulaire"></p>
        </form>
    </div>
    <hr class="separator_bar">
</div>
<?php include ( utils\Path::footer () ) ?>
<?php include ( utils\Path::commun_script () ) ?>
et le début de ma pager de vérification "contact_reponse.php"

<?php

use utils\Path;

include ( dirname ( __DIR__ ) . "/include/init.php" );

$errors = "";

if (!empty( $_POST )) {
    if (!isset( $_POST['prenom'] ) || preg_match ( '#^[a-zA-Z\s-]{2,}#', $_POST['prenom'] ) == 0) {
        $errors = "Votre prénom est incorrect.";
    }

    if ($errors == "" && ( !isset( $_POST['nom'] ) || preg_match ( '#^[a-zA-Z\s-]{2,}#', $_POST['nom'] ) == 0 )) {
        $errors = "Votre nom est incorrect.";
    }

    if ($errors == "" && ( !isset( $_POST['numero'] ) || preg_match ( '#^[0-9]+\s?[a-zA-Z]{1,3}?$#', $_POST['numero'] ) == 0 )) {
        $errors = "Votre numéro de rue est incorrect.";
    }

    if (( $errors == "" ) && ( !isset( $_POST['rue'] ) || preg_match ( '#^[0-9a-zA-Z\'\s-]+#', $_POST['rue'] ) == 0 )) {
        $errors = "Votre nom de votre rue est incorrect.";
    }

    if ($errors == "" && ( !isset( $_POST['code_postal'] ) || preg_match ( '#^[0-9]{5}$#', $_POST['code_postal'] ) == 0 )) {
        $errors = "Votre code postal est incorrect.";
    }

    if ($errors == "" && ( !isset( $_POST['ville'] ) || preg_match ( '#^[a-zA-Z\'\s-]+#', $_POST['ville'] ) == 0 )) {
        $errors = "Votre nom de ville est incorrect.";
    }

    if ($errors == "" && ( !isset( $_POST['email'] ) || preg_match ( '#^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$#', $_POST['email'] ) == 0 )) {
        $errors = "Votre adresse mail est incorrect.";
    }

    if ($errors == "" && ( !isset( $_POST['message'] ) || empty( $_POST['message'] ) )) {
        $errors = "Merci de rédiger correctement votre message.";
    }

    if ($errors == "") {
        $retour = mail ( 'contact@endotapping.fr', 'Envoi depuis le site Endotapping.fr', $_POST['message'], 'From : contact@endotapping.fr' );
    }
}

?>

Je voudrais que, quand un champ est mal rempli ou pas rempli, cliquer sur "Envoyer votre message" face apparaître un des messages d'erreur de la page "contact_reponse.php" juste au dessus du formulaire de la page "contact.php".

J'y suis arrivé sur une exemple simple des cours de Openclassrooms, mais là...

Alors, si vous pouviez m'aider, tout en me permettant de comprendre ce que je fais, ce serait super.

Merci d'avance. Bien cordialement.

JP

2 réponses

Messages postés
29848
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 octobre 2020
2 877
Bonjour,

Tu peux déjà faire une première vérification de tes champs via du Javascript.
Cela permettra de bloquer l'envoi tant que les champs ne correspondent pas à ce que tu souhaites.
Bien entendu, pour plus de précautions, tu feras également une vérification côté PHP dans le script qui récupère les données envoyées par le formulaire.

Voici un peu de lecture sur le sujet :
https://developer.mozilla.org/fr/docs/Web/Guide/HTML/Formulaires/Validation_donnees_formulaire

et un Script JS qui pourra t'aider :
https://validatejs.org/

NB: Comme tu le voix... le seul langage PHP ne suffit pas pour faire un site web.
Il faut également connaitre (maitriser...) le html, le css, le Javascript et, si il y a une base de données, le SQL.


Messages postés
73
Date d'inscription
samedi 28 août 2004
Statut
Membre
Dernière intervention
23 septembre 2020
2
Merci pur ta réponse. J'ai essayé de modifier mon message qui n'était pas clair en séparant les codes des deux pages, mais ça n'a pas voulu fonctionner.

La solution simple que j'ai trouvée, après avoir pas mal tâtonné, j'ai mis

<?php echo $_SESSION['$errors']; ?>


dans la page contact.php au dessus du formulaire, et

$_SESSION['$errors'] = $errors;


dans la page contact_reponse.php juste au dessus e header('Location'... Au démarrage, je l'avais placé au début de ma page. De ce fait, $errors était vide !

Encore merci pour ta réponse ;

Bien cordialement ;

JP
Messages postés
73
Date d'inscription
samedi 28 août 2004
Statut
Membre
Dernière intervention
23 septembre 2020
2
Erreur de frappe : dans la page contact.php, j'ai écrit :

<?=  $_SESSION['errors'];


Pas de $ dans la valeur de la variable ! ;)