Page 1 sur 3

retour page précédente en gardant les données

Posté : 24 mai 2013, 16:23
par Paul87
bonjour à tous
j'ai une page formulaire (FormA.php) et une page Adbase.php. cette dernière fait la connexion avec ma bdd, ajoute les données si certains champs obligatoires sont remplis. (comme pour beaucoup de formulaire on-line)
lorsque je teste, ça fonctionne très bien, si tous mes champs obligatoires sont remplis.
Par contre si un champ obligatoire est oublié, j'ai bien l'affichage du message d'information pour l'utilisateur, et un bouton "retour" à la page "formulaire".
Seulement le formulaire se retrouve complètement vide, et l'utilisateur doit tout re-saisir au lieu de juste compléter
Idéalement je voudrais que le formulaire se présente comme avant l'envoi sur Adbase.php (exactement comme si on utilisait la flêche retour d'un navigateur)
Auriez-vous une idée pour moi, svp (simple de préférence)
Merci par avance
pour mon retour sur la page formulaire, j'utilise le code ci-dessous:
<a href="FormA.php"><img src="Img/ret.jpg" alt="" width="50" height="50" /></a>

Re: retour page précédente en gardant les données

Posté : 24 mai 2013, 17:50
par J-oxi
Bonjour,

As tu penser aux sessions pour garder ton contenu?
session_start();
en début de page.
Tu enregistres les valeurs correctes lors du traitement:
if($Valid){
$_SESSION['Champ1'] = $MaValeur;
}
Et dans ton formulaire, pour tes champs :
<input type="text" name="monchamp" value="<?php if(isset($_SESSION['Champ1'])) echo $_SESSION['Champ1'];?>" />

Re: retour page précédente en gardant les données

Posté : 24 mai 2013, 20:20
par Paul87
euh non :oops:
comment dois-je faire?
session_start();
doit aller dans mon Adbase.php ? et
if($Valid){
$_SESSION['Champ1'] = $MaValeur;
}
aussi?
et je dois adapter ça
<input type="text" name="monchamp" value="<?php if(isset($_SESSION['Champ1'])) echo $_SESSION['Champ1'];?>" />
à tous les champs de mon formulaire?
en fait, je débute++

Re: retour page précédente en gardant les données

Posté : 24 mai 2013, 20:45
par moogli
salut,

Le plus simple c'est de faire la validation et le formulaire sur la même page comme ça tu n'auras pas de problème pour ré afficher le formulaire avec les données en cas de problème.

par exemple
<?php

if(!empty($_POST['le nom du bouton valider'])) {
// valider du formulaire
}
?>
<form method="post">
     <input name="truc" value="<?php if(!empty($_POST['truc'])) echo $_POST['truc']; ?>" />
</form>

@+

Re: retour page précédente en gardant les données

Posté : 25 mai 2013, 10:40
par J-oxi
En effet la méthode la plus simple serait de placer la vérification du formulaire sur la même page que celui-ci.

Dans le cas ou tu souhaites continuer avec deux pages, formulaire et vérification.
en haut de chacune des pages juste après le <?php :
session_start();
Lors du traitement de tes champs, une fois qu'ils sont vérifier et correct, tu places une variable session.
Si la vérification est fausse, pas d'ajout de session, ainsi le champ restera vide dans la page du formulaire.
// Traitement du champ numero 1
if($Valid){
$_SESSION['LE_NOM_DU_CHAMP'] = $ValeurDuChamp.
}
// ... pour chaque champ du formulaire.
N'oublie pas d'unset les sessions que tu a créer si ton formulaire est correct et envoyé.
unset($_SESSION['LE_NOM_DU_CHAMP']);
Et dans ton formulaire, comme dit dans la réponse précédente, tu ajoutes a chaque champs du formulaire pour la valeur :
<?php if(isset($_SESSION['LE_NOM_DU_CHAMP'])) echo $_SESSION['LE_NOM_DU_CHAMP'];?>

Re: retour page précédente en gardant les données

Posté : 25 mai 2013, 18:50
par Paul87
tout d'abord merci à vous 2 pour vos aides.
finalement, j'ai opté pour la solution php dans le formulaire.
mais j'ai encore quelques soucis, bien sur!
dans mon code ci dessous,(qui n'est qu'un exemple de mon formulaire final)
ça fonctionne bien, j'ai bien un message d'erreur quand un des champ n'est pas rempli, mais
j'ai un problème avec le menu déroulant après le "submit" il ne garde pas la valeur sélectionnée, il se remet à "choisissez".
de plus, si ok, tous les champs obligatoires remplis, je passe à connexion/ajout base, ça je sais faire,
mais comment passer automatiquement à une page confirmation.php
encore merci
<form method="post">

        
                          <strong>Région*</strong>
						  <SELECT name="reg" value="<?php if(!empty($_POST['reg'])) echo $_POST['reg']; ?>" />
							<option value='' style='background-color:#dcdcc3'>Choisissez</option>
							<OPTION>Alsace</OPTION>
							<OPTION>Aquitaine</OPTION>
							<OPTION>Auvergne</OPTION>
							<OPTION>Basse-Normandie</OPTION>
						  </SELECT>
		
		
			<td align="center"><strong>Titre article*</strong>&nbsp;</td>
		
			<td><INPUT type='text' name="TitrA" value="<?php if(!empty($_POST['TitrA'])) echo $_POST['TitrA']; ?>" /></td>
			
			
		<input type="Submit" value="envoyer" name="send">
		

</form>


<?php 

$reg    = $_POST["reg"] ;
$tit    = $_POST["TitrA"] ;

if($_POST['send'])
{
if(empty($reg))
 {
echo ('choix région obligatoire');
}
if(empty($tit))
 {
echo ('choix du titre obligatoire');
}



else
{
echo ('ok pour la suite..');
//connexion et ajout base..
//puis passage sur page " confirmation enregistrement base"
}
}
?>

Re: retour page précédente en gardant les données

Posté : 25 mai 2013, 19:23
par J-oxi
Pour le select :
<select name="reg">
<option value="Alsace" <?php if(isset($_POST['reg']) && $_POST['reg'] == 'Alsace') echo 'selected';?>>Alsace</option>
<option value="Aquitaine" <?php if(isset($_POST['reg']) && $_POST['reg'] == 'Aquitaine') echo 'selected';?>>Aquitaine</option>
....
</select>
Concernant le traitement php, il serait préférable de le mettre en début de page avant ton doctype.
Et la redirection vers une page confirmation, tu peux utiliser
header('Location:confirmation.php');

Re: retour page précédente en gardant les données

Posté : 25 mai 2013, 20:59
par Paul87
pas simple
que signifie ce message d'erreur, que je n'ai pas tout le temps.?
Warning: Cannot modify header information - headers already sent by (output started at /homepages/33/d277239121/htdocs/Perso/FormA.php:19) in /homepages/33/d277239121/htdocs/Perso/FormA.php on line 41


Re: retour page précédente en gardant les données

Posté : 25 mai 2013, 21:05
par J-oxi
Le header ne doit rien avoir afficher avant lui, espaces, echo etc.. puisque c'est l'entête, il se doit d'être en premier.

Re: retour page précédente en gardant les données

Posté : 25 mai 2013, 21:11
par Paul87
ben oui, mais dans mon cas le header est à la fin de mon code php, après la série de test sur les champs non vides et après connexion /ajout dans mas base.
que faire?

Re: retour page précédente en gardant les données

Posté : 25 mai 2013, 21:13
par Paul87
ci joint mon code
<?php 

  $tit   = $_POST["TitrA"] ;
  $detail   = $_POST["Detail"] ; 
  $dep    = $_POST["dep"] ;
  $reg    = $_POST["reg"] ;
  $cat    = $_POST["cat"] ;
  $type    = $_POST["type"] ;
  $pseudo   = $_POST["pseudo"] ;
  $mail  = $_POST["mail"] ;
  $tel   = $_POST["tel"] ; //pas obligatoire
  $cp     = $_POST["cp"] ; //pas obligatoire
  $status    = $_POST["status"] ;

if($_POST['send'])
{
if(empty($reg))
 {
echo (' choix région obligatoire ; ');
$reg='';
}
if(empty($dep))
 {
echo (' choix département obligatoire ; ');
$dep='';
}

if(empty($tit))
 {
echo (' choix du titre obligatoire ; ');
$tit='';
}



else
{
//connexion/ajout base
header('Location:confirmation.php');
}
}
?>

Re: retour page précédente en gardant les données

Posté : 25 mai 2013, 21:35
par J-oxi
Tu ne fais aucune vérifications sur les entrés utilisateur?
<?php 
if(!empty($_POST['send'])){
	// Var definition
	  $tit   = $_POST["TitrA"] ;
	  $detail   = $_POST["Detail"] ; 
	  $dep    = $_POST["dep"] ;
	  $reg    = $_POST["reg"] ;
	  $cat    = $_POST["cat"] ;
	  $type    = $_POST["type"] ;
	  $pseudo   = $_POST["pseudo"] ;
	  $mail  = $_POST["mail"] ;
	  $tel   = $_POST["tel"] ; //pas obligatoire
	  $cp     = $_POST["cp"] ; //pas obligatoire
	  $status    = $_POST["status"] ;
	  // Traitement
	  $Valid = true;
	  
	if(empty($reg)){
		$Valid = false;
		unset($reg);
		echo 'Choix région obligatoire.';
	}
	if(empty($dep)){
		$Valid = false;
		unset($dep);
		echo 'Choix département obligatoire.';
	}
	if(empty($tit)){
		$Valid = false;
		unset($tit);
		echo 'Choix du titre obligatoire';
	}
	if($Valid){
	header('Location:confirmation.php');
	}
} // end $_POST
?>

Re: retour page précédente en gardant les données

Posté : 25 mai 2013, 21:47
par Paul87
Merci pour ce code.!
mais je débute ++
maintenant ou dois-je placer mon code pour connexion/ajout dans base?
comment fait on pour les vérifications sur les entrés utilisateurs (je vais regarder les tutos)
j'ai encore un pb avec les champs textes (que je n'ai pas encore mis en obligatoires) ils se vident encore si "submit" avec des champs obligatires non remplis.
encore merci!

Re: retour page précédente en gardant les données

Posté : 25 mai 2013, 21:51
par J-oxi
Tu devrais poster ton code, pas évident de pouvoir répondre comme ça.
Tu as une page formulaire, sur la quelle se trouve ta form et le traitement. La page confirmation doit servir a quoi?
Récapitulatif des informations de ta form et re-submission avant mise en base de données?

Re: retour page précédente en gardant les données

Posté : 26 mai 2013, 12:14
par Paul87
voiçi le code complet de ma page FormA.php. (il s'agit d'une page qui permet de proposer ou rechercher des articles médicaux soit grand public soit pro)
en fait, je souhaite que tous les champs obligatoires soient remplis. et que lorsque 'submit' si champs obligatoires maquants message information, mais sans vider complètement les champs déja complétés.
Ou dois-je mettre le code php pour connexion / ajout dans ma BDD si tous les champs ok?
Si tous les champs ok :message du genre "votre demande est enregistrée, elle sera en ligne après validation" puis retour sur index.php
Mille excuses, mon code n'est surement pas très clean, je bidouille et teste ++
De plus, la partie <SCRIPT language="JavaScript"> sert a faire fonctionner le Select Département en fonction du Select Région (Il n'est pas complété en entier à ce stade)
Merci pour ton aide et tes conseils
<?php 
if($_POST['send']){
        // Var definition
          $tit   = $_POST["TitrA"] ;//champ obligatoire
          $detail   = $_POST["Detail"] ; //champ obligatoire
          $dep    = $_POST["dep"] ;//champ obligatoire
          $reg    = $_POST["reg"] ;//champ obligatoire
          $cat    = $_POST["cat"] ;//champ obligatoire
          $type    = $_POST["type"] ;//champ obligatoire
          $pseudo   = $_POST["pseudo"] ;//champ obligatoire
          $mail  = $_POST["mail"] ;//champ obligatoire
          $tel   = $_POST["tel"] ; //..............................champ pas obligatoire
          $cp     = $_POST["cp"] ; //.............................champ pas obligatoire
          $status    = $_POST["status"] ;
          // Traitement
          $Valid = true;
          
        if(empty($reg)){
                $Valid = false;
                unset($reg);
                echo 'Choix région obligatoire.';
        }
        if(empty($dep)){
                $Valid = false;
                unset($dep);
                echo 'Choix département obligatoire.';
        }
        if(empty($tit)){
                $Valid = false;
                unset($tit);
                echo 'Choix du titre obligatoire';
        }
        if($Valid){
        header('Location:confirmation.php');
        }
} 
//end $_POST;
?>
 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">


<HTML>
	<TITLE>Formulaire de Dépôt</TITLE>

<link rel="stylesheet" href="css/style.css" type="text/css" media="screen" />
<form method="post">
<SCRIPT language="JavaScript"> 
<!--
function Choix(form) {
i = form.reg.selectedIndex;
if (i == 0) {
  for (i=0;i<4;i++) {
    form.dep.options[i].text="";
    }
  return;
  }
form.dep.selectedIndex = 0;
switch (i) {
case 1 : var txt = new Array ('','Bas-Rhin','Haut-Rhin'); break;
case 2 : var txt = new Array ('Dordogne','Gironde','Landes','Lot-et-Garonne','Pyrénées-Atlantiques'); break;
case 3 : var txt = new Array ('Allier','Cantal','Haute-Loire','Puy-de-Dôme'); break;
}
form.dep.options[0].text="Département";
for (i=0;i<4;i++) {
  form.dep.options[i+1].text=txt[i];
  }
} 
// -->


</SCRIPT>

</head>
<body>


<table  border="5" align="center" cellpadding="1" cellspacing="4" class="table_n">
<br>
        <tr> 
          <td align="center" bgcolor="#009900"><FONT size="6"><strong>Déposez votre annonce...</strong></FONT>&nbsp;&nbsp;
		  
				          <strong>Vous proposez, vous recherchez ?*</strong>
			   			  <select name="type" id="type" class="eingabe">
							  <option value="" selected>Sélectionnez</option>
							  <option value="P">je propose</option>
							  <option value="R">je recherche</option>
						 </select>
				  </td >	
		</tr>  
</table>
<br>
 <table align="center">			  
				  
				  
				  
				  
				</tr>
                 <tr> 
                   <td align="center">				 
			   			  <strong>Quelle catégorie*</strong>&nbsp;
                          <select name="cat" id="cat" class="cat">
                            <option value="0">Choisissez</option>
                            <option value='1' style='background-color:#dcdcc3' disabled id='cat1' >-&#45; VEHICULES -&#45;</option>
                            <option value='Voiture'  id='cat2' >Cardiologie</option>
                            <option value='Tandem'  id='cat3' >Pneumologie</option>
                            <option value='4'  id='cat4' >Dermatologie</option>
                            <option value='5'  id='cat5' >Hématologie</option>

                          </select></td>	
					
				</tr>
	
</table>
<br>
          <table align="center">
               <tr>
                  
				  <td align="center">
				          <strong>Région*</strong>
			   			  <SELECT NAME="reg" onChange='Choix(this.form)'>
							<option value="">Choisissez</option>
							<option value="Alsace" <?php if(isset($_POST['reg']) && $_POST['reg'] == 'Alsace') echo 'selected';?>>Alsace</option>
							<option value="Aquitaine" <?php if(isset($_POST['reg']) && $_POST['reg'] == 'Aquitaine') echo 'selected';?>>Aquitaine</option>

							</select>

				   
				  
				  	<align="center">
			   			  <strong>Département*</strong>
                          <SELECT NAME="dep">
							<option value="">Choisissez</option>
							<OPTION></OPTION>
							<OPTION></OPTION>
							<OPTION></OPTION>
							<OPTION></OPTION>
							<OPTION></OPTION>
							</SELECT>
							
						<strong>&nbsp;Code Postal</strong> <em>(facultatif)</em>&nbsp <INPUT type=text id="cp"  name="cp"size="5">
							
							
							
					</td>	
				  
				   
				  
				  
				</table>
<br>				  
<table border="2" align="center" cellpadding="3" cellspacing="3">


	<td align="center"><strong>Titre de l'article*</strong>&nbsp;</td>
	<td><INPUT type=text id="TitrA"  name="TitrA"size="65"></td>
	
    <tr> 
    <td align="center"><strong>Descriptif de l'article*</strong>&nbsp;</td>
	<td><textarea type=text id="Detail" name="Detail" rows="5" cols="50"></textarea></td>
    </tr> 

</table>
<br>
<table border="2"align="center">
<TR>
	<td align="center"><strong>Vous êtes*:&nbsp;&nbsp; un professionnel<INPUT type=radio name="status" value="Pro">
	    ou <INPUT type=radio name="status" value="Part">un particulier </TD>
		
</TR>
</table>

<table border="2" align="center" cellpadding="4" cellspacing="3">
<TR>

	<td>&nbsp;<strong>Nom*</strong> <em>(ou pseudo)</em>&nbsp
    <INPUT type=text name="pseudo"size="15">&nbsp;&nbsp
   
	<strong>Email*</strong>&nbsp
	<INPUT type=text name="mail"size="35">&nbsp;&nbsp
	
    <strong>&nbsp;Tel</strong> <em>(facultatif, visible si entré )</em>&nbsp
	<INPUT type=text name="tel"size="11"></td>
	
	<br>
</TR>	
	
</table>

<table border="5" align="center" cellpadding="1" cellspacing="4">
<br>
<TR>
	<td align="center" bgcolor="#009900"><INPUT TYPE="submit" NAME="send" VALUE="Envoyer">&nbsp;
    <input type="reset" name="reset" value="Effacer" /></TD>
</TR>
</table>
</form>