Redirection automatique page précédente sans perte de données formulaire. [Résolu]

anthony428 102 Messages postés vendredi 18 août 2006Date d'inscription 29 mai 2012 Dernière intervention - 6 juil. 2009 à 17:04 - Dernière réponse : anthony428 102 Messages postés vendredi 18 août 2006Date d'inscription 29 mai 2012 Dernière intervention
- 16 juil. 2009 à 09:24
Bonjour,

J'ai un formulaire en html. Je souhaiterais, au moment de la validation, qu'il y ait une redirection automatique vers ce formulaire tout en conservant les champs saisis par l'utilisateur.

En ce moment, lorsque je valide le formulaire et que l'utilisateur n'a pas rempli un des champs obligatoires, j'affiche un message lui demandant de remplir tous les champs mais ce dernier se retrouve face à une page blanche. Lorsque je fais une redirection du type "location..." le formulaire est vide !!!
Je souhaiterais faire une redirection automatique sur ce formulaire tel que l'utilisateur l'a saisi.

Est ce possible en php ?

j'ai du mal à trouver la solution seul.
J'ai trouvé des solutions javascript avec un "history back" mais j'aimerais si possible une solution php.
merci de m'aider à trouver une solution à mon problème.
Afficher la suite 

9 réponses

Répondre au sujet
kohntark 3708 Messages postés lundi 5 juillet 2004Date d'inscription 27 avril 2012 Dernière intervention - 6 juil. 2009 à 19:36
+3
Utile
Salut,

Si c'est une redirection pour cause de champs non remplis le mieux est encore de ne pas soumettre le formulaire, non ?
Un peu de javacript qui contrôle que chaque champ est correct et hop le tour est joué. C'est la méthode la plus simple et la plus logique.

Si tu souhaites laisser le formulaire rempli après sa soumission regarde du côté des sessions php.

Cordialement,

Kohntark -
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de kohntark
anthony428 102 Messages postés vendredi 18 août 2006Date d'inscription 29 mai 2012 Dernière intervention - 7 juil. 2009 à 09:09
0
Utile
tout d'abord, merci de m'avoir répondu si vite, c'est sympa de se sentir aidé.

En effet, je n'ai peut être pas besoin de soumettre le formulaire, je débute en php, javascript et je ne sais pas comment procéder. Je sais qu'il vaut mieux éviter le javascript lorsque cela est possible. Connait tu un script php qui pourrait me permettre de vérifier si un champ est rempli et dans le bon format (numeric, date ...) avant la soumission du formulaire ?

Je t'en remercie par avance.
Commenter la réponse de anthony428
kohntark 3708 Messages postés lundi 5 juillet 2004Date d'inscription 27 avril 2012 Dernière intervention - 7 juil. 2009 à 22:09
0
Utile
Il n'y a pas de script tout fait qui puisse répondre à ta demande, car elle dépend de tes champs (input, select, quantitatif, facultatifs, etc ...)

Je sais qu'il vaut mieux éviter le javascript lorsque cela est possible.
=>
C'est faux dans de nombreux cas, et ça l'est totalement dans le tien.
Le schéma que tu devrais retenir :
le client remplit le formulaire et clique sur le bouton "envoyer" => un script javascript contrôle que tous les champs sont OK :
- ils ne le sont pas => message d'erreur, on n'envoie pas le formulaire
- ils le sont => envoi vers le serveur. Le script php re contrôle que les champs sont corrects. Si ils ne le sont pas c'est probablement une tentative de hack.

Si tu veux de l'aide sur ton code n'hésite pas, poste le.

Cordialement,

Kohntark -
Commenter la réponse de kohntark
anthony428 102 Messages postés vendredi 18 août 2006Date d'inscription 29 mai 2012 Dernière intervention - 10 juil. 2009 à 10:29
0
Utile
Bonjour,
je te remercie de te pencher sur mon problème mais je n'arrive pas à comprendre comment je pourrais adapter mon code pour que celui si fonctionne comme tu me l'as indiqué.
Je post mon formulaire html ainsi que le code d'envoi du formulaire en php.
Merci de prendre le temps de m'aider à trouver la solution.

////////////////////////////////////FORMULAIRE/////////////////////////////////////////////////////
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Formulaire</title>

</head>

<form id=\"form\" name=\"form\" method=\"post\" enctype=\"multipart/form-data\" action=\"envoiform.php\">
  ----

    &nbsp;

     ,
 
  ----

    Les champs précédés d'une * doivent obligatoirement être saisis.

     ,
   
  ----

    <table width="813" border="0">
        ----

         , Date de l'entretien : *</td>
          <label>
         
          </label>,
          par : *,
          <label></label>,
       
     
</td>
    </tr>
  <tr>
    <td>        ----

          Société/établissement :*,
          <label></label>,
          Interlocuteur : *,
          <label></label>,
       
     
</td>
    </tr>
  <tr>
    <td>        ----

          &nbsp;,
          <label></label>,
          <label>Civilité : *</label>,
          <label>
      <select name="civilite" id="civilite">
            <option selected>---- Choisissez ----</option>
            <option>Monsieur</option>
            <option>Madame</option>
            <option>Mademoiselle</option>
      </select></label>,
       
     
</td>
    </tr>
  <tr>
    <td>        ----

          Adresse :,
          <label></label>,
          <label>Fonction : *</label>,
          <label></label>,
       
     
</td>
    </tr>
  <tr>
    <td>        ----

          BP :,
          <label></label>,
          Téléphone : *,
          <label>
         
          </label>,
       
     
</td>
    </tr>
  <tr>
    <td>        ----

          CP :,
          <label>
         
          </label>,
          Téléphone portable :,
          <label></label>,
       
     
</td>
    </tr>
  <tr>
    <td>        ----

          Ville :,
          <label></label>,
          E-mail :,
          <label></label>,
       
     
</td>
    </tr>
  <tr>
    <td>&nbsp;</td>
    </tr>
  <tr>
    <td>        ----

          Site Web :,
          <label></label>,
          &nbsp;,
          <label></label>,
       
     
</td>
    </tr>
  <tr>
    <td>      ----

        ,
                 

           
           

           ,
        ,
     
   
</td>
    </tr>
  </form>
</table>

</html>
///////////////////////////FIN DU FORMULAIRE/////////////////////////////////////

///////////////////////////////SCRIPT D ENVOI DU FORMULAIRE //////////////////////////////
<?php

//header('Refresh: 1; url=form.html');

session_start();
    $date_entretien = $_POST['date_entretien'];
    $nom_technicien = $_POST['nom_technicien'];
    $nom_societe = $_POST['nom_societe'];
    $interlocuteur = $_POST['interlocuteur'];
    $civilite = $_POST['civilite'];
    $adresse = $_POST['adresse'];
    $fonction = $_POST['fonction'];
    $bp = $_POST['bp'];
    $telephone = $_POST['telephone'];
    $cp = $_POST['cp'];
    $portable = $_POST['portable'];
    $ville = $_POST['ville'];
    $e_mail = $_POST['e_mail'];
    $site = $_POST['site'];
   
$test_date_entretien=explode("-",$date_entretien);

@$format_date = checkdate($test_date_entretien[1], $test_date_entretien[2], $test_date_entretien[0]); 

  if( $format_date == true ){

    if ($date_entretien!=''  && $nom_technicien!='' && $nom_societe!='' && $interlocuteur!='' && $civilite!='' && $fonction!='' && $telephone!='')
            {
                                       
    if ($cp== '')$cp='00000';
       
    include('connectBD.php');
    $query = "INSERT INTO champs (date_entretien,nom_societe,statut,adresse,bp,cp,ville,site,nom_technicien,interlocuteur,civilite,fonction,telephone,portable,e_mail) VALUES ('$date_entretien','$nom_societe','','$adresse','$bp','$cp','$ville','$site','$nom_technicien','$interlocuteur','$civilite','','$telephone','$portable','$e_mail')";
    $result = mysql_query($query) or die($query . " - " . mysql_error());   
   
    if ($result==1){
    echo "<script>alert("Les données ont bien été transférées")</script>";
   
    }else{
    echo "<script>alert("Il y a eu un problème lors de la transmission des données, veuillez réessayer.")</script>";
   
    }
   
   
    }else{
    echo "<script>alert("veuillez remplir tous les champs obligatoires (marqués d'une *)")</script>";
    }
   
   
    }else{echo "<script>alert("La date d'entretien n'est pas écrite dans le bon format ou n'a pas été saisie, veuillez utiliser le calendrier pour la saisir.")</script>";}
?>
///////////////////////// FIN DU SCRIPT D ENVOI ////////////////////////////////////////////
Commenter la réponse de anthony428
kohntark 3708 Messages postés lundi 5 juillet 2004Date d'inscription 27 avril 2012 Dernière intervention - 11 juil. 2009 à 10:21
0
Utile
Il faut que tu crée une fonction javascript qui sera appelée lors de la soumission du formulaire.

Voici un exemple on ne peut plus basique pour contrôler l'un des champs (à insérer avant la balise </head>) :

<script type="text/javascript">
function checkForm() {
  if (document.getElementById('nom_technicien').value == '') { // le champ n'est pas rempli
    alert('Veuillez remplir le champs "Par :"');
    return false; // le formulaire ne sera pas soumis
  }
 
 // a répéter avec les autres champs obligatoires en contrôlant que la saisie est correcte (format num de tel, ...)

  return true; // tout est OK, le formulaire sera soumis
}
</script>

L'appel de cette fonction se fait avec onsubmit :
<form id="form" name="form" method="post" enctype="multipart/form-data" action="envoiform.php" onsubmit="return checkForm();">

Une fois de plus c'est un exemple très basique, c'est juste pour te montrer la voie, il y a des millions d'exemples sur le web.

Côté PHP attention : tu ne traites pas correctement les données reçues. Une petite injection SQL et tu n'as plus de base de données.
Regarde du côté de mysql_real_escape_string.
Par ailleurs, "mysql_error()" ne doit être utilisé que pour le debug, pas en production pour éviter de fournir des renseignements importants sur la structure de ta DB.

Cordialement,

Kohntark -
Commenter la réponse de kohntark
anthony428 102 Messages postés vendredi 18 août 2006Date d'inscription 29 mai 2012 Dernière intervention - 15 juil. 2009 à 10:50
0
Utile
merci pour ces éléments de réponse.
cela va beaucoup m'aider.
Par contre, tu me fais peur avec ceci :
"Côté PHP attention : tu ne traites pas correctement les données reçues.
Une petite injection SQL et tu n'as plus de base de données."

Comment dois je procéder alors ?

merci beaucoup
Commenter la réponse de anthony428
cs_thierry la fronde 351 Messages postés mercredi 21 juillet 2004Date d'inscription 12 août 2009 Dernière intervention - 15 juil. 2009 à 15:07
0
Utile
Bonjour,

Peut-être en utilisant un code comme ça pour la réception des POST :
$item_name = htmlspecialchars($_POST['item_name']);

ou lors d'une connexio mysql:
$monPseudo = mysql_real_escape_string(htmlspecialchars($_POST['pseudo']))

Si je ne me trompe pas...

thierry la fronde
Commenter la réponse de cs_thierry la fronde
kohntark 3708 Messages postés lundi 5 juillet 2004Date d'inscription 27 avril 2012 Dernière intervention - 15 juil. 2009 à 18:56
0
Utile
Comment dois je procéder alors ?
=>
Je l'ai dit : "Regarde du côté de mysql_real_escape_string." :o)
Un ti tour sur la doc et hop, le problème est résolu. Tu devrais également te renseigner sur "injection SQL" pour bien comprendre de quoi il s'agit.


Cordialement,

Kohntark -
Commenter la réponse de kohntark
anthony428 102 Messages postés vendredi 18 août 2006Date d'inscription 29 mai 2012 Dernière intervention - 16 juil. 2009 à 09:24
0
Utile
OK merci pour votre aide, j'y vois déjà beaucoup plus clair dans la méthode de fonctionnement.
Commenter la réponse de anthony428

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.