Précédent   Forum du club des développeurs et IT Pro > PHP > Langage > Formulaires
Formulaires Forum d'entraide sur les formulaires avec PHP. Avant de poster -> FAQ formulaires, Cours de formulaires et Sources de formulaires
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 30/12/2012, 20h23   #1
coppin
Invité de passage
 
Inscription : décembre 2012
Messages : 14
Détails du profil
Informations forums :
Inscription : décembre 2012
Messages : 14
Points : 0
Points : 0
Par défaut liste deroulante dans formulaire auto invoque et gestion des erreurs

Le problème est le suivant :
1) je débute ))
2) et c'est le plus important
pour les listes déroulantes avec gestion des erreurs, comme je travaille avec "print form" à chaque fois qu'il y en a une erreur dans le formulaire les donnees choisies dans mes listes déroulantes se remettent sur la valeur de base et donc je dois la rentrer à nouveau.

j'espère trouver une solution

merci
Code :
1
2
3
 
if (isset($_POST['go'])){
// on récupère les données si la variable go existe
puis le reste des contôles suit


mais le problème vient que pour mes input text j'ai une variable qui permet de consever ce qui a été choisi lorsque ke reviens au formulaire, mais je trouve pas de solution pour les selects

Code :
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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
 
$form = "<table>
 
 
 
<form METHOD=\"POST\" onsubmit=return checkform(this) enctype=\"multipart/form-data\" >
 
<table width=\"489\" border=\"1\">
  <tr>
    <td height=\"41\" bgcolor=\"#CCCCCC\">Type de Bien <font color=#FF0000><span>*</span></font></td>
  </tr>
  <tr>
    <td height=\"41\">
      <p>      
      <label for=\"type\">Type de commerce à vendre</label>
        <select name=type size=\"1\" id=\"type\" >
          <option  value=\"veuillez choisir\">Veuillez choisir</option>
          <option   value=\"commerce\" >commerce</option>
          <option  value=\"autre\" >Autre</option>
        </select><font color=#FF0000><span>*</span></font>$erreur_type</td>
 
      </p>   
  </tr>
</table>
<p>
 
 
 
<table width=\"489\" border=\"1\">
  <tr>
    <td height=\"41\" bgcolor=\"#CCCCCC\">Situation <font color=#FF0000><span>*</span></font></td>
  </tr>
  <tr>
    <td height=\"41\">
      <p>
        <label for=\"pays\">Pays</label>
        <select name=pays id=\"pays\" >
          <option value=\"Belgique\" >Belgique</option>
          <option value=\"France\"  >France</option>
          <option value=\"Luxembourg\" >Luxembourg</option>
        </select><font color=#FF0000><span>*</span>$erreur_pays</font>
      </p>
      <p>Adresse de l'acivité</p>
      <p>
        <label for=\"rue\">Rue :</label>
        <input type=\"text\" name=rue value =\"$rue\"  id=\"rue\"  />$erreur_rue
 
        <label for=\"numero\">N°:</label>
          <input name=numero type=\"text\" value =\"$numero\" id=\"numero\" size=\"6\" />$erreur_numero
 
      </p>
      <p>
        <label for=\"cp\">Code Postal :</label>
          <input name=cp type=\"text\" id=\"cp\" value =\"$cp\" size=\"6\" />$erreur_cp
 
        <label for=\"commune\">Commune: </label>
        <input type=\"text\" name=commune value =\"$commune\" id=\"commune\"$erreur_commune  />
        <br />
      </p>
      </td>
  </tr>
</table>
<p>
 
 
<table width=\"489\" border=\"1\">
 
     <tr>
     <td height=\"41\" bgcolor=#CCCCCC>Souhait financier <font color=#FF0000><span>*</span></font></td>
     </tr>
    <tr>
      <td height=\"121\"><p>Prix de vente des actions,parts sociales ou fonds de commerce</p>
        <p>
        <label for=\"type\">Type de Vente</label>
        <select name=type_vente size=\"1\" id=\"type\" >
          <option value=\"veuillez choisir\" >Veuillez choisir</option>
          <option value=\"action\" >Actions / parts sociales</option>
          <option value=\"fdc\" >Fonds ce commerce</option>
        </select><font color=#FF0000><span>*</span></font>$erreur_type_vente
        </p>
 
        <p>
        <label for=\"pv\">Prix de Vente :</label>
          <input type=\"text\" name=pv value =\"$pv\" id=\"pv\" ><font color=#FF0000><span>*</span>$erreur_pv
        <br />
        </p>
        </td>
    </tr>
</table>
<p>
 
 
 
 
<table width=\"489\" border=\"1\">
  <tr>
    <td height=\"41\" bgcolor=#CCCCCC>Descriptions <font color=#FF0000><span>*</span></font></td>
  </tr>
  <tr>
    <td height=\"121\"><p>Description brève ( 2 à 3 lignes maximum ) <font color=#FF0000><span>*</span></font></p>
      <p>
 
        <label for=\"description_breve\"></label>
        <textarea name=description_breve id=\"description_breve\"  cols=\"45\" rows=\"5\" WRAP=\"virtual\">$description_breve</textarea>
      </p>
 
      <p>Personnel</p>
      <p>
        <label for=\"personnel\"></label>
        <textarea name=personnel id=\"personnel\" cols=\"45\" rows=\"5\" WRAP=\"virtual\" >$personnel</textarea>
        <label for=\"chiffre\"></label>
      </p>
 
      <p>Chiffres clés</p>
      <p>
        <textarea name=chiffre id=\"chiffres\"  cols=\"45\" rows=\"5\" WRAP=\"virtual\">$chiffres</textarea>
      </p>
 
      <p>Description Détailée <font color=#FF0000><span>*</span></font></p>
      <p>
        <label for=\"description détail\"></label>
        <textarea name=description_detail id=\"description_detail\"  cols=\"45\" rows=\"5\" WRAP=\"virtual\">$description_detail</textarea>
      </p>
 
      </tr>
</table>
 
  <p>
  <table width=\"489\" border=\"1\">
    <tr>
      <td height=\"41\" bgcolor=#CCCCCC>Photos</td>
    </tr>
    <tr>
      <td height=\"121\"><p>Photo principale</p>
        <p>
          <label for=\"photo1\"></label>
          <input type=\"file\" name=photo1  id=\"photo1\" />
        </p>
        <p>vous pourrez ajouter 4 photos après confirmation</p>
        <p>
 
 
          <input type=submit name=go value=Envoyer />
          <input type=reset name=button value=Reset />
 
        </p>
 
    </tr>
  </table>
</form>
 
 
 
</table>";
 
print($form);
coppin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/12/2012, 22h43   #2
sabotage
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 16 504
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 16 504
Points : 21 342
Points : 21 342
Tu dois juste ajouter l'attribut selected quand tu ecris l'option correspond a la valeur envoyé par le formulaire :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
$tblPays = array('Belgique', 'France', 'Luxembourg');
echo '<select name="pays" id="pays">';
foreach ($tblPays as $pays) {
    if (isset($_POST['pays']) && $pays == $_POST['pays']) {
         $selected = ' selected="selected" ';
    }
    else {
         $selected = '';
     }
     echo '<option value="' . $pays . $selected . '">' $pays . '</option>';
}
echo '</select>';
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/12/2012, 10h51   #3
coppin
Invité de passage
 
Inscription : décembre 2012
Messages : 14
Détails du profil
Informations forums :
Inscription : décembre 2012
Messages : 14
Points : 0
Points : 0
Merci pour l'info je vois ou est la solution , j'ai supprimé les echo puisque je suis dans print form plus mis des /
mais ca ne marche pas voici le nouveau code et ce que j'ai en réponse

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<label for=\"pays\">Pays</label>
 
        $tblPays = array('Belgique', 'France', 'Luxembourg');
        <select name=\"pays\" id=\"pays\">;
        foreach ($tblPays as $pays) {
        if (isset($_POST\['pays'\]) && ($pays == $_POST\['pays'\]) {
         $selected = ' selected=\"selected\" ';
        }
    else {
         $selected = '';
         }
        <option value=\"' . $pays . $selected . '\">' $pays . '</option>;
        }
        </select>;


Sur le navigateur ca donne :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 <label for="pays">Pays</label>
 
         = array('Belgique', 'France', 'Luxembourg');
        <select name="pays" id="pays">;
        foreach ( as ) {
        if (isset(Array\['pays'\]) && ( == Array\['pays'\]) {
          = ' selected="selected" ';
        }
    else {
          = '';
         }
        <option value="' .  .  . '">'  . '</option>;
        }
        </select>;
merci pour ton aide
coppin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/12/2012, 11h13   #4
sabotage
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 16 504
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 16 504
Points : 21 342
Points : 21 342
echo et print sont presques identiques ... sauf que echo est plus rapide, en particulier pour afficher de grandes chaines de caractères justement.
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/12/2012, 11h50   #5
Bovino
Responsable Développement Web

 
Avatar de Bovino
 
Homme Didier Mouronval
Développeur Web
Inscription : juin 2008
Messages : 18 135
Détails du profil
Informations personnelles :
Nom : Homme Didier Mouronval
Âge : 42
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2008
Messages : 18 135
Points : 64 942
Points : 64 942
Ce que ton navigateur affiche montre que manifestement, ton code est mal encadré au niveau des quotes.
__________________
Pas de question technique par MP !
Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
Vous possédez un blog et aimeriez diffuser vos billets sur le forum, contactez-moi !
Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
Mon livre sur jQuery
Bovino est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/12/2012, 13h39   #6
coppin
Invité de passage
 
Inscription : décembre 2012
Messages : 14
Détails du profil
Informations forums :
Inscription : décembre 2012
Messages : 14
Points : 0
Points : 0
Oui ca j'avais compris que c'était mal encadré

Peut tu me dire comment encadrer les fonction : if, for, each,... dans print form pour quelles soient exécutées et pas imprimées?

sinon un lien ou je peux trouver les règles

merci
coppin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/12/2012, 13h52   #7
Bovino
Responsable Développement Web

 
Avatar de Bovino
 
Homme Didier Mouronval
Développeur Web
Inscription : juin 2008
Messages : 18 135
Détails du profil
Informations personnelles :
Nom : Homme Didier Mouronval
Âge : 42
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2008
Messages : 18 135
Points : 64 942
Points : 64 942
Citation:
comment encadrer les fonction : if, for, each,... dans print form
Je comprends rien... C'est quoi un print form ?

Mais bon, sinon, pour utiliser du code PHP quand tu écris le code HTML il suffit de fermer la chaine puis de la réouvrir...
Code :
1
2
3
4
5
6
7
echo '<select name="pays" id="pays">';
if(conditon){
    echo '<option value="foo">Condition vraie</option>';
}
else{
    echo '<option value="bar">Condition fausse</option>';
}
__________________
Pas de question technique par MP !
Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
Vous possédez un blog et aimeriez diffuser vos billets sur le forum, contactez-moi !
Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
Mon livre sur jQuery
Bovino est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/12/2012, 14h36   #8
coppin
Invité de passage
 
Inscription : décembre 2012
Messages : 14
Détails du profil
Informations forums :
Inscription : décembre 2012
Messages : 14
Points : 0
Points : 0
si tu regardes bien, je commence par (ligne 2)


et je termine par :

Code :
1
2
3
</table>";
 
print($form);
donc php imprime ma forme de ce fait je pense que dans ce cas il interprète mal les if , foreach,....

je suis dans une page auto invocant. Au départ il imprime mon formulaire (form) pui il controle s' il y a des erreur. si il y en a, il réimprime le formulaire mais en gardant les données enregistrées via les variables reprises dans le formulaire. si tout est ok il enregistre dans la BD.

Pour les "select" quand il y a une erreur meme ailleurs il réimprime le formulaire mais n'enregistre pas ce qui a été mis dans le "select". Car je n'ai pas de variable a ce niveau pour forcer un "selected".Ta solution est parfaite mais pas dans mon système car je ne parvient pas dans mon formulaire, comme tu l'as vu , a ce qu'il transforme le résultat des if ... en ligne d'instrution pour un formulaire


j'espère que c'est plus clair

désolé
coppin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/12/2012, 15h00   #9
Bovino
Responsable Développement Web

 
Avatar de Bovino
 
Homme Didier Mouronval
Développeur Web
Inscription : juin 2008
Messages : 18 135
Détails du profil
Informations personnelles :
Nom : Homme Didier Mouronval
Âge : 42
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2008
Messages : 18 135
Points : 64 942
Points : 64 942
Oui, mais moi ce que je t'explique, c'est que tout ce qui est entre le " d'ouverture de la chaine et le " de fermeture est considéré comme textuel, pas comme du code PHP à interpréter !
Citation:
dans ce cas il interprète mal les if , foreach
rien à voir ! Il n'y a rien à interpréter bien ou mal puisque tout cela constitue uniquement ta chaine de caractère !
__________________
Pas de question technique par MP !
Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
Vous possédez un blog et aimeriez diffuser vos billets sur le forum, contactez-moi !
Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
Mon livre sur jQuery
Bovino est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/12/2012, 17h33   #10
sabotage
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 16 504
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 16 504
Points : 21 342
Points : 21 342
Comme je t'ai expliqué coppin, ta méthode "print form" n'est pas bonne.
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/01/2013, 11h47   #11
coppin
Invité de passage
 
Inscription : décembre 2012
Messages : 14
Détails du profil
Informations forums :
Inscription : décembre 2012
Messages : 14
Points : 0
Points : 0
Bon j'ai changé mon formulaire avec " echo " entre parenthèse dommage que je n'ai pas eu de solution pour le "print".

SOIT j'ai un autre soucis

Code :
echo'<input type="text" name="rue" value ='."$commune".'>';
$commune est ma variable pour conserver ce que la personne a introduit si d'autres champs du formulaire sont incorrects et que le formulaire est réaffiché.

Mais si je rentre "rue de la source" il ma me mettre simplement rue

pouvez vous m'aider

merci
coppin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/01/2013, 17h52   #12
rawsrc
Modérateur
 
Avatar de rawsrc
 
Homme Martin
Dev indep
Inscription : mars 2004
Messages : 2 599
Détails du profil
Informations personnelles :
Nom : Homme Martin
Âge : 36
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Dev indep

Informations forums :
Inscription : mars 2004
Messages : 2 599
Points : 6 116
Points : 6 116
Envoyer un message via Skype™ à rawsrc
Salut,

PHP offre plein de manières différentes pour écrire du code proprement, cela serait bien que tu changes la tienne par une de cette liste
Parce que mettre tout le code HTML entre guillemets n'est pas la meilleure approche qui soit...

Ensuite tu devrais reprendre intégralement ton code parce qu'il n'est pas valide du point de vue HTML (balises mal fermées, incorrectement placées...)
Tu ne devrais pas non plus utiliser les tableaux pour la mise en forme et essayer de séparer complètement le CSS du reste.

Enfin, tu devrais aussi morceler la génération du HTML afin de t'y retrouver plus facilement.

Sache que pour les clés, il est bien plus simple de gérer des entiers de type id que du texte

Voici un début de reprise de ton code :
Code :
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
<?php
 
$types_commerces =
    function()
    {
        $data = array('Veuillez choisir', 'Commerce', 'Autre');
        $id   = (empty($_POST['type'])) ? 0 : intval($_POST['type']);
        $rows = '';
 
        if ( ! isset($data[$id])) {
            $id = 0;
        }
 
        foreach($data as $k => $v) {
            $selected  = ($k === $id) ? ' selected="selected"' : '';
            $rows     .=
<<<HTML
<option value="{$k}"{$selected}>{$v}</option>\n
HTML;
        }
 
        // ici tu devrais ajouter la gestion de $erreur_type
        return
<<<HTML
<label for="type">Type de commerce à vendre</label>
<select name="type" size="1" id="type">
    {$rows}
</select>
<font color=#FF0000><span>*</span></font>{$erreur_type}
HTML;
    };
 
 
 
 
?>
<table>
    <form method="post" onsubmit="return checkform(this)" enctype="multipart/form-data">
        <table width="489" border="1">
            <tr>
                <td height="41" bgcolor="#CCCCCC">Type de Bien <font color=#FF0000><span>*</span></font></td>
            </tr>
            <tr>
                <td height="41"><p><?php echo $types_commerces() ?></p></td>
            </tr>
        </table>
__________________
# Dans la Création, tout est permis mais tout n'est pas utile...
rawsrc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/01/2013, 21h10   #13
coppin
Invité de passage
 
Inscription : décembre 2012
Messages : 14
Détails du profil
Informations forums :
Inscription : décembre 2012
Messages : 14
Points : 0
Points : 0
Merci pour tes conseils
Entre temps j'ai effectivement changé mon approche en utilisant du html pour la présentation du formulaire et j'y place du php pour les variables style
Code :
<php? echo $trucmachin ?>
C'est plus clair et plus simple en effet

La, je suis un peu mort mais je lirais demain ton code

Bonne année a tous
coppin est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 05h43.


 
 
 
 
Partenaires

Hébergement Web