Envoi données form HTML & Php sur 2 pages
clementine
-
Marc de Grimaud -
Marc de Grimaud -
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>
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:
- Transmettre des données de page en page php
- Supprimer page word - Guide
- Mettre google en page d'accueil - Guide
- Imprimer tableau excel sur une page - Guide
- Page accueil iphone - Guide
- Traduire une page en français - Guide
5 réponses
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 !
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 !
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) :
et vers le début de "vignette2.php" (avant d'avoir commencé à sortir la page HTML):
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');
Merci pour vos réponses! Je vais tester les deux solutions. Je vous dirais demain ce qui marche/ne marche pas. :o)
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
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour, Clémentine avez-vous pensé à ce que le contenu de votre page soit généré dynamiquement en fonction du bouton soumis
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()).
<?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()).