Programme de navigation

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Programme de navigation

par Cyrano » 30 oct. 2006, 23:15

Si la directive register_globals est à OFF (comme elle devrait l'être par défaut et le rester, les champs des formulaire ou les valeurs passées via l'url seront récupérables dans des super-globales $_POST ou $_GET selon la méthode employée dans le formulaire.

Un champ ayant l'attribut name avec la valeur "monchamp" enverra donc la donnée saisie dans $_POST['monchamp'] ou $_GET['monchamp'] ou encore à la rigueur, mais à manipuler avec précaution dans $_REQUEST['monchamp'] qui couvre à la fois $_POST et $GET.

Cette directive est à OFF par défaut depuis la version 4.2 de PHP et ne sera plus modifiable avec PHP6, qu'on se le dise : à partir de PHP6, cette directive sera à OFF et ne pourra pas être modifiée. Il sera donc impossible de récupérer les valeurs autrement que de la manière décrite ci-dessus. il faut donc prendre dès maintenant de bonnes habitude.

Méthode classique pour récupérer les valeurs :
<?php
$monchamp = isset($_POST['monchamp']) ? $_POST['monchamp'] : "";
//...
?>

par Ajoloca » 30 oct. 2006, 23:15

Re,

La directive 'register_globals' permet en fonction de sa valeur de récupérer les champs d'un formulaire par leur nom ou pas.

Je m'explique :
Si 'register_globals' est à 'On' et que dans ton formulaire tu as ça
<form name="agenda" id="agenda" action="index.php" method="post">
<input type="hidden" name="monAction" value="" /> 
dans le fichier 'index.php' tu pouiras récupérer la valeur u champ 'monAction' directement
$actionToDo = $monAction;
Parcontre si elle est positionnée à 'Off' tu devras utiliser le tableau des superglobales '$_POST[]' comme ceci
// On teste si la variable existe et elle n'est pas vide
if(isset($_POST['monAction']) && ! empty($_POST['monAction'])){
   $actionToDo = $_POST['monAction'];
}
else{
   // Traitement quand non définie
}

par Moker » 30 oct. 2006, 23:01

bonsoir,
Quand tu cliques sur ton bouton, ta variable $monAction va bien prendre la valeur "configurer". Le problème c'est qu'au beau milieu de ton script index.php, juste avant le switch tu fais :
$monAction = "aucune";
Alors, forcément, tu retourne dans le default
pour parer a ce probleme j'ai tenter ceci :
$monAction = isset($_REQUEST["monAction"])?$_REQUEST["monAction"]:"aucune;
mais rien ne change pourtant je pense avoir bien fait les choses, je ne comprend toujours pas :?
Je crois qu'il reste un petit souci, sauf si la directive 'register_globals' est à 'on', dans 'index.php' il ne récupère pas la valeur du champ du formulaire.
peut tu m'expliquer plus en details pourquoi si 'register_globals' est à 'off' index.php ne recupere pas la valeur de mon champs car dans ce cas cela m'aiderait à resoudre mon probleme.

mais le script où j'ai lu cette methode fonctionne sur la meme configuration.

je vous remercie pour votre aide !

par Ajoloca » 30 oct. 2006, 14:25

Bonjour,

Je crois qu'il reste un petit souci, sauf si la directive 'register_globals' est à 'on', dans 'index.php' il ne récupère pas la valeur du champ du formulaire.

par Ryle » 30 oct. 2006, 12:10

Ben si ça fonctionne... ça fonctionne mal comme te l'a expliqué Ajoloca (bon il s'est trompé, il voulait dire accueil au lieu de configurer), mais ça fonctionne... et le pire, c'est que ça fait exactement ce que tu lui demandes ;)

Quand tu cliques sur ton bouton, ta variable $monAction va bien prendre la valeur "configurer". Le problème c'est qu'au beau milieu de ton script index.php, juste avant le switch tu fais :
$monAction = "aucune"; 
Alors, forcément, tu retourne dans le default :)

Commente cette ligne (voire, vire là à grand coup de pied au.. hum.. je m'égare) et tu verras la différence :)

par Moker » 30 oct. 2006, 12:05

Dans cette page ton lien te renvoi ver index.php ou de nouveau $monAction prend la valeur "aucune" qui fait que tu retombes sur default, la suite à déjà été annocée. Tu boucles, tout simplement!
le lien me renvoi bien sur index.php mais au passage la fonction js modifie le champs caché et soumet le formulaire pour que $monAction="configurer"

malheureusement cela ne fonctionne pas :cry:

par Ajoloca » 30 oct. 2006, 02:59

Bonsoir,

Je ne comprends pas bien ce que tu fais.

Dans 'index.php' tu forces $monAction à la valeur "aucune" donc tu tombes dans le cas 'default' qui lui t'envoie vers la fonction 'configurer()' cette fonction inclue la page html 'gabarits/configurer.html'

Dans cette page ton lien te renvoi ver index.php ou de nouveau $monAction prend la valeur "aucune" qui fait que tu retombes sur default, la suite à déjà été annocée. Tu boucles, tout simplement!

Programme de navigation

par Moker » 29 oct. 2006, 23:17

bonjour,

j'essai de reproduire un script que j'ai analyser recemment mais cela ne fonctionne pas.

il est censé m'afficher la page configurer.html mais la redirection à l'aide du champs caché et je reste sur l'accueil :cry:

pourriez vous m'aider à comprendre ce qui ne va pas ?

Merci pour votre aide !

voici le code :

index.php
<?php

function accueil(){
	include "gabarits/accueil.html" ;
}

function configurer(){
	include "gabarits/configurer.html";
}

$monAction = "aucune";
	
switch($monAction)
{
	case "configurer":configurer(); break;
	default:accueil();
}

?>
scripts.js
	function configurer()
	{
		document.agenda.monAction.value = "configurer";
		document.agenda.submit();
	}
gabarits/accueil.html
<html>
<head>
	<script language="javascript" src="script.js" type="text/javascript"></script>
</head>
<body>
<h1>Accueil</h1>
<a href="#" onclick="configurer()" >Configurer</a>
<form name="agenda" id="agenda" action="index.php" method="post">
	<input type="hidden" name="monAction" value="" />
</form>
</body>
</html>
gabarits/configurer.html
<html>
<head>
	<script language="javascript" src="script.js" type="text/javascript"></script>
</head>
<body>
<h1>Configurer</h1>
<form name="agenda" id="agenda" action="index.php" method="post">
	<input type="hidden" name="monAction" value="" />
</form>
</body>
</html>