formulaire et session

Eléphanteau du PHP | 15 Messages

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
Modifié en dernier par knebhi le 08 sept. 2009, 11:46, modifié 1 fois.

Mammouth du PHP | 991 Messages

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
DevOps, Symfony4, Hoa

Eléphanteau du PHP | 15 Messages

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?

Mammouth du PHP | 991 Messages

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)
DevOps, Symfony4, Hoa

Eléphanteau du PHP | 15 Messages

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

ViPHP
ViPHP | 1996 Messages

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>
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr