Afficher popup à partir fichier 2 formulaires

Résolu/Fermé
danielos77 Messages postés 108 Date d'inscription samedi 18 février 2006 Statut Membre Dernière intervention 16 janvier 2024 - Modifié le 9 avril 2020 à 17:33
danielos77 Messages postés 108 Date d'inscription samedi 18 février 2006 Statut Membre Dernière intervention 16 janvier 2024 - 10 avril 2020 à 08:20
Bonjour,

J'avais un fichier avec 1 seul formulaire et une popup qui s'ouvrait très bien.
Pour diverses raisons, j'ai dû modifier le fichier pour finir avec 2 formulaires sur la même page.
Évidement, la popup ne fonctionne plus.

Il y aurait un soucis avec les variables à afficher, je comprendrais, mais là, la popup ne s'affiche même pas vide de toute valeur !

Quelqu'un aurait-il une idée du pourquoi ?

Je crois qu'il n'y a plus besoin de nommer les formulaires mais comme il y en a 2, pour les différencier, je les ai nommés.

Le but de cette popup est de permettre au rédacteur de voir ses saisies et éventuellement d'en garder une copie imprimante ou pdf.

<html>
<head>

<script type="text/javascript">
function imprime() {
w=open("",'popup','width=400,height=600,toolbar=no,scrollbars=auto,resizable=yes');
w.document.write("<BODY>");
w.document.write("RECAPITULATIF DE VOTRE DEMANDE"+"<BR><BR>");
w.document.write("Identifiant ANEG : "+document.forms["1"].elements["Num"].value+"<BR><BR>");
w.document.write("Nom Prénom : "+document.forms["1"].elements["Nom"].value+" "+document.forms["1"].elements["Prenom"].value+"<BR><BR>");
w.document.write("Téléphone : "+document.forms["1"].elements["Tph"].value+"<BR><BR>");
w.document.write("Mail : "+document.forms["1"].elements["Mail"].value+"<BR><BR>");
w.document.write("Réponse "OUI" au questionnaire santé : "+document.forms["1"].elements["QuestionnaireSante"].value+"<BR><BR>");
w.document.write("Date limite de validité de votre certificat médical : "+document.forms["1"].elements["DateCM"].value+"<BR><BR>");
w.document.write("Numéro Stage demandé : "+document.forms["1"].elements["NumStage"].value+"<BR><BR>");
w.document.write("Commentaires : "+document.forms["1"].elements["Commentaires"].value+"<BR><BR>");
w.document.write("</BODY>");
w.document.close();
w.print();
}
</script>



</head>

<body>

<!--  mélange de code html et php  -->

<form name="0" method="post" action="ce_meme_fichier.php">

....

</form name="0" >

<form name="1" method="post" action="fichier_transmission_donnees.php">

 ....

<p><input type="button" value="Voir les saisies" onclick="imprime()" /> </p>

</form name="1" >
</body>
</html>


Petite précision. La transmission des données dans la table se fait parfaitement. Toutes les variables sont affichables (test fait) avant de "submiter" le formulaire.

Merci d'avance à celui (ou celle) qui pourra me donner l'explication voire une solution.

Daniel

Configuration: Windows / Firefox 75.0 / PHP 5.6.34


--
A voir également:

2 réponses

Salut,
" La transmission des données dans la table se fait parfaitement."
C'est bien ça qui pose problème selon moi(pas testé le code)

Un formulaire sert à envoyer des données, vers un script la plupart du temps pour traiter ces données comme le système en a besoin.
Ici vous n'utilisez pas de bouton submit mais un bouton(ce qui revient au même tant que vous ne le précisez pas) et c'est donc l'envoi vers le destinataire qui prends le pas et indique en premier lieu de charger : "ce_meme_fichier.php"
à partir de là il n'existe plus de page contenant le formulaire et encore moins d script de popup , uniquement les données transmises et la page indiquée par l'attribut action.

Ce que pouvez et devez faire pour que cela puisse fonctionner c'est désactiver le comportement par défaut d'un formulaire qui le soumet/envoit lorsque le bouton fait pour est cliqué.
Passé par addEventListener (et non onclick ) ce qui sera toujours mieux, plus propre, plus clair et modulable pour attribuer une fonction qui va:

_lancer le popup
_valider le formulaire(l'envoyer)

A noter que vous feriez mieux de renoncer au popup. La plupart des navigateurs modernes vont les bloquer car ce sont dans la pratique des nuisances et contraire au normes du web qui incitent à indiquer tout le contenu dans une même page.
Éventuellement vous avez les fenêtres modales qui remplacent avantageusement un popup, cela met un affichage en superposition sur la page que l'on peut fermer quand on le désire.
A noter qu'il faudra ruser pour faire ce que vous voulez faire puisque le but d'un formulaire est d'envoyer des données et non d'afficher un contenu(avec AJAX ou validation à la fermeture le la fenêtre modale).
Le plus simple ne serait pas simplement de renvoyer vers une page de confirmation(ou pas) après le traitement des données? C'est ce qui se fait généralement et ce dont l'utilisateur à l'habitude donc autant faire comme ça...surtout que ça vous évite de complexifier(et donc du temps de travail) votre programme pour un moins bon résultat que ne pas le faire...
1
danielos77 Messages postés 108 Date d'inscription samedi 18 février 2006 Statut Membre Dernière intervention 16 janvier 2024 2
9 avril 2020 à 20:51
Bonjour Tonfany,

Merci tout d'abord d'avoir pris un peu de temps pour me donner une réponse.

Sinon, lorsque je dis que les données sont bien transmises, c'est simplement que j'ai fait, dans un premier temps un test d'affichage des $_POST envoyés (en mettant en destinataire le même fichier avec l'affichage des résultats qui était OK). Ensuite même manipulation en changeant le fichier de destination (de même_fichier à fichier_de_transmission). A l'arrivée, les données sont bien là. Et pour finir, transmission vers la base où les données arrivent bien => donc le submit ne pose pas de pb et les données sont bien là.

Ensuite j'ai rajouté l'option de pouvoir voir et enregistrer les données avant (et je dis bien avant) de les envoyer.
Visualisation et enregistrement éventuel via la popup (qui ne s'ouvre pas et fait l'objet de ma demande).
Le bouton pour demander l'ouverture de la popup est un bouton "classique" et différent du submit qui lui est plus bas.

J'avais pas mis tout le code mais sinon, la fin de la page est, avec le bouton submit (qui ne pose pas de pb ) :

<p><input type="button" value="Voir les saisies" onclick="imprime()" /> </p>
<p><input name="Validation" type="submit" value="Envoyer" /></p> 


Et je me permet de rappeler que lorsque la page ne comportait qu'un seul formulaire, il était possible de visualiser (imprimer/enregistrer) les données dans la popup à partir du bouton "classique" et ensuite de les envoyer avec le bouton submit.

Je suis d'accord avec vous pour l'utilisation des popups mais quelle serait la possibilité de proposer à l'utilisateur un verbatim pour imprimer ou enregistrer les données qu'il va envoyer ?

Daniel
0
danielos77 Messages postés 108 Date d'inscription samedi 18 février 2006 Statut Membre Dernière intervention 16 janvier 2024 2
10 avril 2020 à 06:02
Bonjour,

En mettant en commentaire toute la partie qui doit afficher les variables, la popup s'affiche.
l'appel est donc bon.

La question devient donc :

Est-il possible d'afficher une popup avec des contenu de variables issues d'une page où il y a 2 formulaires en sachant que les noms des variables ne sont pas les mêmes dans les 2 formulaires ?


<script type="text/javascript">
function imprime() {
w=open("",'popup','width=400,height=600,toolbar=no,scrollbars=auto,resizable=yes');
w.document.write("<BODY>");
w.document.write("RECAPITULATIF DE VOTRE DEMANDE"+"<BR><BR>");
/*w.document.write("Identifiant ANEG : "+document.forms["1"].elements["Num"].value+"<BR><BR>");
w.document.write("Nom Prénom : "+document.forms["1"].elements["Nom"].value+" "+document.forms["1"].elements["Prenom"].value+"<BR><BR>");
w.document.write("Téléphone : "+document.forms["1"].elements["Tph"].value+"<BR><BR>");
w.document.write("Mail : "+document.forms["1"].elements["Mail"].value+"<BR><BR>");
w.document.write("Réponse "OUI" au questionnaire santé : "+document.forms["1"].elements["QuestionnaireSante"].value+"<BR><BR>");
w.document.write("Date limite de validité de votre certificat médical : "+document.forms["1"].elements["DateCM"].value+"<BR><BR>");
w.document.write("Numéro Stage demandé : "+document.forms["1"].elements["NumStage"].value+"<BR><BR>");
w.document.write("Commentaires : "+document.forms["1"].elements["Commentaires"].value+"<BR><BR>");
*/w.document.write("</BODY>");
w.document.close();
w.print();
}
</script>


Daniel
--
0
danielos77 Messages postés 108 Date d'inscription samedi 18 février 2006 Statut Membre Dernière intervention 16 janvier 2024 2
10 avril 2020 à 06:14
C'est la ligne 10 (du dernier post) qui merdouille.
Celle correspondant à l'affichage de boutons radios !
Voici le code des boutons :
NON <input type="radio" name="QuestionnaireSante" id="QuestionnaireSante_NON" value="NON" size="18" />  
OUI <input type="radio" name="QuestionnaireSante" id="QuestionnaireSante_OUI" value="OUI" size="18" checked /> 

et la partie dans la popup :
w.document.write("Réponse "OUI" au questionnaire santé : "+document.forms["1"].elements["QuestionnaireSante"].value+"<BR><BR>");

Il faut certainement utiliser l'id et pas le name.. mais comment déclarer id1 ou id2 suivant ce qui est checké (on ne le sait pas à l'avance !)
Je vais aller voir mon ami google...
0
danielos77 Messages postés 108 Date d'inscription samedi 18 février 2006 Statut Membre Dernière intervention 16 janvier 2024 2 > danielos77 Messages postés 108 Date d'inscription samedi 18 février 2006 Statut Membre Dernière intervention 16 janvier 2024
10 avril 2020 à 08:20
Yeaahhh
Alors oui on peut afficher une popup à partir d'une page qui contient 2 formulaires.
Les boutons type radio ne posent aucun pb. Vous pouvez en avoir 1 de checked par défaut ou pas.
L'erreur qui empêchait la popup (ça ne peut être que féminin pour être si délicat ;-) de s'afficher était tout simplement un oubli d'échappement pour le "OUI" dans la partie texte de w.document.write...
il fallait :
w.document.write("Réponse \"OUI\" au questionnaire santé : "+document.forms["1"].elements["QuestionnaireSante"].value+"<BR><BR>");

au lieu de :
w.document.write("Réponse "OUI" au questionnaire santé : "+document.forms["1"].elements["QuestionnaireSante"].value+"<BR><BR>");


Résolu donc.
0