Empécher l'accès direct a une page POST d'un formulaire !

Nouveau WRInaute
Bonjour,

J'ai un petit problème en ce qui conserne ma page add-video.php, code:

Code:
<form action='vds.php' method='post'>
donc losqu'on clique sur SUBMIT, les donées se renvoi vers une autre page vds.php, code:
Code:
			// VDS.PHP 	
$title = $_POST['title'];
$description = $_POST['description'];
$video = $_POST['video'];
	  
	  // INSERT TO DB
if (isset($_POST['add']) and $_POST['add'] == 'files') {
	$insert = mysql_query("INSERT INTO ". $tbl_prefix ."videos SET  title = '$title', description = '". nohtml($_POST['description']) ."', video = '$video'") or die ("mysql error");
	
	// IF INSERT IS DONE
		if (isset($insert)) {
		$template->redirect('add-video.php', $lang['message_sent'], true);
		}
}

Problème: J'ai tésté la méthode
Code:
<form action='".$_SERVER['PHP_SELF']."' method='post'>
mais l'orsque l'utilisateur actualise la page, les données se postent une 2ème fois a la base des données et ainsi de suite pour chaque actualisation :(

Donc j'ai pris cette 2ème méthode, mais maintenant le problème consiste a l'accès direct a la page vds.php,

Désolé pour mon français et merci a vous tous,
 
WRInaute accro
Bonjour

Tu peux faire :

Page A-> formulaire qui envoit vers B
Page B -> page qui enregistre les données du formulaire puis fait une redirection 301 vers page C
Page C -> page "'OK Ca a marché"
 
WRInaute accro
le mieux est d'utiliser une variable de session et de la créer lors de la validation du formulaire.
si la variable existe déjà on affiche un message d'erreur "formulaire déjà saisi !!"
on peut, éventuellement, temporiser cette variable, histoire de permettre des soumissions multiples (du genre 2' entre 2 soumissions), dans ce cas, on peut mettre un champ caché avec un identifiant aléatoire et vérifier si cet identifiant n'a pas déjà servi
 
WRInaute passionné
Tu peux aussi créer une key temporaire (en db par exemple) au moment du premier post.
Si second post et déjà présente : message d'erreur et zou ;)
 
WRInaute passionné
Pour le titre du fil, c'est la même chose que ce qu'ont dit mes prédécesseurs (et que j'utilise).

pour accéder au formulaire post, j'utilise un identifiant que j'ai mis sur la page précedente. En arrivant sur la page du formulaire, cet identifiant est caché et posté. Si cet identifiant ne correspond pas, au lieu d'enregistrer le formulaire, tu envois un message d'erreur. Si l'identifiant existe, tu enregistre les données.

Si c'est au niveau de l'affichage du formulaire uniquement, c'est la meme chose, sur la page avant le formulaire, tu donne un identifiant, et le lien qui conduit au formulaire est un formulaire caché qui poste l'identifiant. Si l'idententifiant est correct, tu affiche le formulaire, sinon, tu affiche un message d'erreur genre "ce formulaire ne peut pas etre accessible automatiquement".
 
Nouveau WRInaute
Merci a vous tous,

J'ai ajouté un code a la fin du fichier vds.php:
Code:
if($_SERVER['HTTP_X_REQUESTED_WITH'] != 'XMLHttpRequest'){ 
  echo("Accès directe non autorisé"); 
  die(); 
}
qui n'autorise pas l'accès directe, mais je sai pas si c'est encors sécurisé ou nn.
 
Discussions similaires
N
Réponses
3
Affichages
2K
ninonsclcme
N
Haut