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

Paul87
Invité n'ayant pas de compte PHPfrance

24 mai 2013, 16:23

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>

Eléphant du PHP | 56 Messages

24 mai 2013, 17:50

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'];?>" />

Paul87
Invité n'ayant pas de compte PHPfrance

24 mai 2013, 20:20

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++

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

24 mai 2013, 20:45

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>

@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 56 Messages

25 mai 2013, 10:40

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'];?>

Paul87
Invité n'ayant pas de compte PHPfrance

25 mai 2013, 18:50

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"
}
}
?>

Eléphant du PHP | 56 Messages

25 mai 2013, 19:23

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');

Paul87
Invité n'ayant pas de compte PHPfrance

25 mai 2013, 20:59

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


Eléphant du PHP | 56 Messages

25 mai 2013, 21:05

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.

Paul87
Invité n'ayant pas de compte PHPfrance

25 mai 2013, 21:11

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?

Paul87
Invité n'ayant pas de compte PHPfrance

25 mai 2013, 21:13

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');
}
}
?>

Eléphant du PHP | 56 Messages

25 mai 2013, 21:35

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
?>

Paul87
Invité n'ayant pas de compte PHPfrance

25 mai 2013, 21:47

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!

Eléphant du PHP | 56 Messages

25 mai 2013, 21:51

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?

Paul87
Invité n'ayant pas de compte PHPfrance

26 mai 2013, 12:14

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>