IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Conservation des variables de formulaire


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Inscrit en
    Mars 2005
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 4
    Par défaut Conservation des variables de formulaire
    Bonjour à tous
    Je débute en PHP mais je sais que le sujet a été abordé un certain nombre de fois, mais j'ai beau chercher ici et ailleurs je ne trouve pas de solution claire...

    A partir d'un formulaire, je voudrais traiter les données dans la même page, afficher le résultat du traitement, et mettre un lien retour vers le formulaire et que celui-ci m'affiche toujours les données saisies avant le traitement.

    J'ai fait un bout de code simplifié, juste pour comprendre le fonctionnement et la syntaxe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    <html>
    <head>
    <title>Travaux code php</title>
    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
    </head>
     
    <body>
     
    <?php
    if(!empty($_POST['nom']))
    {
    echo 'Bonjour '; echo $_POST['nom']; echo ' !<br><br><a href="index.php">- retour -</a>';
    }
    else
    {
    echo'
    <form name="ajout" method="post" action="">
    <table width="300px">
    <tr>
    <td>Nom : </td><td><input type="text" name="nom" size="40" value="" ></td>
    </tr>
    </table>
    <br>
    <input type="reset" name="effacer" value="Effacer">
    <input type="submit" name="ajout" value="Ajouter">
    </form>
    ';
    }
    ?>
     
    </body>
    </html>
    J'ai essayé de manipuler les variables de session mais j'ai pas trouvé, j'ai tenté en ajoutant la variable $_POST dans le value de mon input, j'ai essayé avec la variable dans le lien du retour...

    J'espère avoir posté au bon endroit...

    Merci d'avance pour vos éclaircissements

  2. #2
    Modérateur
    Avatar de kolodz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 209
    Billets dans le blog
    52
    Par défaut
    Bonjour,

    Pour pouvoir utiliser les variables de session avec PHP, tu dois démarrer une session de manière explicite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <?php
    session_start();
    ?>
    Voici ton code avec une mise en session du nom :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    <html>
    <head>
    <title>Travaux code php</title>
    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
    </head>
     
    <body>
     
    <?php
    session_start();
    if(!empty($_POST['nom']))
    {
    	$_SESSION['nom']=$_POST['nom'];
    }
    if(!empty($_SESSION['nom'])){
    	echo 'Bonjour '; echo $_SESSION['nom']; echo ' !<br><br><a href="index.php">- retour -</a>';
    }
    else
    {
    echo'<form name="ajout" method="post" action="">
    	<table width="300px">
    	<tr>
    	<td>Nom : </td><td><input type="text" name="nom" size="40" value="" ></td>
    	</tr>
    	</table>
    	<br>
    	<input type="reset" name="effacer" value="Effacer">
    	<input type="submit" name="ajout" value="Ajouter">
    	</form>';
    }
    ?>
    </body>
    </html>
    Si une réponse vous a été utile pensez à
    Si vous avez eu la réponse à votre question, marquez votre discussion
    Pensez aux FAQs et aux tutoriels et cours.

  3. #3
    Futur Membre du Club
    Inscrit en
    Mars 2005
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 4
    Par défaut
    Merci pour cette réponse.
    Mais cette fois je ne vois pas si ça marche car le retour au formulaire ne se fait plus, je reste sur le bonjour $_SESSION['nom']...
    N'y a-t-il pas quelque chose à faire au niveau du lien ou du value de l'input ?

    Mon objectif réel (mais je voudrais d'abord comprendre avec un code tout simple) est un formulaire pour saisir des données comptables dans un BDD mysql.
    Je voudrais donc afficher le résultat d'un premier envoi et pouvoir revenir au formulaire avec les saisies précédentes encore dans les champs de manière à n'en modifier qu'un ou deux pour la saisie suivante, etc...

  4. #4
    Membre éclairé
    Femme Profil pro
    Consultant informatique
    Inscrit en
    Décembre 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Décembre 2011
    Messages : 26
    Par défaut
    si tu veux récupérer le nom lors du retour et sans utiliser de session, tu peux créer un formulaire également lors de l'affichage du Bonjour avec un champs cacher pour le nom voici un exemple:

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    <html>
    <head>
    <title>Travaux code php</title>
    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
    </head>
     
    <body>
     
    <?php
    $nom=$_POST['nom'];
    $retour=$_POST['retour'];
    if(!empty($nom) and empty($retour))
    {
    echo 'Bonjour '; echo $_POST['nom']; echo ' !<br><br>';
    echo '	<form name="ajout" method="post" action="">
    			<input type="hidden" name="nom" value="'.$nom.'">
    			<input type="submit" name="retour" value="retour">
    		</form>';
    }
    else
    {
    	echo'
    	<form name="ajout" method="post" action="">
    		<table width="400px">
    			<tr>
    				<td>Nom : </td>
    				<td><input type="text" name="nom" size="40" value="'.$nom.'" ></td>
    		</tr>
    		</table>
    		<br>
    		<input type="reset" name="effacer" value="Effacer">
    		<input type="submit" name="ajout" value="Ajouter">
    	</form>
    	';
    }
     
     
    ?>
     
    </body>
    </html>

    Attention si tu as besoin du nom ailleur que lors du retour je te conseille également les variables de session.

  5. #5
    Futur Membre du Club
    Inscrit en
    Mars 2005
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 4
    Par défaut
    Arfff... J'ai envie de dire "évidemment"... C'est logique et factoche !
    Merci PtiteA2 !

    Par contre, dans cet exemple simpliste c'est cool, mais dans un formulaire plus complexe est-ce que c'est bien protocolaire et est-ce que ça ne va pas trop surcharger le code ?

    Je ne pense pas avoir besoin des données (ici, le nom) ailleurs, j'aurai juste besoin de les injecter dans une BDD et donc de pouvoir revenir au formulaire en les réaffichant, mais il y en aura beaucoup plus que ça, avec des listes déroulantes etc...

    Je vais voir ce que ça donne avec cette solution.
    Je reste assez convaincu que je dois utiliser les sessions, mais malgré l'aide de kolodz ça ne marche pas... 'suis pourtant sûr de presque y être...

    Je verrai vos éventuelles autres réponses dans une dizaine de jours, quand j'aurai la trace des lunettes de ski d'ici là bonne fin d'année.

  6. #6
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 420
    Par défaut
    Si tu as beaucoup de champs à mettre dans tes variables de sessions tu as intérêt à les stocker dans un tableau pour éviter de trop polluer l'espace de nom de tes variables de sessions (qui perdurent tant que le navigateur client n'est pas fermé).

    genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    <?php
    if(isset($_POST['form']))
    {
    $_SESSION['form_client'] = isset($_SESSION['form_client'])? $_SESSION['form_client'] : array();
     
    //passage par référence pour rendre le code ci-dessous plus facile à écrire
    $_SESSION['form_client'] =& $form_client;
     
    $form_client['nom'] = isset($_POST['nom'])? $_POST['nom'] : null;
    $form_client['prenom'] = isset($_POST['prenom'])? $_POST['prenom'] : null;
    $form_client['mail'] = isset($_POST['mail'])? $_POST['mail'] : null;
    // etc...
     
    // redirection pour éviter la re ssoumission du formulaire en cas de raffraichissement de la page
    header("Location:".$_SERVER['PHP_SELF']);exit;
    }
     
     
    $input_client = isset($_SESSION['form_client'])? $_SESSION['form_client'] : null;
    ?>
    <form action= "#" method = "post">
     
    <input type = "text" name= "nom" value = "<?php echo isset($input_client['nom'])? $input_client['nom'] : ''?>" />
     
    <input type = "text" name= "prenom" value = "<?php echo isset($input_client['prenom'])? $input_client['prenom'] : ''?>" />
     
    <input type = "text" name= "mail" value = "<?php echo isset($input_client['mail'])? $input_client['mail'] : ''?>" />
     
    <input type = "submit" name= "form" value = "envoyer" />
     
    </form>
    L'avantage de cette manière de faire c'est que tu n'as utilisé que $_SESSION['form_client'] pour tous tes champs sinon tu aurais eu une variable de session pour chaque champ avec beaucoup plus de risque de collision de variables avec d'autres scripts dans les autre pages.

  7. #7
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2011
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juin 2011
    Messages : 70
    Par défaut
    Citation Envoyé par BigYann Voir le message
    Je voudrais donc afficher le résultat d'un premier envoi et pouvoir revenir au formulaire avec les saisies précédentes encore dans les champs de manière à n'en modifier qu'un ou deux pour la saisie suivante, etc...
    Je suis pas sur d'avoir bien compris, mais si c'est oui, ceci devrait faire l'affaire:

    Fichier dev.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
     
    <?php
    session_start();
    ?>
    <html>
    <head>
    <title>Travaux code php</title>
    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
    </head>
     
    <body>
     
    <?php
     
    // Cette condition est prise en compte quand:
    // * l'utilisateur arrive sur la page pour la première fois
    // * si il a cliqué sur le lien "annuler" lors du récapitulatif
    // * Si sa saisie a été complété et ajouté dans la base
    // Elle réinitialise les variables en mémoire
    if(!isset($_SESSION['form_values']) || $_GET['clear']=="yes") {
    	$_SESSION['form_values'] = Array(step=>1, nom=>NULL, prenom=>NULL);
    }
     
    // Fonction qui affiche le formulaire en mode saisie ou dur, ça évite de réécrire ce formulaire, et empeche le paté dans les conditions qui vont suivre après
    function displayForm($n=NULL, $val1=NULL, $val2=NULL) {
    	switch($n) {
    		default:
    			$_SESSION['form_values']['step'] = "1"; // Etape 1 saisie
    			echo '<form method="post" action="">
    				<table width="300px">
    				<tr>
    				<td>Nom : </td>
    				<td><input type="text" name="nom" size="40" value="'.$val1.'" /></td>
    				</tr><tr>
    				<tr>
    				<td>Prénom : </td>
    				<td><input type="text" name="prenom" size="40" value="'.$val2.'" /></td>
    				</tr><tr>
    				<td><input type="reset" name="effacer" value="Effacer" /></td>
    				<td><input type="submit" name="ajout" value="Suivant »" /></td>
    				</tr></table><input type="hidden" name="formSendedChecker" value="yes" />
    				</form>';
    		break;
     
    		case 2:
    			$_SESSION['form_values']['step'] = "2"; // Etape 2 récapitulatif des saisies
    			echo '<u>Récapitulatif des saisies</u><br> '; 
    			echo 'Nom: <b>'.$val1.'</b><br>
    				  Prénom: <b>'.$val2.'</b>';
    			echo '<br><br><a href="dev.php?clear=yes">- Annuler -</a>&nbsp;<a href="dev.php?modify=yes">- Modifier -</a>&nbsp;<a href="dev.php">- Insérer dans la base -</a>';
    		break;
     
    	}
     
    }
     
     
    if(isset($_POST['formSendedChecker'])) { // $formSendedChecker est l'input caché dans l'étape 1 du formulaire, ce qui suit ne s'éxécute donc que si on passe de l'étape 1 à 2
    	$err = false;
    	if(empty($_POST['nom'])) { $err = true; $errInfos = "Veuillez renseigner le champ nom<br>"; }
    	if(empty($_POST['prenom'])) { $err = true; $errInfos .= "Veuillez renseigner le champ prénom"; }
    	if($err==true) { // Si nom ou prénom est vide, on affiche l'indication d'une erreur et le formulaire
    		echo "<span style='color: red;'>".$errInfos."</span>";
    		displayForm("1", $_POST['nom'], $_POST['prenom']);
    	}
    	else { // Sinon, on stock les données saisies et on passe à l'étape 2
    		$_SESSION['form_values']['nom'] = $_POST['nom'];
    		$_SESSION['form_values']['prenom'] = $_POST['prenom'];
    		displayForm("2", $_POST['nom'], $_POST['prenom']);
    	}
    }
     
    else { // Si pas de $formSendedChecker
    	if($_SESSION['form_values']['step']==1) { // Ici l'affichage initial de la page, donc le formulaire vide (étape 1)
    		displayForm("1");
    	}
    	elseif($_SESSION['form_values']['step']==2) {  // A partir de l'étape 2
    		if(isset($_GET['modify'])) { // Si l'utilisateur a demandé à modifier son formulaire, on retourne à l'étape 1
    			displayForm("1",$_SESSION['form_values']['nom'], $_SESSION['form_values']['prenom']);
    		}
    		else {  // Sinon on passe à l'insertion dans la base
    			echo "Insertion dans la base du nom: <b>".$_SESSION['form_values']['prenom']."</b> et du prénom: <b>".$_SESSION['form_values']['nom']."</b>";
    			unset($_SESSION['form_values']); // Une fois insérées, les données du formulaire peuvent être effacées
    		}
    	}
    }
    ?>
     
     
    </body>
    </html>
    C'est codé rapidement, et c'est très basique, je vais surement me faire reprendre, mais tu as déjà une base de code qui fonctionne =)

  8. #8
    Futur Membre du Club
    Inscrit en
    Mars 2005
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 4
    Par défaut
    Merci pourt toutes vos réponses !
    Je n'ai pas tout solutionné, mais je devrais pouvoir me débrouiller avec vos explications.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Récupérer en Php des variables de formulaire
    Par francoisch dans le forum Langage
    Réponses: 3
    Dernier message: 24/10/2007, 20h44
  2. Récupération des variables de formulaire
    Par Delgion dans le forum Langage
    Réponses: 9
    Dernier message: 04/09/2007, 12h44
  3. Récupération rapide des variables de formulaire
    Par sekaijin dans le forum Langage
    Réponses: 4
    Dernier message: 15/12/2006, 21h37
  4. Portée des variables du formulaire ?
    Par renaud26 dans le forum Langage
    Réponses: 10
    Dernier message: 05/07/2006, 13h22
  5. [SQL] Récupérer des variables de formulaire dans une requête SQL
    Par psychoBob dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 22/11/2005, 18h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo