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

WRInaute passionné
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:
<?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.
 
WRInaute accro
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.
 
WRInaute passionné
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:
<input name="envoyer" value="envoyer" type="button" onClick="return valider();"/>
Code:
<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 ?
 
WRInaute accro
Code:
<?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>
 
WRInaute passionné
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.
 
WRInaute accro
tryan a dit:
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.
 
WRInaute accro
Code:
  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é)
 
WRInaute accro
spout a dit:
tryan a dit:
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
 
WRInaute accro
UsagiYojimbo a dit:
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:
$_SESSION['form-post'] = $_POST;
header('Location: http://www.example.com/'.$url);
exit();

Puis après pr lire:
Code:
echo $_SESSION['form-post']['titi'];
 
WRInaute passionné
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 .
 
WRInaute passionné
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:
RewriteRule  ^tout/([^/]+)/?$  page1.php?a=$1 [QSA]

Le code de page1.php
Code:
<?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:
....
<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
 
Discussions similaires
Haut