Conserver la valeur d'un formulaire en cas d'erreur
- Accueil
- Forum
- Programmation
- PHP
- Conserver la valeur d'un formulaire en cas d'erreur
TheOldNoob Le 4 septembre 2016 à 22:03 (Édité le 25 janvier 2019 à 17:52)
J'ai un soucis, stupide j'en suis sur, mais qui m'agace depuis 2 bonnes heures.
Le probleme : quand je fait une erreur dans un formulaire (vide, pas asser de caractères...) ça m'envoie mon erreur, mais, ça vide les champs, donc obliger de tous les reremplir... Et c'est relou...
Donc pour info, j'ai le même code, qui fonctionne parfaitement sur une autre page, mais pas sur celle ci.
Je vous met donc le code de la page entière (c'est un peu long désoler).
<?php
$post = array(); // Contiendra les données du formulaire nettoyées
$errors = array(); // contiendra nos éventuelles erreurs
$showErrors = false;
$success = false;
$formShow = false;
$band = '';
$dateC = '';
$heureC = '';
$place = '';
$adress = '';
$city = '';
$tarif = '';
if (!empty($_POST)) {
foreach ($_POST as $key => $value) { // Nettoyage des données
$post[$key] = trim(strip_tags($value)); // récupération du _POST dans un tableau
}
//if(strlen($post['nickname']) < 2 || strlen($post['nickname']) > 50){ // on définit les propriétés de 'nickname'
if(!preg_match("#^[a-zA-Z0-9À-ú\.:\!\?\&',\s-]{3,25}#", $post['band'])){
$errors[] = 'Le groupe doit comporter entre 3 et 25 caractères';
}
if(!preg_match("#^[a-zA-Z0-9À-ú\.:\!\?\&',\s-]{3,25}#", $post['dateC'])){
$errors[] = 'La date doit comporter entre 3 et 25 caractères';
}
if(!preg_match("#^[a-zA-Z0-9À-ú\.:\!\?\&',\s-]{3,10}#", $post['heureC'])){
$errors[] = 'L\'heure du concert doit comporter entre 3 et 10 caractères';
}
if(!preg_match("#^[a-zA-Z0-9À-ú\.:\!\?\&',\s-]{3,25}#", $post['place'])){
$errors[] = 'Le lieu du concert doit comporter entre 3 et 25 caractères';
}
if(!preg_match("#^[a-zA-Z0-9À-ú\.:\!\?\&',\s-]{3,65}#", $post['adress'])){
$errors[] = 'L\'adresse du concert doit comporter entre 3 et 65 caractères';
}
if(!preg_match("#^[a-zA-Z0-9À-ú\.:\!\?\&',\s-]{3,30}#", $post['city'])){
$errors[] = 'La ville du concert doit comporter entre 3 et 30 caractères';
}
if(!preg_match("#^[a-zA-Z0-9À-ú\.:\!\?\&',\s-]{1,5}#", $post['tarif'])){
$errors[] = 'Le tarif doit comporter entre 1 et 5 caractères';
}
if(count($errors) > 0){ // On compte les erreurs, s'il y en a (supérieur a 0), on passera la variable $showErrors à true.
$showErrors = true; // valeur booleen // permettra d'afficher nos erreurs s'il y en a.
}
else {
// Insertion dans la pdo
$res = $pdo->prepare('INSERT INTO date_concert (band, dateC, heureC, place, adress, city, tarif) VALUES (:band, :dateC, :heureC, 😋lace, :adress, :city, :tarif)');
$res->bindValue(':band', $post['band'], PDO::PARAM_STR);
$res->bindValue(':dateC', $post['dateC'], PDO::PARAM_STR);
$res->bindValue(':heureC', $post['heureC'], PDO::PARAM_STR);
$res->bindValue(':place', $post['place'], PDO::PARAM_STR);
$res->bindValue(':adress', $post['adress'], PDO::PARAM_STR);
$res->bindValue(':city', $post['city'], PDO::PARAM_STR);
$res->bindValue(':tarif', $post['tarif'], PDO::PARAM_INT);
if($res->execute()){
$success = true; // Pour afficher le message de réussite si tout est bon
header('Location: view_accueil.php');
}
else {
die;
}
}
}
?>
<div class="wrapper">
<h1 class="text-center">Ajouter une date</h1>
<br>
<div class="container">
<?php
if($success){ // On affiche la réussite si tout fonctionne
echo '<div class="alert alert-success" role="alert"> Le concert a bien été créé ! </div>';
}
if($showErrors == true): ?>
<div class="alert alert-danger" role="alert">
<p style="color:red">Veuillez corriger les erreurs suivantes :</p>
<ul style="color:red">
<?php foreach($errors as $err): ?>
<li><?=$err;?></li>
<?php endforeach;?>
</ul>
</div>
<?php endif; ?>
<div class="alert alert-info text-center" role="alert">Merci de remplir tous les champs correctement</div>
<form method="post" class="pure-form pure-form-aligned">
<div class="form-group input-group">
<span class="input-group-addon" id="basic-addon1">Groupe</span>
<input type="text" class="form-control" name="band" placeholder="Nom du groupe" aria-describedby="basic-addon1" value="<?=$band;?>">
</div><br>
<div class="form-group input-group">
<span class="input-group-addon" id="basic-addon1">Date</span>
<input type="text" class="form-control" name="dateC" placeholder="Date du concert" value="<?=$dateC;?>" aria-describedby="basic-addon1">
</div><br>
<div class="form-group input-group">
<span class="input-group-addon" id="basic-addon1">Heure</span>
<input type="text" class="form-control" name="heureC" placeholder="Heure du début du concert" value="<?= $heureC; ?>" aria-describedby="basic-addon1">
</div><br>
<div class="form-group input-group">
<span class="input-group-addon" id="basic-addon1">Lieu</span>
<input type="text" class="form-control" name="place" placeholder="Nom de la salle de concert" value="<?= $place; ?>" aria-describedby="basic-addon1">
</div><br>
<div class="form-group input-group">
<span class="input-group-addon" id="basic-addon1">Adresse</span>
<input type="text" class="form-control" name="adress" placeholder="Adresse du concert" value="<?= $adress; ?>" aria-describedby="basic-addon1">
</div><br>
<div class="form-group input-group">
<span class="input-group-addon" id="basic-addon1">Ville</span>
<input type="text" class="form-control" name="city" placeholder="Ville du concert" value="<?= $city; ?>" aria-describedby="basic-addon1">
</div><br>
<div class="form-group input-group">
<span class="input-group-addon" id="basic-addon1">Tarif</span>
<input type="text" class="form-control" name="tarif" placeholder="Veuillez indiquez le tarif en chiffre uniquement" value="<?= $tarif; ?>" aria-describedby="basic-addon1">
</div><br>
<input type="submit" class="btn btn-success" value="Ajouter la date">
</form>
</form>
</div>
</div>
Chooper01 Le 4 septembre 2016 à 22:54 (Édité le 1 janvier 1970 à 01:00)
Essaie de mettre ça dans chaque value des inputs ou tu souhait gardé ce qu'elles contiennent
value="<?php if(isset($TaVariable)) {echo $TaVariable;} ?>"
TheOldNoob Le 4 septembre 2016 à 22:59 (Édité le 1 janvier 1970 à 01:00)
Donc si j'ai rien dans la variable, il m'affiche le placeholder, si elle est remplie, ça m'affiche son contenue.
ça fonctionne dans toute mes autres pages, avec le même code, mais pas sur celle ci :(
Chooper01 Le 4 septembre 2016 à 23:00 (Édité le 1 janvier 1970 à 01:00)
TheOldNoob Le 4 septembre 2016 à 23:10 (Édité le 1 janvier 1970 à 01:00)
Chooper01 Le 4 septembre 2016 à 23:19 (Édité le 1 janvier 1970 à 01:00)
<input/>
TheOldNoob Le 4 septembre 2016 à 23:27 (Édité le 4 septembre 2016 à 23:28)
Chooper01 Le 4 septembre 2016 à 23:34 (Édité le 1 janvier 1970 à 01:00)
TheOldNoob Le 4 septembre 2016 à 23:51 (Édité le 1 janvier 1970 à 01:00)
Balatharas Le 5 septembre 2016 à 19:36 (Édité le 1 janvier 1970 à 01:00)
Balatharas Le 5 septembre 2016 à 19:46 (Édité le 1 janvier 1970 à 01:00)
<?php if(isset($_POST['tonindex'])) { echo "value='".$_POST['tonindex']."'"; } ?>"
Testé et approuvé par mwa TheOldNoob Le 5 septembre 2016 à 20:16 (Édité le 1 janvier 1970 à 01:00)
Merci a toi aussi Beignet, c'est juste que je suis un peu stupide quand j'oublie des trucs ^^
Juste après mon count(...) j'avais oublier ça :
if(count($errors) > 0){ // On compte les erreurs, s'il y en a (supérieur a 0), on passera la variable $showErrors à true.
$showErrors = true; // valeur booleen // permettra d'afficher nos erreurs s'il y en a.
$band = $post['band'];
$dateC = $post['dateC'];
$heureC = $post['heureC'];
$place = $post['place'];
$adress = $post['adress'];
$city = $post['city'];
$tarif = $post['tarif'];
}