Soucis formulaire dut à l'url généré dans action=""


tryan
WRInaute passionné
WRInaute passionné
 
Messages: 2355
Inscription: 20 Fév 2005

Soucis formulaire dut à l'url généré dans action=""

Message le Lun Oct 04, 2010 7:26

Bonjour,

Je souhaiterai envoyer des données via un formulaire vers une page dont l'url inclue dans action="" dépend des choix effectués à partir du formulaire.
Mon soucis sur ce type d'action est dut au faite que je suis obligé d'effectuer un double envoie (2 click sur "envoyer") pour faire transiter les informations à la bonne page.
Code: Tout sélectionner
<?php
if (isset($_POST["envoyer"]))
{
   $teste1 = $_POST["titi"];
   $teste2 = $_POST["tata"];
   if($teste1==0){
      echo 'Faites un choix dans titi';
   }
   else if($teste2==0){
      echo 'Faites un choix dans tata';
   }
   else{
      $url= ''.$teste1.'/'.$teste2.'/';
   }
}   
?>
<form name="toto" action="<?php echo $url;?>" method="post">
    <select name="titi">
       <option value="0">Choisissez</option>
       <option value="1">a</option>
       <option value="2">b</option>
       <option value="3">c</option>
    </select>
   
    <select name="tata">
       <option value="0">Choisissez</option>
       <option value="1">d</option>
       <option value="2">e</option>
       <option value="3">f</option>
    </select>
  <input name="envoyer" value="envoyer" type="submit"/>
</form>

Auriez vous une solution pour éviter cette action de double envoie lorsque l'url est généré par les choix du formulaire?

Merci de vos lumières.


UsagiYojimbo
WRInaute accro
WRInaute accro
 
Messages: 8579
Inscription: 23 Nov 2005

Re: Soucis formulaire dut à l'url généré dans action=""

Message le Lun Oct 04, 2010 8:59

Je pense que vu ce que semblent être ton objectif, tu peux faire ça en Javascript. Tu remplaces ton input submit par un input button, et sur l'action onclic de celui-ci tu met en place une fonction JS qui fait l'équivalent de ton test PHP mais en JS. Sachant que tu peux facilement changer l'attribut action d'un formulaire en JS.


tryan
WRInaute passionné
WRInaute passionné
 
Messages: 2355
Inscription: 20 Fév 2005

Re: Soucis formulaire dut à l'url généré dans action=""

Message le Lun Oct 04, 2010 11:44

Merci UsagiYojimbo,

Bon, je suis mal car une vrai burne en JS :?
Bon j'ai créé une petite fonction basique qui me permet de contrôler les champs des 2 select de mon exemple mais après je sèche..
Je ne sais pas comment on récupère les données ni comment faire transiter les données dans action="" ..

Code: Tout sélectionner
<input name="envoyer" value="envoyer" type="button" onClick="return valider();"/>

Code: Tout sélectionner
<script type="text/javascript" language="javascript" >
<!-- 
  function valider(){
    if(document.formulaire.titi.value == 0) {
        alert("Choisissez titi");
        document.formulaire.titi.focus();
        return false;
    }

    if(document.formulaire.tata.value == 0) {
        alert("Choisissez tata");
        document.formulaire.tata.focus();
        return false;
    }
//Après c'est le vide complet ...
}
// -->   
  </script>


Une piste ?

franckM
WRInaute impliqué
WRInaute impliqué
 
Messages: 834
Inscription: 15 Nov 2007

Re: Soucis formulaire dut à l'url généré dans action=""

Message le Lun Oct 04, 2010 12:04

tryan a écrit:
Bon, je suis mal car une vrai burne en JS


Ben comme ça on est 2... Ok je :arrow:


spout
WRInaute accro
WRInaute accro
 
Messages: 4382
Inscription: 14 Mai 2003

Re: Soucis formulaire dut à l'url généré dans action=""

Message le Lun Oct 04, 2010 12:24

Code: Tout sélectionner
<?php
if(isset($_POST["envoyer"])){
   $teste1 = $_POST["titi"];
   $teste2 = $_POST["tata"];
   if($teste1==0){
      echo 'Faites un choix dans titi';
   }
   elseif($teste2==0){
      echo 'Faites un choix dans tata';
   }
   else{
      $url= ''.$teste1.'/'.$teste2.'/';
      header('Location: http://www.example.com/'.$url);
      exit();
   }

}   
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="fr">

<body>

<form name="toto" action="<?php echo $_SERVER['PHP_SELF'];?>" method="post">
    <select name="titi">
       <option value="0">Choisissez</option>
       <option value="1">a</option>
       <option value="2">b</option>
       <option value="3">c</option>
    </select>
   
    <select name="tata">
       <option value="0">Choisissez</option>
       <option value="1">d</option>
       <option value="2">e</option>
       <option value="3">f</option>
    </select>
  <input name="envoyer" value="envoyer" type="submit"/>
</form>

</body>
</html>


tryan
WRInaute passionné
WRInaute passionné
 
Messages: 2355
Inscription: 20 Fév 2005

Re: Soucis formulaire dut à l'url généré dans action=""

Message le Lun Oct 04, 2010 13:34

Merci spout,

Je vais peut être dire une connerie mais aucune données ne peut être récupérer par POST suite à un header('Location: '); ..non ?

Moi, non seulement il faut que je construise l'url en fonction des données du document mais qu'en plus je puisse faire transiter des infos complémentaires.


spout
WRInaute accro
WRInaute accro
 
Messages: 4382
Inscription: 14 Mai 2003

Re: Soucis formulaire dut à l'url généré dans action=""

Message le Lun Oct 04, 2010 13:51

tryan a écrit:Je vais peut être dire une connerie mais aucune données ne peut être récupérer par POST suite à un header('Location: '); ..non ?

Tu n'a plus besoin de les récupérer en _POST après, vu que l'URL de redirection est composée de ces 2 paramètres _POST titi et tata.


UsagiYojimbo
WRInaute accro
WRInaute accro
 
Messages: 8579
Inscription: 23 Nov 2005

Re: Soucis formulaire dut à l'url généré dans action=""

Message le Lun Oct 04, 2010 13:54

Code: Tout sélectionner
  function valider(){
    if(document.formulaire.titi.value == 0) {
        alert("Choisissez titi");
        document.formulaire.titi.focus();
        return false;
    }else  if(document.formulaire.tata.value == 0) {
        alert("Choisissez tata");
        document.formulaire.tata.focus();
        return false;
    }else{
        //ici la récupération de tes données pour concaténation avec l'url du formulaire
        var param = "?param1="+document.formulaire.titi.value+"&param2="+document.formulaire.tata.value;
        document.formulaire.action = "http://www.example.com/formulaire.html"+param;
        document.formulaire.submit();
    }
}


(pas testé)


UsagiYojimbo
WRInaute accro
WRInaute accro
 
Messages: 8579
Inscription: 23 Nov 2005

Re: Soucis formulaire dut à l'url généré dans action=""

Message le Lun Oct 04, 2010 13:55

spout a écrit:
tryan a écrit:Je vais peut être dire une connerie mais aucune données ne peut être récupérer par POST suite à un header('Location: '); ..non ?

Tu n'a plus besoin de les récupérer en _POST après, vu que l'URL de redirection est composée de ces 2 paramètres _POST titi et tata.


A priori il y'a d'autres paramètres que ceux-ci qu'il cherche à récupérer


spout
WRInaute accro
WRInaute accro
 
Messages: 4382
Inscription: 14 Mai 2003

Re: Soucis formulaire dut à l'url généré dans action=""

Message le Lun Oct 04, 2010 14:04

UsagiYojimbo a écrit:A priori il y'a d'autres paramètres que ceux-ci qu'il cherche à récupérer

En effet, j'avais mal lu.

Par exemple, sauvegarder le contenu de $_POST dans $_SESSION['form-post']

Code: Tout sélectionner
$_SESSION['form-post'] = $_POST;
header('Location: http://www.example.com/'.$url);
exit();


Puis après pr lire:
Code: Tout sélectionner
echo $_SESSION['form-post']['titi'];


tryan
WRInaute passionné
WRInaute passionné
 
Messages: 2355
Inscription: 20 Fév 2005

Re: Soucis formulaire dut à l'url généré dans action=""

Message le Lun Oct 04, 2010 14:21

Merci à tout 2 de vous êtres penché sur ma question :) .

Effectivement, je n'ai pas que 2 paramètres à récupérer, c'est un peut plus compliqué puisqu'il sagit d'un formulaire de recherches intégré à l'ensemble des pages d'un site. Les url qui sont générées par le biais du formulaire sont des url déjà existantes (répertoires virtuels). Ce qui signifie que tout est utilisé dans l'url généré pour construire la requête de la page de destination. Je n'avais pas pensé au "header location" avec paramètres en plus :roll: ..

Je vais étudier les 2 codes pour résoudre mon soucis :mrgreen:
Encore merci .


tryan
WRInaute passionné
WRInaute passionné
 
Messages: 2355
Inscription: 20 Fév 2005

Re: Soucis formulaire dut à l'url généré dans action=""

Message le Mer Oct 06, 2010 23:02

Bonjour,

Me re voilà confronté à un nouveau soucis concernant encore et toujours les formulaires ..
J'ai donc opté pour des redirection par "header location" mais mes "selected='selected'" sont capricieux..

Soit le rewriting suivant :
Code: Tout sélectionner
RewriteRule  ^tout/([^/]+)/?$  page1.php?a=$1 [QSA]


Le code de page1.php
Code: Tout sélectionner
<?php
//L'information contient des lettres minuscules et/ou des tirets
if(isset($_GET['a']) && !empty($_GET['a']))
{
//J'utilise une fonction qui récupère le numéro id
   $categorie = fonction_id($_GET['a']);
//Le formulaire est envoyé   
if(isset($_POST["envoyer"])){
   $teste1 = $_POST["titi"];
   if($teste1==0){
      echo 'Faites un choix dans titi';
   }
   else{
      $url= ''.$teste1.'/';
      header('Location: http://www.example.com/tout/'.$url);
      exit();
   }

}   
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="fr">

<body>

<form name="toto" action="<?php echo 'http://'.$_SERVER["SERVER_NAME"].''.$_SERVER["REQUEST_URI"].'';?>" method="post">
    <select name="titi" onchange="javascript:submit(this)">
       <option value="0">Choisissez</option>
       <option value="1" <?php if($teste1==1){echo "selected='selected'";}?>>a</option>
       <option value="2" <?php if($teste1==2){echo "selected='selected'";}?>>b</option>
       <option value="3" <?php if($teste1==3){echo "selected='selected'";}?>>c</option>
    </select>
  <input name="envoyer" value="envoyer" type="submit"/>
</form>

</body>
</html>
<?php
//on ferme isset($_GET['a']
}
?>


Dans le code actuel, si la page se recharge dut à l'action du "onchange", mon "selected" fonctionne. Si je valide, je perd ma sélection et c'est normal.
J'ai donc modifié les "selected" de cette façon :
Code: Tout sélectionner
....
<option value="1"
<?php
if($teste1==1){
    echo "selected='selected'";
}
else if($teste1==$categorie){
    echo "selected='selected'";
}
?>>a</option>
....


Dans cette configuration, si je sélectionne les options dans l'ordre croissant (a, b, c) en validant à chaque fois, je garde ma sélection.
Par contre, si je sélectionne l'option (c), que je valide et que je veuille re sélectionner soit l'option (a ou b), mon "selected" reste coincé sur l'option (c).

En gros, je ne peux jamais remonter dans la liste ... Pourquoi ??

Merci


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: enams90 et 0 invités