transférer des variables

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 : transférer des variables

par ludger » 24 avr. 2006, 15:15

Lol! :shock:

Comment j'ai fait pour laisser passer cette erreur! :?

Merci :wink:

par Ryle » 24 avr. 2006, 14:08

Tout d'abord une petite simplification :
// au lieu de :
if(isset($_POST['date']))      $date=$_POST['date']; 
else      $date=""; 

// écrit plutot :
$date= (isSet($_POST['date'])) ? $_POST['date'] : ""; 
ca revient exactement au même, mais ca prend beaucoup moins de place :)

Quant à ton soucis, si tu jette un coup d'oeil au source de la page, tu verras que les attributs "value" des champs hidden ne sont pas renseignés, à l'exception du premier... qu'est ce qui différencie le premier des autres ? (un détail bête, mais indispensable... et euh, non, c'est pas le $_POST ;))

par ludger » 24 avr. 2006, 13:29

Alors, j'ai éssayé avec le formulaire caché, mais ça ne semble pas fonctionné, les variables restent vides...

Voici mon code:
<HTML>
<HEAD>
<TITLE>Vérification avant envoi définitif...</TITLE>
</HEAD>
<BODY>
<CENTER><H2>Vérification</H2></CENTER>

<?

if(isset($_POST['date']))      $date=$_POST['date'];
else      $date="";

if(isset($_POST['conseiller']))      $conseiller=$_POST['conseiller'];
else      $conseiller="";

if(isset($_POST['nom_entreprise']))      $nom_entreprise=$_POST['nom_entreprise'];
else      $nom_entreprise="";

if(isset($_POST['secteur_act']))      $secteur_act=$_POST['secteur_act'];
else      $secteur_act="";

if(isset ($_POST['genre']))    $genre=$_POST['genre'];
else	   $genre="";

if(isset($_POST['siret']))      $siret=$_POST['siret'];
else      $siret="";

if(isset($_POST['adresse']))      $adresse=$_POST['adresse'];
else      $adresse="";

if(isset($_POST['phone']))      $phone=$_POST['phone'];
else      $phone="";

if(isset($_POST['telecopie']))      $telecopie=$_POST['telecopie'];
else      $telecopie="";

if(isset($_POST['mail']))      $mail=$_POST['mail'];
else      $mail="";

if(isset($_POST['persoajoindre']))      $persoajoindre=$_POST['persoajoindre'];
else      $persoajoindre="";

if(isset($_POST['poste']))      $poste=$_POST['poste'];
else      $poste="";

if(isset($_POST['rome']))      $rome=$_POST['rome'];
else      $rome="";

if(isset($_POST['motif']))      $motif=$_POST['motif'];
else     $motif="";

if(isset($_POST['competence']))      $competence=$_POST['competence'];
else      $competence="";

if(isset($_POST['domaine']))      $domaine=$_POST['domaine'];
else      $domaine="";

if(isset($_POST['otre']))       $otre=$_POST['otre'];
else      $otre="";

if(isset($_POST['diplome']))      $diplome=$_POST['diplome'];
else      $diplome="";

if(isset($_POST['plus']))      $plus=$_POST['plus'];
else     $plus="";

if(isset($_POST['plu']))      $plu=$_POST['plu'];
else     $plu="";

if(isset($_POST['qualif']))      $qualif=$_POST['qualif'];
else      $qualif="";

if(isset($_POST['exigence']))      $exigence=$_POST['exigence'];
else      $exigence="";

if(isset($_POST['souhait']))     $souhait=$_POST['souhait'];
else     $experience="";

if(isset($_POST['dure']))      $dure=$_POST['dure'];
else     $dure="";

if(isset($_POST['condition_exo']))     $condition_exo=$_POST['condition_exo'];
else      $condition_exo="";

if(isset($_POST['lieu_travail']))      $lieu_travail=$_POST['lieu_travail'];
else      $lieu_travail="";

if(isset($_POST['nature']))      $nature=$_POST['nature'];
else      $nature="";

if(isset($_POST['deplacement']))      $deplacement=$_POST['deplacement'];
else      $deplacement="";

if(isset($_POST['salaire']))      $salaire=$_POST['salaire'];
else      $salaire="";

if(isset($_POST['salair']))     $salair=$_POST['salair'];
else      $salair="";

if(isset($_POST['saler']))       $saler=$_POST['saler'];
else     $saler="";

if(isset($_POST['smic']))      $smic=$_POST['smic'];
else     $smic="";

if(isset($_POST['par']))       $par=$_POST['par'];
else     $par="";

if(isset($_POST['direct']))      $direct=$_POST['direct'];
else     $direct="";

if(isset($_POST['contacter']))      $contacter=$_POST['contacter'];
else     $contacter="";

if(isset($_POST['commentaire']))      $commentaire=$_POST['commentaire'];
else     $commentaire="";

//On vérifie si les champs sont vides 
// 
if ($conseiller=="*" OR $date=="jj/mm/aa" OR $nom_entreprise=="*" OR $secteur_act=="*" OR $adresse=="*" OR $phone=="*" OR $persoajoindre=="*" 
OR $rome=="*" OR $competence=="*" OR $condition_exo=="*" OR empty($salaire) OR empty($direct) OR empty($contacter) 
OR empty($par))
{ 
echo '<font color="red"><U><BIG>Attention</BIG>, seuls les champs suivants peuvent rester vides :</U>
<b><LI>Siret <LI>Télécopie <LI>E-mail<LI> Motif du recrutement<LI> tous les champs FORMATION<LI> Déplacements</b><BR></FONT>
<BR>A HREF=aide_erreur.htm>Aide</A><BR></font>';
} 

 //Aucun champ n'est vide
else      
  { 
     echo "Voici les informations que vous venez de saisir. Veuillez les vérifier, et si elles sont conformes, alors validez.<BR>
Sinon veuillez cliquez sur la flèche Précédente en haut à gauhe de l'écran.<BR>
<TABLE WIDTH=90% BORDER=1>
<TR>
  <TD ROWSPAN=2><IMG SRC=logo_milo.jpg width=61 height=37></TD>
  <TD ROWSPAN=2 ALIGN=CENTER><H1>PRISE D'OFFRE</H1></TD>
  <TD>Emploi</TD>
</TR
<TR>
    <TD>Entreprise</TD>
</TR>
</TABLE>
<!--PREMIER TABLEAU => L'entreprise-->

<TABLE WIDTH=90% BORDER=0>
<TR>
	<TD WIDTH=20% ALIGN=LEFT><B>Date :</B><FONT COLOR=red> $date</FONT></TD>
	<TD ALIGN=RIGHT><B>Conseiller :</B><FONT COLOR=red> $genre $conseiller</FONT></TD>
</TR>
</TABLE>
<BR>
<TABLE BORDER=1 width=90%>
<TR BGCOLOR=antiquewhite>
<TD>
<TABLE BORDER=0 WIDTH=100%>
<TR>
  <TD COLSPAN=3 ALIGN=CENTER><H2>L'ENTREPRISE</H2></TD>
</TR>
<TR>
  <TD COLSPAN=2><B>Nom de l'entreprise :</B><FONT COLOR=red> $nom_entreprise</FONT></TD>
  <TD SIZE=50%><B>SIRET :</B><FONT COLOR=red> $siret</FONT></TD>
</TR>
<TR>
  <TD WIDTH=100% COLSPAN=3 ALIGN=LEFT><B>Secteur d'activité :</B> <FONT COLOR=red>$secteur_act</FONT></TD>
</TR>
<TR>
  <TD COLSPAN=3 VALIGN=BOTTOM><B>Adresse :</B><FONT COLOR=red> $adresse</FONT></TD>
</TR>
<TR>
  <TD ALIGN=LEFT SIZE=33%><B>Téléphone :</B><FONT COLOR=red>$phone </FONT></TD>
  <TD ALIGN=LEFT SIZE=33%><B>Télécopie :</B><FONT COLOR=red> $telecopie</FONT></TD>
  <TD ALIGN=LEFT><B>E-mail :</B><FONT COLOR=red>$mail</FONT></TD>
</TR>
<TR>
  <TD ALIGN=LEFT COLSPAN=3><B>Personne à joindre :</B><FONT COLOR=red>$persoajoindre</FONT></TD>
</TR>
</TABLE>
</TD>  
</TR>
</TABLE>

....

";
    }  
?>

<!--TRANSFERT DONNEE-->

<FORM NAME=verif METHOD=POST ACTION=envoi.php>
<INPUT TYPE=HIDDEN NAME=tdate VALUE="<?=$_POST['dat'];?>">
<INPUT TYPE=HIDDEN NAME=tdate VALUE="<?$conseiller;?>">
<INPUT TYPE=HIDDEN NAME=tdate VALUE="<?$nom_entreprise;?>">
<INPUT TYPE=HIDDEN NAME=tdate VALUE="<?$secteur_act;?>">
<INPUT TYPE=HIDDEN NAME=tdate VALUE="<?$genre;?>">
<INPUT TYPE=HIDDEN NAME=tdate VALUE="<?$siret;?>">
<INPUT TYPE=HIDDEN NAME=tdate VALUE="<?$adresse;?>">
<INPUT TYPE=HIDDEN NAME=tdate VALUE="<?$phone;?>">
<INPUT TYPE=HIDDEN NAME=tdate VALUE="<?$telecopie;?>">
<INPUT TYPE=HIDDEN NAME=tdate VALUE="<?$mail;?>">
<INPUT TYPE=HIDDEN NAME=tdate VALUE="<?$persoajoindre;?>">
<INPUT TYPE=HIDDEN NAME=tdate VALUE="<?$poste;?>">
<INPUT TYPE=HIDDEN NAME=tdate VALUE="<?$rome;?>">
<INPUT TYPE=HIDDEN NAME=tdate VALUE="<?$motif;?>">
<INPUT TYPE=HIDDEN NAME=tdate VALUE="<?$competence;?>">
<INPUT TYPE=HIDDEN NAME=tdate VALUE="<?$domaine;?>">
<INPUT TYPE=HIDDEN NAME=tdate VALUE="<?$otre;?>">
<INPUT TYPE=HIDDEN NAME=tdate VALUE="<?$diplome;?>">
<INPUT TYPE=HIDDEN NAME=tdate VALUE="<?$plus;?>">
<INPUT TYPE=HIDDEN NAME=tdate VALUE="<?$plu;?>">
<INPUT TYPE=HIDDEN NAME=tdate VALUE="<?$qualif;?>">
<INPUT TYPE=HIDDEN NAME=tdate VALUE="<?$exigence;?>">
<INPUT TYPE=HIDDEN NAME=tdate VALUE="<?$souhait;?>">
<INPUT TYPE=HIDDEN NAME=tdate VALUE="<?$dure;?>">
<INPUT TYPE=HIDDEN NAME=tdate VALUE="<?$condition_exo;?>">
<INPUT TYPE=HIDDEN NAME=tdate VALUE="<?$lieu_travail;?>">
<INPUT TYPE=HIDDEN NAME=tdate VALUE="<?$nature;?>">
<INPUT TYPE=HIDDEN NAME=tdate VALUE="<?$deplacement;?>">
<INPUT TYPE=HIDDEN NAME=tdate VALUE="<?$salaire;?>">
<INPUT TYPE=HIDDEN NAME=tdate VALUE="<?$salair;?>">
<INPUT TYPE=HIDDEN NAME=tdate VALUE="<?$saler;?>">
<INPUT TYPE=HIDDEN NAME=tdate VALUE="<?$smic;?>">
<INPUT TYPE=HIDDEN NAME=tdate VALUE="<?$par;?>">
<INPUT TYPE=HIDDEN NAME=tdate VALUE="<?$direct;?>">
<INPUT TYPE=HIDDEN NAME=tdate VALUE="<?$contacter;?>">
<INPUT TYPE=HIDDEN NAME=tdate VALUE="<?$commentaire;?>">

<INPUT TYPE=SUBMIT VALUE="Validez"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</FORM>
<form>
  <input type="button" value="Retour" onclick="history.go(-1)">
</form>


</BODY>
</HTML>

par Ryle » 21 avr. 2006, 14:48

p'tit exemple...

Episode 1 : le Formulaire (dans une lointaine galaxie tout ça)
<form ... method="post">
  <input type="text" name="champ" value="<?=$_POST['champ'];?>">
  ...
</form>
Episode 2 : la Confirmation contre attaque
<form ... method="post">
  Vous avez saisi : <?=$_POST['champ'];?>
  <input type="hidden" name="champ" value="<?=$_POST['champ'];?>">
  ...
</form>
Episode 3 : L'attaque de l'enregistrement en base
$sql = "UPDATE ... champ='".$_POST['champ']."'" ... ";
Episode 3 bis : Le retour du formulaire

Faut un p'tit bout de javascript pour que le bouton annuler poste le formulaire caché non pas en direction de la base, mais du formulaire


jpaul >> je suis pas un grand expert en sécurité mais effectivement que ce soit en Get ou que ce soit en Post à mon sens ca ne change rien. C'est pas beaucoup plus compliqué de passer la variable dans l'url que de se faire une page html sur sa machine qui enverra les données par Post (bon après on peut aussi contrôler la page d'origine des données, mais y a surement un moyen de le trapper aussi... :))
C'est je pense plus au niveau des sessions ou cookies que la sécurité est améliorée : ca évite de pouvoir remplacer un "$_SESSION['admin']=true" qui restreint l'accès à une page, par un "&admin=true" dans l'url :)

par jpaul » 21 avr. 2006, 14:25

Arf j'étais encore pas connecté.
Mais c'est bon je commence à voir un premier élément de réponse, il sufffit par exemple de faire un autre formulaire sur un serveur quelconque qui utilise la méthode POST pour viser le scripte de traitement et forcer l'injection de variables non controlées par l'appli...

Merci de la remarque iclo :)

par Invité » 21 avr. 2006, 14:15

non, jpaul, si le register_global est à off , c'est très bien comme ça, et il faut éviter de le bypasser par une récupération à l'arache de tout ce qui est transmis par $_GET ou $_POST.
:oops: 8)
J'imagine que c'est pour des raisons de sécurité. Autant je vois bien les problèmes de sécurité avec la méthode GET autant avec POST, ça m"échappe un peu.
Je me dis toujours qu'il va falloir que je me penche sur l'aspect sécurité des scripts php mais faudrait que je me pose un peu...
Heu, si quelqu'un pouvait me donner un petit pointeur ou un peu d'explication pour que je puisse comprendre le risque qu'il y a à restituer les variables $_POST (à l'arache comme tu dis ;) ) ?

Merci :)

par ludger » 21 avr. 2006, 13:44

Ah, et un autre souci...

J'aimerais savoir, si lorsque l'utilisateur clique sur le bouton 'corriger' du fichier verification.php il est possible qu'il retrouve les valeurs saisies avant. Car la, il retourne sur le formulaire vide...

Merci de votre aide

par ludger » 21 avr. 2006, 13:28

Hello,

Tu peux reconstituer un formulaire sur ta page de validation, en plaçant toute les valeurs récupérées en champ cachés (en plus de les affichés dans le récapitulatif)). Ainsi lorsque l'utilisateur valide, tu ressoumets ce formulaire, et les valeurs sont à nouveau renvoyées vers la page suivante.
C'est pas bête comme idée, mais la avec ce formulaire caché, je dois utiliser la méthode 'get' ou 'post'... vu que ce n'est pas l'utilisateur qui remplira les champs cachés!

Aurais-tu un exemple à me montrer?

par iclo » 21 avr. 2006, 13:11

non, jpaul, si le register_global est à off , c'est très bien comme ça, et il faut éviter de le bypasser par une récupération à l'arache de tout ce qui est transmis par $_GET ou $_POST.
Je pense que Ryle a communiquer toutes les infos nécessaire à ludger pour continuer.

par jpaul » 21 avr. 2006, 12:08

je ne suis pas sûr d'avoir compris : (mais ça ne marche pas) c'est vague :)
Si ton problème est que ton formulaire est vide, c'est que tu n'as pas récupéré les variables il faut faire un truc du genre :
	reset($_POST);
	while (list($key, $val) = each($_POST)) {
//		echo "<BR>$key -> $val";
		$$key=$val;
	}
Ou la même chose avec $_GET (ca dépend de la méthode d'envoi de ton formulaire).

par Ryle » 21 avr. 2006, 11:54

Hello,

Tu peux reconstituer un formulaire sur ta page de validation, en plaçant toute les valeurs récupérées en champ cachés (en plus de les affichés dans le récapitulatif)). Ainsi lorsque l'utilisateur valide, tu ressoumets ce formulaire, et les valeurs sont à nouveau renvoyées vers la page suivante.

Tu peux aussi les stocker en session, mais c'est peut être un peu lourd pour pas grand chose... :)

transférer des variables

par ludger » 21 avr. 2006, 11:47

Bonjour, ayant un formulaire qui fonctionne correctement, et l'enregistrement des données dans ma BDD semble marcher correctement, je souhaiterai avoir une étape intermédiaire entre les deux.

J'ai donc créer un fichier verification.php récupérant les données du formulaire pour les afficher à l'écran, afin que l'utilisateur puisse vérifier, que les données qu'il a saisi, et si c'est correct valider. Validation qui elle lancera le fichier envoi.php enregistrant les données dans la base de données...

Mon souci est le suivant... Comment faire pour que le fichier envoi.php récupère les variables issues du fichier verification.php?

J'ai essyé include("verification.php") au début du fichier mais ça ne marche pas.

Auriez-vous la solution? Merci