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 :

Conserver les données après le contrôle du formulaire


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Février 2007
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 63
    Par défaut Conserver les données après le contrôle du formulaire
    Bonjour,

    Voici mon souci. J'ai une page qui contient une dizaine de formulaire tous construit sur le même schéma dans une boucle foreach(). Pour chaque groupe de cheval, il y a donc un formulaire et pour chaque cheval du groupe il y a une ligne dans le formulaire qui répertorie tout ses attributs avec des boutons, des checkbox etc... Lorsque je valide un formulaire, je fais appel à mon contrôleur qui vérifie la cohérence de la saisie puis retourne les messages d'erreur ou exécute l'action souhaiter. Le problème c'est que en cas d'erreur tout mes cases sont décochées, mes champs de saisie vidés... Je voudrais donc utiliser $_REQUEST pour récupérer l'ancienne saisie mais chaque champs n'est pas unique je ne sais pas comment réaffecter chaque valeurs au bon formulaire et à la bonne ligne??
    Voici une extrait de la construction de mon formulaire:
    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
     
    <?PHP for($i=0;$i<$nombreDoublonPageCourante;$i++){?>
    			<?PHP
    				$chevaux=dsdeboub_chargerChevaux($doublons[$i]);
    			?>
    			<form name="form" method="post" action="<?PHP print(entities($_SERVER['PHP_SELF'])); ?>">
    				<table>
    					<caption><?PHP print(entities('#'.($i+1)));?></caption>
    					<tr>
    						<th>X*</th>
    						<th>ID*</th>
    						<th>Race de naissance*</th>
    						<th>Mere*</th>
    						<th>Pere*</th>
    						<th>Sexe*</th>
    					</tr>
    					<?PHP foreach($chevaux as $cheval){ ?>
    						<tr>
    							<td>
    								<input type=checkbox name="id_chevaux_selectionnes[]" value="<?PHP print($cheval['id']);?>">
    							</td>
    							<td>
    								<input type=radio name="id" value="<?PHP print($cheval['id']);?>">
    								<?PHP print("#".$cheval['id']);?>
    							</td>
    							<td>
    								<input type=radio name="race_naissance" value="<?PHP print($cheval['id_race_naissance']);?>">
    								<?PHP if($cheval['race_naissance']){print($cheval['race_naissance']);}else{print("--");}?>
    							</td>
    							<td>
    								<input type=radio name="mere" value="<?PHP print($cheval['id_cheval_mere']);?>">
    								<?PHP if($cheval['mere']){print($cheval['mere']);}else{print("--");}?>
    							</td>
    							<td>
    								<input type=radio name="pere" value="<?PHP print($cheval['id_cheval_pere']);?>">
    								<?PHP if($cheval['pere']){print($cheval['pere']);}else{print("--");}?>
    							</td>
    							<td>
    								<input type=radio name="sexe" value="<?PHP print($cheval['id_sexe']);?>">
    								<?PHP if($cheval['sexe']){print($cheval['sexe']);}else{print("--");}?>
    							</td>
    						</tr><?PHP }?>						
    						/* Bouttons d'action */
    						<tr>
    							<td class="action" colspan="3">
    								<input rel="dedoub_fusionner" name="fusionner" type="submit" value="Fusionner"/>
    							</td>
    							<td class="action" colspan="20">
    								<input rel="dedoub_voirFiche" name="voirFiche" type="submit" value="Voir la fiche"/>
    							</td>
    						</tr>
    				</table>
    				<p>
    					<input name="action" type="hidden" value=""/>
    				</p>
    			</form>
    		  <br/>
    		<?PHP } ?>
    Vous l'aurez compris, si chaque champs était repéré par un identifiant unique tout cela serait plus simple. Du genre l'id du cheval dont on a sélectionné le père, l'id du cheval sont on a sélectionné la race, le sexe... Sachant que je ne peut ni modifier les name ni les value

  2. #2
    Membre Expert Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 895
    Par défaut
    c'est un peu n'importe quoi ton truc... 10 formulaires l'un à la suite de l'autre et 10 submits à faire.... ben dis donc, j'espere que ça ne sera pas utiliser par 10.000 users sinon ton serveur il est par terre

    d'un autre cote, vu que tu peux rien modifier... t'as pas 36.000 solutions : ajouter un input hidden avec le numéro du formulaire...


    PS : t'as pas du bien comprendre à quoi servait $_REQUEST.... $_REQUEST n'a rien d'un historique de saisie... $_REQUEST contient juste les valeurs des variables $_GET, $_POST et $_COOKIE

  3. #3
    mon_nom_est_personne
    Invité(e)
    Par défaut
    et pourquoi pas stocker le tout dans une session ?

  4. #4
    Membre Expert Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 895
    Par défaut
    Citation Envoyé par mon_nom_est_personne Voir le message
    et pourquoi pas stocker le tout dans une session ?
    bah oui c'est obligatoire, ça me semblait logique... je l'ai pas précisé... mais bon, faut qu'il identifie ses différents formulaire donc obligé de mettre un input hidden (avec la valeur de $i par exemple)

  5. #5
    Membre confirmé
    Inscrit en
    Février 2007
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 63
    Par défaut
    Pour répondre a darkstar123456, c'est à la demande de l'unique futur utilisateur que je réalise ainsi mon application, donc le serveur tiendra largement la charge. Et un seul submit est exécuté à la fois si l'utilisateur veux travailler sur le 1er groupe il coche ce qu'il veut sur le premier formulaire puis valide c'est tout ?! $_REQUEST[' '] me permet de récupérer chaque champs dans mon contrôleur je sais donc très bien à quoi il me sert. J'ai même fait des test et en cas d'erreur j'arrive a récupérer chaque champs saisie en affichant $_REQUEST['le_champs_que_je_veux'] dans ma page. Mon problème c'est comment le réaffecter au bon champs dans le formulaire avec un checked=checked.

    Avec un input hidden je ne pourrai pas identifié chaque champs car il sera transmis même si la case n'est pas coché non?

    Merci pour vos réponse

  6. #6
    Membre Expert Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 895
    Par défaut
    normal que $_REQUEST te donne les bonnes valeurs... mais perso, je conseille plutot l'utilisation de $_POST ou $_GET

    sinon... comme je te l'ai dit tu ajoute un input hidden de ce type entre tes balises form :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="hidden" name="form_submited" value="<?php echo $i; ?>" />
    tu récupèreras alors la valeur de ton formulaire (de 0 à $nombreDoublonPageCourante-1)

    tu pourras le sauvegarder de cette façon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    // obligé d'utiliser les sessions :x
    session_start();
    $_SESSION[$_POST['form_submited']]['uneVariable'] = $_POST['uneVariable'];
    ensuite à l'affiche, il faut que tu affiches :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="text" name="uneVariable" value="<?php echo $_SESSION[$i]['uneVariable']; ?>" />

  7. #7
    Membre confirmé
    Inscrit en
    Février 2007
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 63
    Par défaut
    Je dois surement être très bête mais je ne vois pas en quoicela répond à mon problème. OK je récupère la valeur qui a été sélectionné je ne vais pas l'afficher mais la tester avec la valeur existante et si c'est la bonne alors je vais mettre un checked="checked".
    Mais par exemple si le cheval 1 et 3 sont dans le même formulaire, et si je sélectionne la race du cheval 1 et que le cheval 3 a la même mais je veux cocher celle du cheval 1, j'ai rien pour identifier que c'est la race du cheval 1 que je vais conservé en cas d'erreur dans la saisie du formulaire

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 17/06/2014, 16h53
  2. [MySQL] Mysql conserver les données après un retour de page
    Par fazpedro dans le forum PHP & Base de données
    Réponses: 21
    Dernier message: 31/08/2011, 09h56
  3. Conserver les données d'un tableau après fermeture d'un classeur
    Par steph6499 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 19/02/2011, 11h41
  4. Réponses: 4
    Dernier message: 02/12/2009, 12h27
  5. Réponses: 8
    Dernier message: 19/05/2005, 17h03

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