deux redirections possible lors de la soumission d'un formulaire

Mammouth du PHP | 536 Messages

14 janv. 2008, 17:28

Bonjour, je voudrais savoir comment rediriger un utilisateur en fonction du bouton sur lequel il clique.
Par exemple, comment laisser l'utilisateur sur le formulaire sur lequel il travail lorsqu'il clique sur le bouton (ou un lien) "sauvegarder et continuer" et comment le rediriger sur la page d'accueil lorsqu'il clique sur "enregistrer et retour".

Merci de m'aider.
Un prof désespéré à son élève :
- Et maintenant, dessinez-moi un cercle au tableau... Voila... Alors qu'est-ce que c'est?
- Ben un cercle ?
- Non, c'est votre note, sortez !!

Eléphant du PHP | 319 Messages

14 janv. 2008, 17:47

une solution possible (il doit y en avoir plein d'autre)

dans ton formulaire:
tu peux creer 2 "boutons radio" et un bouton de validation (submit).
chaque bouton radio correspond a "sauvegarder et continuer" et "sauvergarder et retour"
quand l'un est clicke, l'autre n'est pas selectionne.

chaque bouton radio a une valeur differente (0 et 1 par exemple)
quand tu recuperes tes variables:
$radio_button = $_POST[radio_button];
if($radio_button == 0) 
{ faire action 0} 
else
{faire action 1}
niveau: pas terrible en php mais je me soigne...

Mammouth du PHP | 536 Messages

14 janv. 2008, 17:52

oui mais j'aimerais éviter cette solution. Je préfèrerai avoir deux boutons soumettre
Un prof désespéré à son élève :
- Et maintenant, dessinez-moi un cercle au tableau... Voila... Alors qu'est-ce que c'est?
- Ben un cercle ?
- Non, c'est votre note, sortez !!

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

14 janv. 2008, 17:55

Il me semble qu'en donnant simplement un nom à tes boutons submit, tu peux voir lequel à été cliqué dans $_POST (ou get le cas échéant) et agir en conséquence :)

@Choubix : juste une remarque en passant, un index dans un tableau est une chaine de caractère, donc penser aux apostrophes/guillemets : $_POST["radio_button"];
Tu vas me dire que ça marche aussi sans, mais c'est parce que php est bon et généreux, qu'il va chercher la constante radio_button, voir qu'elle n'existe pas et se dire "tiens, si ça s'trouve le développeur est pas doué et c'est pas une constante qu'il voulait mais la chaine de caractère... essayons la voir, sait-on jamais, ça pourrait lui faire plaisir" (si, si, php se dit tout ça quand vous délimitez pas vos chaines ! :))


Edit : et pour le coup des boutons, au pire, suffit de remplacer les submits par des boutons simple et avec un peu de javascript, de mettre à jour un champ hidden avec une valeur ou l'autre avant de soumettre le formulaire :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Mammouth du PHP | 536 Messages

14 janv. 2008, 18:07

En fait, si tu veux, lorsque je créé un enregistrement, dans mon url je n'ai pas d'di correspondant a mon enregistrement.
L'utilisateur saisi les champs adresses et j'ai mis en place un lien, qui lorsqu'on clique dessus soumet le formulaire (fait donc une insertion des champs déjà saisi dans la BDD) et recherche les coordonnées GPS de l'adresse saisie.
Avec ce lien, évnèment onclick:this.form.submit(); je faisais également une redirection avec location.href... de cette façon :

Code : Tout sélectionner

location.href='form.php?find_coord&idb=<? echo $idb; ?>'
seulement la variable $idb n'existait pas encore ($idb était le résultat d'une requête sql) puisque l'enregistrement n'existait pas.
Je suis alors redirigé vers ma form.php dans lequel il n'y a aucun champ saisi.

Je voudrais quand cliquant sur ce lien (qui se trouve dans le fichier form.php), je soumette mon formulaire et que j'insère donc les les différentes données dans ma base (cette action se fait avec le fichier enregistrer.php). Une fois l'insertion faite, si j'ai cliqué sur ce lien, je suis redirigé vers la page form.php en lui passant en get la valeur de la variable $idb nouvellement créée ($idb = mysql_insert_id(); )

Mais si j'ai cliqué sur un bouton soumettre de type submit, alors je ne suis pas redirigé vers cette page form.php mais vers ma page d'accueil.

Et là je ne vois pas comment faire la distinction entre les deux.
Tu pourrais être plus précis dans tes explications Ryle ?
et pour le coup des boutons, au pire, suffit de remplacer les submits par des boutons simple et avec un peu de javascript, de mettre à jour un champ hidden avec une valeur ou l'autre avant de soumettre le formulaire
Un prof désespéré à son élève :
- Et maintenant, dessinez-moi un cercle au tableau... Voila... Alors qu'est-ce que c'est?
- Ben un cercle ?
- Non, c'est votre note, sortez !!

Mammouth du PHP | 1885 Messages

14 janv. 2008, 18:12

Rien compris. Je m'essaie.

En gros, tu veux voir faire ceci:
1) Un bouton "Enregister et continuer l'édition"
2) Un bouton "Enregister et revenir à l'accueil"

Est-ce bien cela?

Dans les 2 cas, le formulaire devrait être soumis au même script PHP.
Tu crées 2 boutons de type submit.
Tu détectes lequel a été utilisé en vérifiant l'existence de la variable portant le même nom que le bouton submit.
Dépendament de celui qui a été utilisé, tu rediriges au bon endroit (accueil ou formulaire) en utilisant header()
La programmation est l'expression de la poésie d'un programmeur
Génération PHP

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

14 janv. 2008, 18:13

Bah euh, je peux toujours essayer :)

On est d'accord que quelque soit le bouton sur lequel il va cliquer, tu vas enregistrer les données, donc dans tous les cas, tu vas appeller enregistrer.php et lui passer les données. La différence va simplement venir, à la fin de ce traitement, de la page vers laquelle tu vas rediriger l'utilisateur, donc en gros, suffit de mettre un header("Location:...") et d'en changer la valeur en fonction du bouton cliqué :)
Si l'utilisateur veut revenir au formulaire, tu inseres les données en base, récupère l'id généré et le redirige vers form.php en lui passant l'id qui va bien. Si l'utilisateur veut revenir à l'accueil, tu met à jour ta base et le redirige vers ta page d'accueil :)

Commence déjà par donner un nom à tes deux boutons et regarde le contenu de $_POST lorsque tu clique l'un ou l'autre :)

Edit : méééeuuuhh ?! :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Mammouth du PHP | 1885 Messages

14 janv. 2008, 18:15

Edit : méééeuuuhh ?! :)
Ho la vache, t'es grilled :P
La programmation est l'expression de la poésie d'un programmeur
Génération PHP

Eléphant du PHP | 319 Messages

14 janv. 2008, 18:32

Il me semble qu'en donnant simplement un nom à tes boutons submit, tu peux voir lequel à été cliqué dans $_POST (ou get le cas échéant) et agir en conséquence :)

@Choubix : juste une remarque en passant, un index dans un tableau est une chaine de caractère, donc penser aux apostrophes/guillemets : $_POST["radio_button"];
Tu vas me dire que ça marche aussi sans, mais c'est parce que php est bon et généreux, qu'il va chercher la constante radio_button, voir qu'elle n'existe pas et se dire "tiens, si ça s'trouve le développeur est pas doué et c'est pas une constante qu'il voulait mais la chaine de caractère... essayons la voir, sait-on jamais, ça pourrait lui faire plaisir" (si, si, php se dit tout ça quand vous délimitez pas vos chaines ! :))


Edit : et pour le coup des boutons, au pire, suffit de remplacer les submits par des boutons simple et avec un peu de javascript, de mettre à jour un champ hidden avec une valeur ou l'autre avant de soumettre le formulaire :)
t'as mis le doigt dessus: le programmeur est pas doue! ;) (cf ma signature!)

bon ca sera 50 lignes de $_POST["mavariable"]; pour moi! ;)
niveau: pas terrible en php mais je me soigne...

Mammouth du PHP | 881 Messages

15 janv. 2008, 04:19

Serait-il satisfaisant d'avoir un input caché (type=hidden) dans lequel on conserve le choix du bouton cliqué, lequel choix est automatiquement transmis dans le tableau $_POST?

C'est possible si on met aux deux boutons input type= "submit" la vérification Javasacript Onsubmit="nom_input_cache.value='bouton_untel';"

Ensuite, dans ton enregistrer.php, tu peux récupérer la valeur de $_POST["nom_input_cache"] et agir en conséquence.
Soyez artisans de paix

Mammouth du PHP | 1885 Messages

15 janv. 2008, 04:59

Voici un exemple de la suggestion faite précédemment. Il ne faut pas dépendre de Javascript puisqu'une désactivation de celui-ci rendra ton formulaire inutilisable.
<?php
$something = isset($_POST['something']) ? $_POST['something'] : '';

if (isset($_POST['action'])) {

  echo 'Le bouton <strong>', htmlspecialchars($_POST['action']), '</strong> a été cliqué.<br>';
  echo 'La valeur <strong>', htmlspecialchars($something), '</strong> a été entrée.<br>';
}
?>

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
Something: <input type="text" name="something" value="<?php echo htmlspecialchars($something) ?>"><br>
<input type="submit" name="action" value="Sauvegarder et poursuivre">
<input type="submit" name="action" value="Sauvegarder et quitter">
</form>
La programmation est l'expression de la poésie d'un programmeur
Génération PHP

Mammouth du PHP | 536 Messages

15 janv. 2008, 10:09

ok merci à tous, en vérifiant quel bouton submit a été cliqué, j'arrive à faire la redirection que je souhaite.
Merci
Un prof désespéré à son élève :
- Et maintenant, dessinez-moi un cercle au tableau... Voila... Alors qu'est-ce que c'est?
- Ben un cercle ?
- Non, c'est votre note, sortez !!