Page 1 sur 1

"bloquer" une page de validation de formulaire

Posté : 24 juin 2010, 07:35
par nadege21
Bonjour
j'ia un petit soucis
j'ai un formulaire sur mon site, les champs sont quasi tous obligatoires
quand c'est rempli on arrive a la page email.php ci dessous pour l'envoi d'un email avec les infos
par contre le hic c'est que si on tape directement email.phph ca m'envoi un email vierge
comment puis je bloquer cette page ? ou l'envoi
merci
Nadege


if (isset($_POST['mon_champ'])) {
    for ($i = 0, $c = count($_POST['mon_champ']); $i < $c; $i++) {
	$DEMANDE.=$_POST['mon_champ'][$i].", ";
	echo $DEMANDE;
    }
}
			// récupération des variables du formulaire
			$nom=stripslashes($_POST["NOM"]);
		.....
			
			$mail_adr="monemail";
			$mail_sujet="Contact depuis le site";
			$mail_mes="\nNOM. ".$nom."\nSOCIETE. ".$societe."\nACTIVITE. ".$activite."\nTEL. ".$tel."\nEMAIL. ".$email."\nTITRE. ".$titre."\nOBJET DU MESSAGE. ".$DEMANDE."\nMESSAGE. ".$message;
			
			mail($mail_adr,$mail_sujet,$mail_mes,"From: ".$email);
		?>

Re: "bloquer" une page de validation de formulaire

Posté : 24 juin 2010, 13:03
par d0m
salut Nadege,

il te suffit de mettre un test sur ta page email.php vérifiant qu'on vient bien de la page contenant ton formulaire.

Par exemple, disons que le bouton de soumission de ton formulaire a pour nom valider.
Tu testes si dans tes variables passés, la variable ayant pour nom valider est bien présente :
if( isset( $_POST['valider'] ) ) {
    //ici tu crées ton mail avec ton code
}
Si une personne tape email.php dans la barre d'adresse, il arrivera sur une page vide et il ne se passera rien.

Tu peux même faire encore mieux et dans le cas ou on ne vient pas du formulaire, on est redirigé automatiquement vers le formulaire.
Disons que la page contenant ton formulaire s'appelle formulaire.php
if( isset( $_POST['valider'] ) ) { //on teste si la variable du bouton existe
    //ici tu crée ton mail avec ton code
}
else {
  //on ne vient pas du formulaire soumis alors on redirige vers ce formulaire.
  header('Location: formulaire.php');
}
voilà pour toi.

Re: "bloquer" une page de validation de formulaire

Posté : 24 juin 2010, 20:50
par Invité
ok merci beaucoup pour cette réponse tres détaillée
je m'y mets
bonne soirée

Re: "bloquer" une page de validation de formulaire

Posté : 26 juin 2010, 00:42
par Aureusms
Moi j'y mettrais un petit champ <input type="hidden" value="valeur_aléatoire" > en plus à vérifier.
Tu stocke la valeur aléatoirement dans une varaible de session et tu la vérifie avec if( isset( $_POST['valider'] ) ) {

Ce qui donnerrai :
Côté formulaire :
<?php
$maintenant = time();
$aleatoire = "";
for ($i = 0 ; $i < 5 ; $i++)
{
  $aleatoire .= rand (0,$maintenant);
}
$aleatoire = sha1($aleatoire);
$_SESSION["hidden_aleatoire"] = $aleatoire;
?>
<form>
  ... ton formulaire
  <input type="hidden" name="aleatoire" value="<?php echo $aleatoire; ?>" >
</form>
//côté email.php
[php]if( isset( $_POST['valider'] ) && isset($_POST["aleatoire"]) && $_POST["aleatoire"] == $_SESSION["hidden_aleatoire"]) { 
    //on teste si la variable du bouton existe et si la variable aléatoire est bien là
    //ici tu crée ton mail avec ton code
}
else {
  //on ne vient pas du formulaire soumis alors on redirige vers ce formulaire.
  header('Location: formulaire.php');
}[/php]

Ca limite un peu les fixation de formulaire (il se servent de tes condiions pour envoyer des emails en SPAM c'est de plus en plus rare mais cela arrive) car il faudra qu'il visite au moins une fois la page formulaire pour récupérer une variable aléatoire.
Ensuite tu limites un email par une variable aléatoire et là tu réduis la casse...

Re: "bloquer" une page de validation de formulaire

Posté : 28 juin 2010, 12:06
par stealth35
on peux utiliser uniqid pour la valeur aléatoire :)

Re: "bloquer" une page de validation de formulaire

Posté : 28 juin 2010, 12:34
par Aureusms
Oui la c'est vrai :D :D :D
Je me rappelais bien qu'il y avait un truc du genre... :D :D :D