Récupération d'un POST après submit

Petit nouveau ! | 5 Messages

21 déc. 2015, 10:32

Bonjour à tous,

Je vous contacte car j'essaie de mettre en place un double submit dans mon <form> et je n'arrive pas à récupérer le POST lorsque je clique sur le bouton prévisualisation.

Quelqu'un a une idée?
Merci.
<form method="post" action="">
<table border="0" align="center" cellspacing="1" cellpadding="1" width="100%">
<tr>
    <td>&nbsp;&nbsp;</td>
    <td>Texte</td>
    <td><textarea cols="80" rows="15" id="txt" name="txt" ></textarea></td>
</tr>
<tr>
     <th colspan="3">
	 <input type="submit" value="Visualisation" onclick="this.form.action='page.php?txt=<?php echo $_POST[txt]; ?>'; this.form.target='_blank'" />
	 <input type="submit" value="Valider" /></th>
</tr>
</table>  
  </form>
</td>
 </tr>
</table>

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9783 Messages

21 déc. 2015, 10:40

Bonjour et bienvenue sur PHPfrance,

La solution habituellement utilisée est de ne pas utiliser javascript mais d'avoir 2 boutons Envoyer et Prévisualisation avec des name="" différents
Et ensuite sur ta page de traitement tu va récupérer une variable avec le name du bouton cliqué et du coup soit tu affiches la prévisualisation, soit tu fais l'envoi réel
Quand tout le reste a échoué, lisez le mode d'emploi...

Petit nouveau ! | 5 Messages

21 déc. 2015, 12:47

Merci et merci pour ta réponse lumière!
J'ai essayé différentes choses dont :

récupération du POST
if (isset($_POST['visualisation']))
{
 $action = "page1.php?txt=".$_POST['txt']; // Le formulaire est prévisualisé
}
if (isset($_POST['submit']))
{
 // Le formulaire est soumis
 $action = "";
}
 <table border="0" align="center" cellspacing="1" cellpadding="1" width="100%">
<tr>
et boutons:
<input type="submit" name="visualisation" value="Visualisation" />
	 <input type="submit" name="envoyer" value="Envoyer" /></th>
Lorsque je clique sur visualiser, l'action submit se fait mais ne renvoie pas sur ma page1.php sauf si je clique une seconde fois, dans ce cas c'est ok., par contre pour l'envoi, rien ne fonctionne.... j'aimerai que cette page s'ouvre dans un nouvelle onglet ou fenêtre.

Merci.
Modifié en dernier par vovos78 le 21 déc. 2015, 15:03, modifié 1 fois.

ynx
Mammouth du PHP | 586 Messages

21 déc. 2015, 15:01

Salut,

Tu ne peux pas modifier la cible du formulaire en fonction des données POST puisque si ces données existent, c'est que le formulaire a déjà été envoyé.

Une solution possible est bien de cibler toujours le même fichier php pour le traitement du formulaire, et c'est dans ce traitement que tu vas renvoyer l'utilisateur vers la page désirée en fonction des données POST.
Par exemple :
<!-- Formulaire html -->
<form action="traitement.php" method="post" target="_blank">
	<textarea cols="80" rows="15" id="txt" name="txt" ></textarea>

	<input type="submit" name="visualisation" value="Visualisation" />
	<input type="submit" name="envoyer" value="Envoyer" />
</form>
<?php 
// fichier traitement.php
if (isset($_POST['visualisation'])) {
	include 'page1.php'; // traitement visualisation
} elseif (isset($_POST['envoyer'])) {
	include 'page2.php'; // traitement envoyer
}
Pour que la soumission du formulaire ouvre un nouvel onglet, il suffit d'ajouter l'attribut target="_blank" sur la balise form.

Bonne journée

Petit nouveau ! | 5 Messages

21 déc. 2015, 15:31

C'est top merci! la redirection se fait bien.

Par contre pour l'envoi du mail, je suis obligatoirement obligé de repasser par ma page qui contient mon formulaire car il y a différents paramètres que je dois récupérer...
Peut-on faire un truc du style :
<!-- Formulaire html -->
<form action="traitement.php" method="post" target="_blank">
  <textarea cols="80" rows="15" id="txt" name="txt" ></textarea>

  <input type="submit" name="visualisation" value="Visualisation" />
  <input type="submit" name="envoyer" value="Envoyer" />
</form>
et dans le traitement :
<?php 
// fichier traitement.php
if (isset($_POST['visualisation'])) {
  include 'page1.php'; // traitement visualisation
} elseif (isset($_POST['envoyer'])) {
  je renvois vers ma page précédente pour traiter le formulaire en ajoutant $debut = $_GET['debut']; à mon url
}
Merci.

ynx
Mammouth du PHP | 586 Messages

21 déc. 2015, 16:18

En utilisant include ou require pour traiter l'envoie du mail, le script inclus a toujours accès aux paramètres POST envoyés par le formulaire, pas besoin de repasser par la page précédente.

Sinon tu peux effectivement effectuer une redirection en php l'instruction header() vers le script de traitement d'envoi, mais les paramètres POST envoyés par le formulaire ne seront pas disponibles (pas de paramètres post dans une redirection avec header). Pour récupérer ces paramètres suite à une redirection, il faudra soit les enregistrer en session, soit les transmettre en paramètre GET lors de la redirection.

L'idéal serait de faire l'envoi directement dans le fichier de traitement (ou via un include par exemple) et d'effectuer une redirection seulement à la fin du traitement vers une page de confirmation (appliquant ainsi le principe POST-REDIRECT-GET).

Petit nouveau ! | 5 Messages

21 déc. 2015, 17:12

Ok je comprends.
Je vais essayer.

Merci.
j'ai commencé à faire :
// fichier traitement.php
if (isset($_POST['visualisation'])) {

echo "<meta http-equiv=\"refresh\"  content=\"0;url=page1.php?txt=".$_POST[txt]."\" />"; // traitement envoyer
Par contre j'aimerai que cette page s'ouvre dans un autre onglet pour pouvoir revenir à la page précédente en fermant l'onglet ou un truc du genre mais j'ai l'impression qu'avec <meta> ce n'est pas possible.

Dans l'idée ce que je souhaite faire c'est simple mais ne pratique ... :-(

En gros j'ai une page contenant mon formulaire et mes instructions d'envoi à ma BDD ainsi que ma fonction mail().
Depuis cette page je souhaitais dans mon formulaire avoir 2 boutons :
- 1 qui permet d'envoyer le formulaire
- 1 qui permet le simple affichage d'un pop up ou via un nouvelle onglet le texte envoy par le formulaire.

pour faire simple :
- 1 page qui contient tout le codage avec formulaire
- le formulaire à double fonction

C'est assez clair ?
Merci.

Petit nouveau ! | 5 Messages

22 déc. 2015, 15:46

Ok j'ai réussi enfin!
en faisant :
if (isset($_POST['visualisation'])) { 
    //update action
	$fichier = html_entity_decode($_POST['txt']);
	$couleur = $_POST['couleur'];
	include ("page1.php");

	 } else if (isset($_POST['envoyer'])) {
    //delete action
	include("");
	
} else {
    //no button pressed
}
Par contre, 2 choses :
- lorsque j'ai une QUOTE dans mon code, c'est affiché "&rsquo;"
- j'aimerai que include ("page1.php"); s'ouvre dans une autre page ou faire un bouton retour pour revenir sur le formulaire.

Merci