8795 sujets

Développement web côté serveur, CMS

Bonjour à tous.

Lorsqu'on clique sur Envoyer, le formulaire vérifie si toutes les données obligatoires sont renseignées. Si ce n'est pas le cas, le formulaire est réaffiché avec les valeurs déjà rentrées, sinon on passe à la suite du traitement.

Je voudrais que le bouton Rénitialiser... réinitialise toutes les données à zéro. Comment faire ? Merci pour vos explications.


<!DOCTYPE html>
<html lang="fr">
<head>
	<meta charset="utf-8" />
	<title>Réinitialisation du formulaire</title>
		<link rel="stylesheet" media="screen" type="text/css" title="Style par défaut" href="../style/correction.css" />
	</head>
	
<body>
	<div id="page">
		<div class="content">
			<h1>Test de réinitialisation</h1>
<?php

$envoi = htmlentities($_SERVER['PHP_SELF']);
$form = <<<EOF
			<form action="$envoi" method="post">
				<p>
					<label for="nom" class="label">Votre nom&nbsp;:</label>
					<input type="text" name="nom" value="" size="25" maxlength="15" class="rouge" /><br />
				</p>
				<p title="Cochez oui si vous êtes étudiant et qu'il s'agit d'un travail destiné à vos études, sinon cochez non.">
					<span class="label">Travaux Étudiant&nbsp;:</span>
					<label for="ouietudiant">Oui</label>
					<input type="radio" name="etudiant" value="ouietudiant" id="ouietudiant" />
					<label for="nonetudiant">Non</label>
					<input type="radio" name="etudiant" value="nonetudiant" id="nonetudiant" />
				</p>
				<p>
					<input type="reset" name="reset" id="reset" value="Réinitialiser" />
					<input type="submit" name="envoyer" id="envoyer" value="Valider" />
				</p>
			</form>
EOF;
$test=0;
if (isset($_POST['reset'])):
	foreach($_POST as $indice => $valeur)
		{
		$_POST[$indice]='';
	}
endif;
if (!isset($_POST['envoyer'])) {
	echo $form;
}
else {
	if (isset($_POST['nom']) && !empty($_POST['nom'])) {
		$item = trim(strip_tags($_POST['nom']));
		echo 'traitement de '.$item.'<br />';
		$form=str_replace('name="nom" value=""','name="nom" value="'.$item.'"',$form);
	}
	else {
		$test+=1;
}
	if (isset($_POST['etudiant']) && !empty($_POST['etudiant'])) {
		$item = $_POST['etudiant'];
		echo '<p>Traitement de '.$item.'</p>';
		$form=str_replace('name="etudiant" checked="checked"','name="etudiant"',$form);
		if($_POST['etudiant']=='ouietudiant'){
			$form=str_replace('name="etudiant" value="ouietudiant"','name="etudiant" checked="checked" value="ouietudiant"',$form);
		}
		else{
			$form=str_replace('name="etudiant" value="nonetudiant"','name="etudiant" checked="checked" value="nonetudiant"',$form);
		}
	}
	else {
		$test+=1;
	}
}
if ($test<>0){
		echo '<p>Les champs <span class="rouge">bordés de rouge</span> sont obligatoires.</p>';
		// réaffichage du formulaire pour correction
		echo $form;
}

?>
		</div>
	</div>
</body>
</html>
Le sujet est voisin, mais il ne s'agit pas vraiment de la même chose, et la procédure de vérification est somme toute également différente. Le précédent sujet voulait effacer certaines données. Là il s'agit de réinitialiser les valeurs de $_POST comme si on arrivait sur une nouvelle page.

@JJK80 Smiley fache Même si c'est pour te foutre de ma gueule, dis-toi que des messages comme le tien peuvent être très pénibles pour des personnes débutant cette infection. Essaye d'éviter et de trouver quelque chose de plus drôle aussi pour elles.
Modifié par Pyanepsion (29 Jun 2012 - 15:19)
Le plus simple est de faire une redirection vers la page du formulaire quand celui à été correctement rempli et que tu as fini de le traiter. En fait c'est même la méthode à préconiser parce qu'elle évite le renvoi du formulaire si l'utilisateur presse le bouton retour après que le formulaire soit validé.
Pyanepsion a écrit :
Le sujet est voisin, mais il ne s'agit pas vraiment de la même chose, et la procédure de vérification est somme toute également différente. Le précédent sujet voulait effacer certaines données. Là il s'agit de réinitialiser les valeurs de $_POST comme si on arrivait sur une nouvelle page.


On t'a également expliqué ça sur l'autre sujet.

Pyanepsion a écrit :
@JJK80 Smiley fache Même si c'est pour te foutre de ma gueule, dis-toi que des messages comme le tien peuvent être très pénibles pour des personnes débutant cette infection. Essaye d'éviter et de trouver quelque chose de plus drôle aussi pour elles.


J'ai vécu 3 ans avec ma grand mère qui était atteinte, elle a toujours préféré en rire, à parfois même faire semblant d'oublier mon nom. Faut arrêter de croire que le handicap, la maladie et l'homosexualité sont attaqué des qu'on en parle ou qu'on en rigole. étrangement c'est toujours ceux qui n'en ont aucune connaissances qui ont ce comportement.

Certes ma blague était de bas niveau mais y a pas de quoi re-castrer une eunuque (et évite moi le sermon sur les eunuques).

Ps: tu remarquera également que je n'ai pas mis le nom pour ne pas perturber les recherches a ce sujet.
Modifié par JJK801 (29 Jun 2012 - 15:32)
@jb_gbx : je n'avais effectivement pas complètement compris ce qu'était vraiment un reset. Et donc, en mettant un type submit au lieu de reset, ça fonctionne parfaitement... La finalité est effectivement de rester sur la même page.

@JJK801 : étrangement, j'ai connaissance de plusieurs personnes atteintes de cette infection. Le plus pénible pour elles est généralement qu'elles se rendent compte de leur état. Du moins au début.
Au final, j'ai remplacé les tests if successifs de chaque valeur $_POST['etudiant'] par un simple :
if (isset($_POST['etudiant']) && !empty($_POST['etudiant'])):
	$item=trim(strip_tags(stripslashes($_POST['etudiant'])));
	echo '<p>Traitement de la réduction étudiant : '.$item.'</p>';
	$form=str_replace('name="etudiant" checked="checked"','name="etudiant"',$form);
	$form=str_replace('name="etudiant" value="'.$item.'"','name="etudiant" checked="checked" value="'.$item.'"',$form);
else:
	$test+=1;
endif;

Y a-t-il plus rapide ? Et plus sécurisé ?
Ton code n'est ni plus ni moins sécurisé. Pour ce qui est de la rapidité il peut s’exécuter plusieurs millions de fois par seconde sur un PC moderne donc ce n'est pas de ce côté qu'il faut chercher à optimiser la vitesse d’exécution.

Par contre pour la concision et pour ne pas faire deux fois la même chose : tu fais un isset() suivi d'un empty(). Or empty() est la même fonction que isset() avec quelques options supplémentaires (au niveau du moteur de PHP), donc tu peux supprimer ton isset() de ta condition.
Modifié par jb_gfx (01 Jul 2012 - 00:39)
Smiley biggrin J'avais vu ce doublon dans plusieurs sources spécifiques et j'avais donc laissé. Merci d'avoir confirmé mon doute.
Modifié par Pyanepsion (01 Jul 2012 - 06:39)