Envoi données form HTML & Php sur 2 pages

Fermé
clementine - 1 sept. 2008 à 17:13
 Marc de Grimaud - 30 mars 2010 à 11:18
Bonjour,
Avant tout, pardonnez mon ignorance.
J'essaie de créer un formulaire qui inclue des variables php et des données html toutes bêtes.
Ces données et variables doivent être envoyées sur deux pages différentes selon que la personne clique sur "valider" (page: vignette2.php) ou "abandonner" (page: refusVign1.php) .
Je n'arrive pas à envoyer les données du formulaire HTML puisqu'en définissant ACTION dans la balise FORM, je fixe une page d'envoi.
Comment faire pour défiir deux actions différentes, selon le bouton cliqué?
J'ai vu dans d'autres sujets des fonctions javascript avec onclick, mais je n'ai jamais utilisé le javascript, du coup, je n'arrive pas à faire fonctionner ce qui est proposé ailleurs.
Merci beaucoup par avance de votre aide!
Clémentine


voici le code utilisé jusqu'à maintenant et qui pose problème:


<?php
$numPart = 0;
$typeTexte = "";
$tpsInit = time();
function genererNumParticipant()
{
$file = fopen("../save/numero.txt","a+");

if($file)
{
$numPart = fgets($file);
fclose($file);
//echo "numero participant ".$numPart;
$file = fopen("../save/numero.txt","w+");
fwrite($file,$numPart + 1);
fclose($file);
return $numPart;
}
}

$part = genererNumParticipant();
// echo "participant".$part;


function determinePage($chiffre)
{

$num = rand(0,$chiffre);
return $num;
}

mt_srand ();
$numero = determinePage(4);

?>


<form name="questionnaire" action="vignette2.php" method="post">
...
ici se trouvent les inputs auxquels répondent les personnes
...
</table>
<table align="center">
<tr><td>
<input type="hidden" name="reponse" value="<?php echo $part; ?>">
<input type="hidden" name="tpsInit" value="<?php echo $tpsInit; ?>">
<input type="submit" value="next experiment">
</form>
</td></tr>
<tr><td>
<form name="refus" action="refusVign3.php" method="post">
<input type="hidden" name="reponse" value="<?php echo $part ?>">
<input type="hidden" name="tpsInit" value="<?php echo $tpsInit; ?>">
<input type="submit" value="withdrawn">
</form>
</td></tr>
</table>
A voir également:

5 réponses

manirac Messages postés 37 Date d'inscription lundi 1 septembre 2008 Statut Membre Dernière intervention 22 septembre 2008 6
1 sept. 2008 à 23:39
Si tu ne veux pas utiliser de Javascript, le mieux est de renvoyer systématiquement l'utilisateur vers une page intermédiaire en php. Il faut simplement envoyer à cette page une valeur qui indiquera quel bouton l'utilisateur a cliqué.
En fonction de cette valeur tu utilises l'instruction php header pour renvoyer vers l'une ou l'autre de tes pages.

<form name="questionnaire" action="intermed.php" method="post">

</table>
<table align="center">
<tr><td>
<input type="hidden" name="reponse" value="<?php echo $part; ?>">
<input type="hidden" name="tpsInit" value="<?php echo $tpsInit; ?>">
<input type="hidden" name="estaccepte" value="TRUE">
<input type="submit" value="next experiment">
</td></tr>
<tr><td>
<input type="hidden" name="reponse" value="<?php echo $part ?>">
<input type="hidden" name="tpsInit" value="<?php echo $tpsInit; ?>">
<input type="hidden" name="estaccepte" value="FALSE">
<input type="submit" value="withdrawn">
</form>
</td></tr>
</table>
...

puis dans page intermed.php
<?php
if ($_POST['estAccepte']=='TRUE') {
header("location:vignette2.php?tpsInit=$_POST['tpsinit']&reponse=....'")
}
else {
header("location:refusVign3.php?tpsInit=$_POST['tpsinit']&reponse=....'")
}

Evidemment, je n'ai pas testé avant de poster ce message.
Mais, je pense que ça doit marcher.

Bon courage !
1
Bonjour

Le plus simple à mon avis c'est d'avoir un seul form avec deux boutons submit. Tu donnes des noms différents aux deux boutons.
Au début de vignette2.php, tu testes lequel des deux boutons a été cliqué. Si c'est le bouton de refus, tu renvoies vers la page RefsVign3.php.

En résumé, dans ton formulaire (à remettre un peu en forme) :
<form name="questionnaire" action="vignette2.php" method="post"> 
... 
ici se trouvent les inputs auxquels répondent les personnes 
... 
</table> 
<table align="center"> 
<tr><td> 
<input type="hidden" name="reponse" value="<?php echo $part; ?>"> 
<input type="hidden" name="tpsInit" value="<?php echo $tpsInit; ?>"> 
<input type="submit" value="next experiment" name="accepte"> 
<input type="submit" value="withdrawn" name = "refus"> 
</form> 

et vers le début de "vignette2.php" (avant d'avoir commencé à sortir la page HTML):

...
if (isset($_POST['refus'])) header('Location: RefusVign3.php');
0
Merci pour vos réponses! Je vais tester les deux solutions. Je vous dirais demain ce qui marche/ne marche pas. :o)
0
Salut!
J'ai essayé les 2 méthodes, les deux fonctionnent partiellement.
J'arrive bien à être renvoyé vers la page "refus" et les variables php sont enregistrées avec la première méthode.
Mais dans les 2 cas, les données HTML ne sont pas renvoyées vers la page refus, et donc ne sont pas enregistrées.

J'ai laissé tomber l'idée d'enregistrer les données même quand les gens refusent de continuer, je n'ai pas le temps de chercher davantage comment faire marcher tout ça.
Tant pis! En tous cas, merci pour votre aide.
Clémentine
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Marc de Grimaud
30 mars 2010 à 11:18
Bonjour, Clémentine avez-vous pensé à ce que le contenu de votre page soit généré dynamiquement en fonction du bouton soumis
<?php if(isset($_POST["nom_bouton"])) {générer la page} ?>
et que de ce fait vous n'ayez pas à rediriger vers 2 pages différentes ?

Sinon pour que les données soient renvoyées vers la page "refus" vous pouvez les passer manuellement en GET en rajoutant "refus.php?donnee=valeur&donnee=valeur&donnee=valeur" etc. Je vous conseillerais de les URL encoder : passez la chaîne d'arguments à rawurlencode() et dans "refus.php" passez les arguments à rawurldecode() et si besoin de les échapper : passez à "refus" en addslashes() et récupérez les arguments avec stripslashes().

Sinon vos réponses présentent l'inconvénient de ne pas fonctionner avec un type image car là le nom n'est pas passé donc impossible de déterminer avec if(isset()).
0