formulaire et session

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 : formulaire et session

Re: formulaire et session

par Aureusms » 10 sept. 2009, 19:39

Si tu veux travailler sur deux fichiers, tu va devoir utiliser session_start() et header ("location:...")

Dans ton fichier insert.php
<?php
session_start(); //démarrage des sessions
// on efface la varibale de retour
$_SESSION["retour_formulaire"] = "";
//connexion bdd header_tei
include("../bdd/connection.php");

//si clic sur le bouton "envoyer"...
if(isset($_POST['valider']))
{
 
// 1)upload des fichiers sur le serveur
//prévoir gestion des fichiers
 
  if($UploadOk)
  {
  // enregistrement des champs dans la bdd
  $_SESSION["retour_formulaire"] = "Ok";
  header("Cache-Control: no-cache, must-revalidate"); 
  header ("Location: ../bdd/form.php"); //vérifie si le chemin est bon
  exit();
  }
  else 
  {
  $_SESSION["retour_formulaire"] = "Formulaire posté incorrectement";
  header("Cache-Control: no-cache, must-revalidate"); 
  header ("Location: ../bdd/form.php"); //vérifie si le chemin est bon
  exit ();
  }
}
Form.php
<?php
session_start();
?>
<form method="post" action="../bdd/insert.php" name="formulaire"
        enctype="multipart/form-data" accept-charset="UTF-8">
 
<!-- infos CORPUS -->
<?php
if (isset($_SESSION["retour_formualire"]) && $_SESSION["retour_formualire"] != "Ok")
{
?>
<div>
  <p>
    Vous avez une erreur dans votre formulaire... Bien sûr ce n'est qu'un exemple!<br />
    Tu peux mettre ce que tu veux dans les variable des sessions et les afficher ici (voir pour ton input plus bas.
  </p>
</div>
<?php
}
?> 
 
 
<fieldset><legend>Informations générales sur le corpus</legend>
<table>
        <tr>
                <td><label for="Statut_corpus">Statut du corpus</label></td>
 
 
                <td><select size="1" name="Statut_corpus" id="StatutCorpus">
                        <!--                                    <option value="">---Sélectionnez---</option>-->
                        <option value="Transcrit">Transcrit</option>
 
 
                        <option value="Verifie_Non_Anonymise">Verifié - Non Anonymisé</option>
 
 
                        <option value="Verifie_Anonymise">Vérifié - Anonymisé</option>
 
                </select></td>
        </tr>
 
        <tr>
                <td><label for="NomFichierSource">Nom du dossier contenant le corpus
                informatisé (identifiant)</label></td>
 
                <td> <input type="text" size="30" name="NomFichierSource"
                        id="NomFichierSource" onblur="req_NomFichierSource();"> <span
                        id="NomFichierSource_check"></span></td>
        </tr>
 
</table>
</fieldset>
</form>

Re: formulaire et session

par knebhi » 08 sept. 2009, 12:13


Comment est générer ton formulaire ?.
je l'ai fait manuellement
pas de probléme c'est pour avoir des points de vue divers que je suis sur le forum ;-)

j'ai l'impression que la méthode que tu me conseille va poser un soucis avec l'interaction du javascript.
a moins que tu me dises le contraire :-)

session ou pas session là est la question

Re: formulaire et session

par thehawk » 08 sept. 2009, 11:53

Comme j'ai oublié de précisé c'est MON astuce après forcement il y a différents moyens mais personnelement je préfere limiter au maximum les intéractions entre pages (GET, POST , SESSION Etc...) (ok des fois c'est nécessaire mais a MON avis ici non)

A oui en effet j'ai pas pris en compte les affichage en JS.

Comment est générer ton formulaire ?.

La solution viendra de la ;) , car quand tu ajoute un champ en JS il sera forcement vide :p , alors quand tu le soumet tu t'attend a le revoir APRES le traitement de PHP.
Donc forcement il faut voir comment tu génére ton formulaire :).

Bye Hawk

ps: Encore une fois ce n'est QUE mon avis (et cela sur tout mes post même si je ne précise pas :D)

Re: formulaire et session

par knebhi » 08 sept. 2009, 11:43

<?php
if (!empty($_POST))
	{
		// On traite le formulaire ici
	}
// On défini les valeurs par défault des différents champs de formulaire
$new = (empty($_POST['new']))?'':$_POST['new']; // On regarde si le champ est vide ou non

echo '<form ...>';
echo '<input type=".." name="new" ... value="'.$new.'">';
echo '</form>';

?>
si je comprends bien tu me conseille de ne pas renvoyer vers une seconde page et dans ce cas pas besoin de session?
autre chose j'ai une grosse dose de js pour ajouter des champs dynamiquement ; est ce que cela va toujours fonctionner?
enfin dans ton exemple si tout est ok les données disparaitront ? et dans le cas contraire elle seront toujours affichée?

Re: formulaire et session

par thehawk » 08 sept. 2009, 11:32

L'astuce concerne a utiliser une même et unique page , voici un exemple avec un champ (ceci est un exemple fictif qui n'a pas de bouton valider etc hein ;)

<?php
if (!empty($_POST))
	{
		// On traite le formulaire ici
	}
// On défini les valeurs par défault des différents champs de formulaire
$new = (empty($_POST['new']))?'':$_POST['new']; // On regarde si le champ est vide ou non

echo '<form ...>';
echo '<input type=".." name="new" ... value="'.$new.'">';
echo '</form>';

?>
Après forcement on peut optimiser la chose en traitant les variable automatiquement mais la maintenabilité du code (je parle des $$key) est précaire !

Bye Hawk

formulaire et session

par knebhi » 08 sept. 2009, 11:18

Bonjour,

J'ai réalisé un formulaire qui comprend une cinquantaine de champs et des uploads.
Une fois le formulaire soumis il est renvoyé vers "insert.php" qui permet de stocker tout ça dans une bdd.
Jusqu'ici tout va bien!
Le problème est que je souhaiterai pouvoir revenir sur la page du formulaire au cas où l'upload se serait mal déroulé et pouvoir garder mes valeurs déjà saisies.
Je sais qu'il faut utiliser les sessions mais j'avoue avoir du mal à mettre en pratique.

Je me permets donc de mettre un bout de code pour avoir un coup de pouce.

voici un bout du formulaire
form.php
<form method="post" action="../bdd/insert.php" name="formulaire"
	enctype="multipart/form-data" accept-charset="UTF-8">
 
<!-- infos CORPUS -->
 
 
 
<fieldset><legend>Informations générales sur le corpus</legend>
<table>
	<tr>
		<td><label for="Statut_corpus">Statut du corpus</label></td>
 
 
		<td><select size="1" name="Statut_corpus" id="StatutCorpus">
			<!--					<option value="">---Sélectionnez---</option>-->
			<option value="Transcrit">Transcrit</option>
 
 
			<option value="Verifie_Non_Anonymise">Verifié - Non Anonymisé</option>
 
 
			<option value="Verifie_Anonymise">Vérifié - Anonymisé</option>
 
		</select></td>
	</tr>
 
	<tr>
		<td><label for="NomFichierSource">Nom du dossier contenant le corpus
		informatisé (identifiant)</label></td>
 
		<td> <input type="text" size="30" name="NomFichierSource"
			id="NomFichierSource" onblur="req_NomFichierSource();"> <span
			id="NomFichierSource_check"></span></td>
	</tr>
 
</table>
</fieldset>
</form>
voici le fichier insert.php (qui permet d'enregistrer tout cela dans une bdd)
<?php
//connexion bdd header_tei
include("../bdd/connection.php");
//si clic sur le bouton "envoyer"...
if(isset($_POST['valider']))
{
 
// 1)upload des fichiers sur le serveur
 
if($UploadOk)
			{
// enregistrement des champs dans la bdd
// destruction de la session 
 
 
}

else {
//retour sur le formulaire avec valeurs
}

}
 
comme vous voyez le mécanisme est là mais je ne sais pas trop comment mettre en place mes sessions dans mon formulaire et dans mon fichier insert.php

merci de l'aide