probleme de recuperation données formulaire

Eléphant du PHP | 119 Messages

17 sept. 2011, 16:38

bonjour, je souhaite recuperer les données d'un formulaire pag1 sur pag2 avant de valider et envoyer sur bdd sur pag3.

mes soucis :

1/ le resultat ne s'affiche pas correctement sur pag2, seul les première lettres apparaissent.
2/ j'ai une partie avec 4 checkbox mais sans obligation de les cocher il s'agit d'un choix a faire, hors sur pag2 si elle ne sont pas coché j'ai une erreur.

formulaire pag1 :
<form method="post" name="objForm" action="traitement.php" enctype="multipart/form-data">     
							        <img src="imgvo/fld.png" align="absmiddle" /><span id="nome">Commencez donner un nom a votre projet.</span><br/>                   
                                <p>
                                      <label id="couleur">Nom du projet</label> : <input type="text" name="projet" />
                                </p>
					                <img src="imgvo/fld.png" align="absmiddle"/><span id="nome">Chosissez un modèle de page.</span><br/>
                                <p>
                                      <label id="couleur">Voir le modèles.&nbsp;:&nbsp;</label><a href='javascript:popupcentree("tarifs.php",549,450,"menubar=no,scrollbars=no,statusbar=no")'><img src="imgvo/Book.png" border="0" width="28" height="28" align="absmiddle"/></a><br/><br/>
									  <label id="couleur">Nom du modèle choisis*</label> : <select name="model" id="model" value="">
                                                                             <option value="salsa">Salsa</option>
                                                                             <option value="eclypse">Eclypse</option>
                                                                             <option value="agora">Agora</option>
                                                                             <option value="futur">Futur</option>
                                                                             <option value="versus">Versus</option>
                                                                             <option value="barok">Barok</option>
                                                                             <option value="velour">Velour</option>
                                                                             <option value="technical">Technical</option>
                                                                             </select>							   
							    </p>
								<p>
								    <img src="imgvo/fld.png" align="absmiddle"/><span id="nome">Chosissez les formulaires.</span><br/>
									  <div id="couleur">
							           <input type="checkbox" name="contact" value="contact"  /> <label for="contact">Formulaire de contact.</label>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                                       <input type="checkbox" name="questionnaire" value="questionnaire"  /> <label for="questionnaire">Questionnaire visiteurs.</label><br/>
                                       <input type="checkbox" name="localisation" value="localisation" /> <label for="localisation">Localisation et plan accès.</label>&nbsp;&nbsp;&nbsp;
                                       <input type="checkbox" name="devis" value="devis" /> <label for="devis">Formulaire demande de devis.</label><br/>
                                      </div>
								</p>
								<p>
								    <img src="imgvo/fld.png" align="absmiddle"/><span id="nome">Choix des couleurs dominantes.</span><br/><br/>
								      <table id="couleur" width="200" cellpadding="1" cellspacing="1">  
										<tr>										                                    										
										   <td><span id="couleur_titre">Titre</span></td><td><input type="text" size="10" name="f_color" value="" maxlength="7" style="font-family:Tahoma;font-size:x-small;">
                                           <img src="Img/color.gif" width="21" height="20" border="0" align="absmiddle" onClick="fctShow(document.objForm.f_color);" style="cursor:pointer;"></td>
                                        </tr>
                                        <tr>										                                        																			
										   <td><span id="couleur_stitre">Sous titres</span></td><td><input type="text" size="10" name="f_color2" value="" maxlength="7" style="font-family:Tahoma;font-size:x-small;">
                                           <img src="Img/color.gif" width="21" height="20" border="0" align="absmiddle" onClick="fctShow(document.objForm.f_color2);" style="cursor:pointer;"></td>
                                        </tr>
										<tr>                                           										
										   <td><span id="couleur_principal">Texte principal</span></td><td><input type="text" size="10" name="f_color3" value="" maxlength="7" style="font-family:Tahoma;font-size:x-small;">
                                           <img src="Img/color.gif" width="21" height="20" border="0" align="absmiddle" onClick="fctShow(document.objForm.f_color3);" style="cursor:pointer;"></td>   								
								        </tr>
								       </table>
								</p>
								<p>
								<img src="imgvo/fld.png" align="absmiddle"/><span id="nome">Choix de la langue du site.</span><br/><br/>
								         <select id="couleur" name="langue" id="langue"> 
                                            <option name="FR" value="FR">FR</option> 
                                            <option name="US" value="US">US</option> 
                                            <option name="SP" value="SP">SP</option>
											<option name="GE" value="GE">GE</option> 
                                         </select>
							    </p>
							  <input onClick=fonct_dial(this.form) type=reset value="R&eacute;tablir" name="button2">&nbsp;<input type="submit" value="Envoyer">
						
						</form>
recuperation et affichage sur pag2 :
<?php

$projet=$_POST['projet'];
$model=$_POST['model'];
$contact=$_POST['contact'];
$questionnaire=$_POST['questionnaire'];
$localisation=$_POST['localisation'];
$devis=$_POST['devis'];
$f_color=$_POST['f_color'];
$f_color2=$_POST['f_color2'];
$f_color3=$_POST['f_color3'];
$langue=$_POST['langue'];
?>


<div id="tableau">
		      <span id="liste"><img src="imgvo/picto_fleche3.gif"/>&nbsp;Nom du projet :        <b><?php echo $projet['projet']; ?></b></span><br/><hr/>
			  <span id="liste"><img src="imgvo/picto_fleche3.gif"/>&nbsp;Nom du modèle :        <b><?php echo $model['model']; ?></b> </span><br/><hr/>
			  <span id="liste"><img src="imgvo/picto_fleche3.gif"/>&nbsp;Type de formulaire 1 : <b><?php echo $contact['contact']; ?></b></span><br/><hr/>
			  <span id="liste"><img src="imgvo/picto_fleche3.gif"/>&nbsp;Type de formulaire 2 : <b><?php echo $questionnaire['questionnaire']; ?></b></span><br/><hr/>
			  <span id="liste"><img src="imgvo/picto_fleche3.gif"/>&nbsp;Type de formulaire 3 : <b><?php echo $localisation['localisation']; ?></b></span><br/><hr/>
			  <span id="liste"><img src="imgvo/picto_fleche3.gif"/>&nbsp;Type de formulaire 4 : <b><?php echo $devis['devis']; ?></b></span><br/><hr/>
			  <span id="liste"><img src="imgvo/picto_fleche3.gif"/>&nbsp;Couleur titre :        <b><?php echo $f_color['f_color']; ?></b></span><br/><hr/>
			  <span id="liste"><img src="imgvo/picto_fleche3.gif"/>&nbsp;Couleur sous titres:   <b><?php echo $f_color2['f_color2']; ?></b></span><br/><hr/>
			  <span id="liste"><img src="imgvo/picto_fleche3.gif"/>&nbsp;Couleur des textes:    <b><?php echo $f_color3['f_color3']; ?></b></span><br/><hr/>
			  <span id="liste"><img src="imgvo/picto_fleche3.gif"/>&nbsp;Choix de la langue:    <b><?php echo $langue['langue']; ?></b></span><br/>
          </div>

formulaire:
Image

resultat:
Image

je ne vois pas ou j'ai l'erreur, au niveau du choix des couleur ca m'ouvre une palette de couleur et après le choix le code hexa s'affiche donc je doit recuperer ce code.
mais la je n'est que le #.

et pour le reste que la premiere lettre

de plus si je ne coche pas les 4 case checkbox il m'affiche une erreur alors que c'est un choix non obligatoire.

merci

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

17 sept. 2011, 16:56

Quand tu fais " $projet=$_POST['projet']; ", tu récupères la valeur du champ "projet" de ton formulaire envoyé via la méthode post. Quand tu veux utiliser cette valeur, il faut utiliser la variable $projet et non pas chercher une valeur dans un tableau comme tu le fais ($projet['projet']) .. donc soit $projet, soit $_POST['projet'], mais pas un mélange des deux ;)

Quant aux cases à cocher, elles ne sont transmises via le formulaire que lorsqu'elles sont cochées. La méthode pour récupérer cette information est donc légèrement différente. En effet, tu ne récupères pas systématiquement la donnée (puisque non transmise si non cochée), et il te faut donc tester l'existence de la variable (avec empty ou isset par exemple)
if (isSet($_POST['contact'])) // si la case à cocher "contact" est cochée
  ...
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 119 Messages

17 sept. 2011, 17:16

ok merci, donc pour l'affichage c'est bon j'ai bien la totalité des lettres et chiffres

pour les checkbox j'ai tjr une erreur si je ne coche pas les 4.

Undefined index: questionnaire in C
<?php
if (isSet($_POST['contact']))
if (isSet($_POST['questionnaire']))
if (isSet($_POST['localisation']))
if (isSet($_POST['devis']))

$projet=$_POST['projet'];
$model=$_POST['model'];
$contact=$_POST['contact'];
$questionnaire=$_POST['questionnaire'];
$localisation=$_POST['localisation'];
$devis=$_POST['devis'];
$f_color=$_POST['f_color'];
$f_color2=$_POST['f_color2'];
$f_color3=$_POST['f_color3'];
$langue=$_POST['langue'];
?>

[ reglé
ensuite il ne me reconais pas la variable $post['projet']

Notice: Undefined variable: projet in

Code : Tout sélectionner

<label id="couleur">Nom du projet</label> : <input type="text" name="projet" />
[/color]]

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

17 sept. 2011, 20:49

Euh... l'intérêt de tester avec isset si une variable est présente, c'est de pouvoir faire quelque chose quand la case a été cochée... genre afficher un message, exploiter sa valeur, mettre à jour une variable, ...

En l'état actuel ton code fait ceci :

Code : Tout sélectionner

SI la case contact est cochée. SI la case questionnaire est cochée. SI la case localisation est cochée. SI la case devis est cochée. Stocke la valeur du champ projet dans la variable $projet. Stocke la valeur du champ model dans la variable $model. ...
La logique voudrait que ton if conditionne quelque chose.. par exemple :

Code : Tout sélectionner

SI la case contact est cochée AFFICHE un message qui dit que la case a été cochée FIN SI
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 119 Messages

17 sept. 2011, 22:31

en fait j'ai fait une modif, tout est ok sauf que ce coup si si je ne coche pas au moins une case j'ai une erreur.
<div id="res_form"><?php
                     foreach($_POST["options"] as $check)
                        {
                         if( !isset($checkoptions) ){ $checkoptions = $check; }
                         else{ $checkoptions .= "<br/>".$check; }
                        }
                      echo $checkoptions ;
                  ?></div>	

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

17 sept. 2011, 22:34

C'est toujours le même problème... tu ne peux pas utiliser une variable qui n'existe pas...

Tu demandes à php de parcourir le tableau $_POST["options"] avec un foreach sans te soucier de savoir si ce tableau existe ou non.. et quand aucune case n'est cochée, ce tableau n'existe pas, ce qui engendre ton message d'erreur.

Contrôle que le tableau existe avec isset avant de l'utiliser et cela fonctionnera nettement mieux :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 119 Messages

17 sept. 2011, 23:14

oui je ne doute pas de mon erreur mais le php suis pas trop fort, j'apprend doucement, en fait j'aide juste un copain a faire son site et lui non plus n'est pas une bete en php donc
on se debrouille comme on peu mais generalement on retient vite ..

j'ai lu quelques tuto et si je conprend bien il faut que je lui face lire le tableau et que je lui
dise si c'est coché fais ca si c'est pas coché fais ca ..
dit moi si je me trompe ..

if (isSet($_POST['options']))
{
//instructions
}
else
{
//instructions
}

ViPHP
xTG
ViPHP | 7331 Messages

18 sept. 2011, 10:06

Exact. :)

Eléphant du PHP | 119 Messages

18 sept. 2011, 17:01

en faite j'ai reussi hier soir a faire ce que je voulais, meme si cela fonctionne peut tu me dire si la logique est correct ou si tu aurais fais differement.
<?php
         $checkoptions='';
          if(isset($_POST["options"])){  
          foreach($_POST["options"] as $check)
     {
          $checkoptions .= $check."<br />";
                  }
                    }
           echo $checkoptions ;
 ?>

Eléphant du PHP | 119 Messages

18 sept. 2011, 19:47

une derniere chose pour cette fonction, donc la tout est ok, je recupere bien tout dans ma bdd mais sur le champ checkoptions je me retrouve avec les <br/>
y a t'il un moyen de concerver la mide en page mais de les supprimer sur la bdd ?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

18 sept. 2011, 23:34

Y a un moyen... y en a même plusieurs ;)

Tu peux faire deux variables (l'une avec les br et l'autre sans), faire une variables sans les br et afficher chaque option dans ta boucle avec un br (au lieu de le faire après), ou encore, remplacer les br dans ta chaîne avec un str_replace() ou autre avant de l'insérer en base, ...
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...