Bonsoir,Voici mon problème:J'ai réalisé une page de contact qui me renvoie les informations par mail.J'ai mis en place un système d'erreurs qui, lorsqu'un champ n'est pas rempli, affiche un message d'erreur. Le problème est que, lorsque le problème arrive toutes les valeurs de mon texte et aussi de ma liste déroulante effacée.Y'aurait-il une solution pour qu'elles restent affichées ?
Merci d'avance pour votre aide,
Cordialement,
Thomas.

17 réponses


PhiSyX
Réponse acceptée

Tu fais bien ceci?

<textarea name="namedutextarea"><?= filter_input(INPUT_POST, 'namedutextarea') ?></textarea>

namedutextarea est à remplacer par la valeur de l'attribut name de ta textarea, si ça n'était pas déjà fait ^-^

Edit 26.02.2016

Mais si ça fonctionne!!! ;-) (et pour les options de ta liste (select) c'est le meme principe)

Yes.

Prends une librairie javascript pour gérer les champs de ton formulaire de contact ;). Ca ne sert à rien d'envoyer un truc au serveur qu'il ne peut pas exploiter, quand on peut faire la vérification avant l'envoi!

Sinon, regarde du côté de l'affichage du contenu de la variable $_POST.

... que je ne recommande absolument pas ...

Merci pour ta réponse mais comme je suis encore débutant tu ne pourrais pas me montrer un exemple pour m'aider ?

Yop.

Tu peux utiliser la fonction native de php filter_input(INPUT_POST, 'namedutextarea') l'avantage est que si la valeur du textarea est vide, la fonction renvoit NULL (= du vide, qui ne renvoit donc pas d'erreur si namedutextarea n'est pas défini/n'a aucune valeur).

Salut ;)
Je viens d'essayer ta solution, malheureusement le textarea se vide toujours.

Sinon une technique barbare que je faisais auparavant, lors de la vérification du formulaire tu créer une $_SESSION['contact'] avec les données du formulaire....

Bonjour,
Excusez moi de ma réponse tardive.
Merci a vous deux pour vos réponses. Alex c'est gentil mais je préfère que tout se déroule sur la même page.
PhiSyX j'ai essayer ta solution comme ceci :

<textarea name="message" id="message" rows="10" cols="50" placeholder="Écrivez votre avis ici" value="
<?php if(isset($message)) echo $message; ?><?= filter_input(INPUT_POST, 'message') ?>"></textarea>

Mais ça ne change rien lorsqu'il y a une erreur le réponse fournie par l'utilisateur disparait.
Merci pour votre aide
Cordialement,
Thomas

Bonjour

L'attribut value n'existe pas sur un textarea, pour inserer une valeur il faut la placer entre les balises textarea

<textarea>Ta valeur</textarea>

Bonjour,
D'accord merci pour ta réponse.
Saurais-tu comment je dois-faire pour garder la valeur d'un liste ?
Merci
Bonne journée

Regardes le post de PhiSyX il donne la solution :)

Salut PhiSyX,
Merci pour ta réponse ;)
Seulement je n'arrive pas à lire le code que tu colle à la ligne 15. Pourrais-tu me l'envoyer ?
Merci d'avance
Cordialement,
Thomas

Ouaip, c'est celle-ci <option value="<?= $key ?>"<?= $selected ?>><?= $value ?></option>.

Salut PhiSyX,
Désolé de te déranger mais malgré le même code que toi rien ne s'affiche dans les propositions.
Pour t'aider voici le code:

<?php $options = ['Sister' => 'Valeur 1', 'Hey' => 'Valeur 2', 'Soul' => 'Valeur 5'] ?>

<form action="" method="post">
    <textarea name="message"><?= filter_input(INPUT_POST, 'message') ?></textarea>

    <select name="select" id="">
        <option value=""></option>
        <?php foreach ($option as $key => $value): ?>
            <?php
            $selected = null;
            if (filter_input(INPUT_POST, 'select') == $key) :
                $selected = ' selected';
            endif;
            ?>
            <option value="<?= $key ?>"<?= $selected ?>><?= $value ?></option>
        <?php endforeach ?>
    </select>

    <button>Envoyer</button>
</form>

Merci pour ton aide,
Thomas

Il te manque le s de $options (au niveau du foreach($option ..))

Merci ! Ca marche super bien !
Derniere chose j'avais mis en place un system d'erreur qui lorsqu'un champ n'est pas rempli affiche un message d'erreur et je voudrais faire pareil avec cette liste.
Voici mon ancien code:

<span class="error-message"><?php if(isset($erreurpays)) echo $erreurpays; ?></span><br />
if (empty($_POST['pays'])) {
        $valid=false;
        $erreurpays="Vous n'avez pas indiqué votre pays.";

Saurais tu comment m'aider en modifiant le code que tu m'a donné ?
Meric beaucoup
Thomas

Je n'ai pas compris?

Tu veux affichier plusieurs erreurs des differents champs?
Il faut que tu crées un tableau et le remplir au fûr et à mesure de la validation et ensuite les afficher avec un foreach.

Par exemple:

<?php
$errors = [];
$options = ['1' => 'Valeur 1', '2' => 'Valeur 2', '5' => 'Valeur 5'];

if (!empty($_POST)) {
    # Validation du `message`.
    if (!filter_input(INPUT_POST, 'message')) {
        $errors['message'] = 'Vous devez entrer un message.';
    }
    ## Le résultat du code ci-dessous sera identique au code ci-dessus ;)
    ## À toi de choisir, chacun ses préférences.
    // if (empty($_POST['message'])) {
    //     $errors['message'] = 'Vous devez entrer un message';
    // }

    # Validation du `select`.
    if (filter_input(INPUT_POST, 'select')) {
        if (!array_key_exists(filter_input(INPUT_POST, 'select'), $options)) {
            $errors['select'] = 'Cette option n\'existe pas.';
        }
    # À décommenter si le `select` est obligatoire.. ^^
    // } else {
    //     $errors['select'] = 'Vous devez choisir une option.';
    }
}
?>

<div class="errors">
    <?php foreach ($errors as $error): ?>
        <p class="error-message"><?= $error ?></p>
    <?php endforeach ?>
</div>

Merci beaucoup PhiSyX !
C'est exactement ce que je voulais faire !
Grand merci et bonne soirée ;)