[RESOLU] Problème de popup qui s'ouvre plusieurs fois

Eléphanteau du PHP | 24 Messages

10 oct. 2016, 15:21

Bonjour moogli voici le code :

Code : Tout sélectionner

<!-- PROGRAMME POUR TCPAGEI 14/04/2015--> <!DOCTYPE HTML> <html lang="fr"> <head> <meta charset="UTF-8"> <meta http-equiv="x-ua-compatible" content="IE=9"> <meta name='Author' content='Caroline Drupt'> <title>Réémission</title> <link rel="stylesheet" href="../styles/css.css" /> <script language='JavaScript' type='text/javascript' src='../include/javascript.js'></script> </head> <body> <div id="wrapper"> <div class="banniere"></div> <section> <h1><strong>&nbsp; Réémission des Messages &nbsp; </strong></h1> <p class="message">HERMES</p> <form method='post' id='Application' action='/HERMES/TEST/pages/menu.php '> <fieldset> <legend>Réemission des messages</legend> <label for="MODE_REEMIS">Choisir un mode de réemission : BATCH (réemission différé) ou STREAM (réemission fil de l'eau : maximum 20 numéros)</label><br/> <!-- LISTE DEROULANTE POUR LE MODE REEMIS --> <select name='MODE_REEMIS' id='MODE_REEMIS' onchange='submit()'> <option value=''> </option> <option selected ='selected' value='STREAM'>STREAM</option> <option value='BATCH'>BATCH</option> </select> <br/> <!-- LISTE DEROULANTE POUR LES APPLICATIONS --> <label for="abonne">Sélectionner l'application destinataire de la réémission :</label><br/> <select id='abonne' name='abonne' onchange='submit()'> <!-- ################################################# REQUETE: SELECT RECEIVING_APPLICATION FROM hl7_IMS_ABONNE order by 1 ################################################## --> <option value='HL7CARSTRM'>HL7CARSTRM</option> <option value='HL7DAVINCI'>HL7DAVINCI</option> <option value='HL7DIAMM'>HL7DIAMM</option> <option selected ='selected' value='HL7IDEOLOC'>HL7IDEOLOC</option> <option value='HL7LABOSER'>HL7LABOSER</option> <option value='HL7RESURGA'>HL7RESURGA</option> <option value='HL7RESURGP'>HL7RESURGP</option> <option value='HL7WEB100T'>HL7WEB100T</option> <option value='HL7WINREST'>HL7WINREST</option> </select> <br/> <p>Vous avez sélectionné l'application : HL7IDEOLOC</p> <!-- ################################################# REQUETE: SELECT DISTINCT TYPE_MSG FROM hl7_IMS_REEMIS order by 1 ################################################## --> <label for="TYPE_MSG"> Sélectionner le type de message ou collection(MSG ou LST) à réémettre : </label><br/> <!-- LISTE DEROULANTE POUR LE TYPES DE MESSAGES A REJOUER --> <select id='TYPE_MSG' name='TYPE_MSG' onchange='submit()'> <option selected ='selected' value='LST'>LST</option> <option value='MSG'>MSG</option> </select> <br/> <!-- RECAPITULATIF DU TYPE DE MESSAGE SUR LE QUEL NOUS ALLONS REEMETTRE --> <p>La valeur que vous avez séctionnée est : LST</p> <select name='FORMAT_MSG' id='FORMAT_MSG' onchange='submit()'> <option value=''> </option> <option value='DOSP'>DOSP : Tous messages NIP</option> <option selected ='selected' value='MDOS'>MDOS : Tous messages NDA</option> <option value='DSIT'>DSIT : dernière situation d'un NDA</option> </select> <br /> <p> Saisir le ou les NDA séparés par un espace ou un retour chariot : </p> <textarea id='NDA' name='NDA' rows='3' cols = '50'>123456789</textarea> <!-- ################################################# REQUETE: select nvl(count(NUHOHO),0) as Compteur from HOS where NUHOHO = 1234567900 and HOS.ANULHO != 'A' ################################################## --> LeSauvegarder <!-- ################################################# REQUETE: Insert into INTERNEW.HL7_IMS_REEMIS (SEQ, ABONNE, TYPE_MSG, FORMAT_MSG, NDA, NIP, DATE_REEMIS, ETAT_REEMIS, MODE_REEMIS) Values (HL7_REEMIS_SEQUENCE.NEXTVAL, 'HL7IDEOLOC', 'LST', 'MDOS', '123456789','0', TO_DATE('31/12/2099 23:59:59', 'dd/mm/yyyy hh24:mi:ss'), 'A', 'STREAM') ################################################## --> <br/><br/>Votre réémission à bien été prise en compte !<br/> <br/> <input id='Submit' type='Submit' class='btn' name='valid' value='Sauvegarder'/> <a class="btn" href='/HERMES/TEST/pages/menu.php'>Réinitialiser</a> </fieldset> </form> </section> <!-- PROGRAMME POUR CPAGE 14/04/2015--> <nav> <ul id='pied-page'> <li><a href="javascript:Info_Version('1.1','13/01/15');" class='FrontLienArial10FFFFFF'>Version 1.1 du 13/01/15</a></li> <li><a href="http://helsinki/HERMES/TEST/pages/menu.php" class='FrontLienArial10FFFFFF'>Accueil</a></li> <li><a href="javascript:Info_Contact();" class='FrontLienArial10FFFFFF'>Contacts</a></li> <li><a href="javascript:Info_Aide();" class='FrontLienArial10FFFFFF'>Aide</a></li> </ul> </nav> </div> </body> </html>

Eléphanteau du PHP | 24 Messages

11 oct. 2016, 08:52

donc y reste le dernier cas qui fait chier parce que j'ai oublié un !
<?php
if (($appli == 'HL7IDEOLOC' && $TYPE_MSG =='LST' && in_array('MDOS', 'DSIT',$FORMAT_MSG)) && !empty($_POST['valid']))
@+
J'ai trouver l'erreur ... dans le code que je testais il y avais un ! devant empty

Donc du coup la fenêtre du popup ne s’affichait plus.

Code : Tout sélectionner

if (($appli == 'HL7IDEOLOC' && $TYPE_MSG =='LST' && $FORMAT_MSG=='MDOS' || $appli == 'HL7IDEOLOC' && $TYPE_MSG =='LST' && $FORMAT_MSG=='DSIT') && empty($_POST['valid'])) { echo '<script>'; //echo 'if(!document.getElementById("affAlert") || document.getElementById("affAlert").value != "dejaAffiche") {'; echo ' alert("ATTENTION, vous avez choisi de réémettre les messages pour IDEOMED : Le(s) dossier(s) seront supprimés avant la réémission des messages");'; //echo ' document.getElementById("affAlert").value = "dejaAffiche";'; //echo '}'; echo ' </script>'; }
Et la du coup ca fonctionne correctement, mais je ne comprend pas vraiment le pourquoi du comment ..

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

11 oct. 2016, 12:21

salut,

effectivement c'est étonnant, sachant que tu avais déjà ce code avant.

de ce que j'ai vu tu utilises les register globals ? ($FORMAT_MSG plutôt que $_POST['FORMAT_MSG']).
Ceci est une très mauvaise idée car ce comportement est supprimé de php (php 5.4) et n'est pas non plus la valeur par défaut de php depuis bien longtemps (php 5.3) http://php.net/manual/fr/ini.core.php#i ... er-globals
il est préférable d'utiliser les super globlales GET, POST ...

j'ai testé et modifié ton code pour qu'il fonctionne, ou presque.
reste un problème qui fait que lorsque tu submit le formulaire avec le JS (sur le onchange) "valid" n'est pas pris en compte (vu que tu ne clic pas sur le bouton).
https://gist.github.com/anonymous/71367 ... 2ef3499732

bon par contre le selected j'espère que c'est temporaire parce que la quand tu changes la valeur ça submit et revient toujours au même endroit avec la même valeur ;)

c'est pas simple de submit sur le changement d'une liste, si tu t'es gouré c'est pas top.
De plus l'avertissement devrait être fait en Js completement plutôt qu'en php.
utilise toujours l'event onchange + une fonction JS qui test si la même chose qu'en php et tu utilises une confirmation (avec ok / annuler ) plutôt que "même si tu t'es gouré c'est quand même partis :) ).

@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 24 Messages

11 oct. 2016, 13:06

Bonjour =) !
de ce que j'ai vu tu utilises les register globals ? ($FORMAT_MSG plutôt que $_POST['FORMAT_MSG']).
Ceci est une très mauvaise idée car ce comportement est supprimé de php (php 5.4) et n'est pas non plus la valeur par défaut de php depuis bien longtemps (php 5.3) http://php.net/manual/fr/ini.core.php#i ... er-globals
il est préférable d'utiliser les super globlales GET, POST ...
Elle sont déclarées tout au dessus de mon code comme ceci :

Code : Tout sélectionner

// Déclarations des variables $appli = $_POST['abonne']; $TYPE_MSG = $_POST['TYPE_MSG']; $FORMAT_MSG = $_POST['FORMAT_MSG']; $MODE_REEMIS = $_POST['MODE_REEMIS']; $ETAT_REEMIS = $_POST['ETAT_REEMIS']; $appli = $_POST['abonne']; $hl7_IMS_ABONNE = $_POST['hl7_IMS_ABONNE']; /* --------------------------------------------------- Condition pour le Mode de Réémission -----------------------------------------------*/ $MODE_REEMIS = $_POST['MODE_REEMIS']; $ETAT_REEMIS = $_POST['ETAT_REEMIS'];
reste un problème qui fait que lorsque tu submit le formulaire avec le JS (sur le onchange) "valid" n'est pas pris en compte (vu que tu ne clic pas sur le bouton).
https://gist.github.com/anonymous/71367 ... 2ef3499732
C'est à dire ? je ne comprend pas vraiment ...
bon par contre le selected j'espère que c'est temporaire parce que la quand tu changes la valeur ça submit et revient toujours au même endroit avec la même valeur ;)
A la base ce n'est pas que temporaire il fonctionne comme cela pour le moment ..
Car cela me prend bien la bonne valeur malgré que la personne change plusieurs fois d'avis ..
c'est pas simple de submit sur le changement d'une liste, si tu t'es gouré c'est pas top.
De plus l'avertissement devrait être fait en Js completement plutôt qu'en php.
utilise toujours l'event onchange + une fonction JS qui test si la même chose qu'en php et tu utilises une confirmation (avec ok / annuler ) plutôt que "même si tu t'es gouré c'est quand même partis :) ).
Je ne connais pas du tout Js a vrai dire j'ai déjà vue deux trois choses dessus mais je n'ai jamais oser allé plus loin de peur de me perdre et de foirer le code que j'ai fais ...

Eléphanteau du PHP | 24 Messages

11 oct. 2016, 13:11

Le code que je vous avez donnez était le code source de la page, Voici mon vrai code php de ma page :

https://gist.github.com/anonymous/9138c ... 995d3e467f

Car je ne vois pas vraiment les modifications que vous avez apportez ...
Merci en tout cas de toute l'aide que vous m'apportez !

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

11 oct. 2016, 15:08

le truc c'est que la soumission du formulaire sur le changement d'appli / abonne (é ?) fait que la condition ne peux fonctionner comme je le pensais vu que bouton submit n'est pas cliqué $_POST['valid'] n'existe pas.

si ce que tu souhaite c'est afficher un message lorsque les conditions sont réunie il faut le faire en JS pas besoin de recharger la page (sachant qu'il y a des champs en dessous c'est dommage de risquer d'insérer des chose en base ou d’exécuter un script sans que toutes les données soit la).
c'est pour cela que soit sur le cli du bouton soit sur onchange du select il faut informer l'utilisateur.

soit au submit tu affiches une demande de (url=http://www.w3schools.com/jsref/met_win_confirm.asp]confirmation [/url]
soit sur le onchange tu affiches un message si les conditions sont réunies.
Mais pas soumettre le formulaire c'est perturbant pour l'utilisateur et toi tu peux te retrouver dans un état non souhaité.

c'est pour cela que mon code ne fonctionne pas avec le ! parce que lorsque tu utilises de onchange sur select pour soumettre le formulaire les données ne sont pas complète.

Bref, si ça fonctionne tant mieux, par contre la solution javascript pour ce genre de chose c'est mieux, tu ne fait pas de retour serveur juste pour ça, la page clignote pas, l'utilisateur n'est pas perdu et tout va bien :)

@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 24 Messages

11 oct. 2016, 16:05

Oui c'est sur merci beaucoup pour vos conseils, je vais essayer de me pencher sur ce que vous me dites mais ne connaissant pas du tout ce langage, ca ne vas pas être très simple ...
J'avais une autre petite question a vous poser,
Est ce que vous savez comment je peux réinitialiser ma page après mon submit ? sans avoir un autre bouton reinitialiser mais le faire automatiquement.
Du genre lorsque la personne a saisie tout ce qu'elle voulais soumet a l'aide du bouton sauvegarder, un message l'alerte pour savoir si la réémission est bonne et par la suite j'aimerais que cette page ce réinitialise toute seule =/ ..

Eléphanteau du PHP | 24 Messages

12 oct. 2016, 10:07

Bonjour,

Vous aviez raison au niveau :
reste un problème qui fait que lorsque tu submit le formulaire avec le JS (sur le onchange) "valid" n'est pas pris en compte (vu que tu ne clic pas sur le bouton).
https://gist.github.com/anonymous/71367 ... 2ef3499732

bon par contre le selected j'espère que c'est temporaire parce que la quand tu changes la valeur ça submit et revient toujours au même endroit avec la même valeur ;)
le soucis est lorsque l'utilisateur saisie le mode de réémission, l'application, le type et la valeur avec les listes déroulantes ; il remplis le textarea avec un numéro.
Si il c'est tromper et change d'application l'enregistrement en base se fais automatiquement sans appuyer sur le bouton submit ..

Y'a t'il un moyen d'éviter ce problème ?

Cordialement

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

12 oct. 2016, 13:03

oui il faut virer la soumission dans le onchange comme indiqué dans mon message précédent et le faire que sur le clic du bouton submit./

pour l'autre question cela dépend de ce que tu entends par réinitialiser ;)
si c'est mettre les valeurs par défaut et ne pas tenir compte des données dans $_POST, supprime ce qu'il y a dans le tableau ($_POST) après la validation complète et cela devrait faire l'affaire.

@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 24 Messages

12 oct. 2016, 15:07

Oui d'accord mais dans mon code j'ai une liste déroulante ou il peux choisir sur quel application rejouer, mais il y a une phrase aussi qui récapitule sur qu'elle appli il va rejouer et la sans le onchange sa ne fonctionne plus ...

Quand je dis réinitialiser c'est vraiment repartir sur la même page, comme un F5 en gros ..

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

12 oct. 2016, 16:37

1/ => javascript vindiou :)
2/ soit vider $_POST soit header + Location (voir doc header) pour "changer" de page


@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 24 Messages

13 oct. 2016, 08:10

Bonjour,

Pardon je n'ai pas relu votre post d'avance excusez moi ..
Est ce que vous auriez un exemple a me donner ou me montrer s'il vous plait ?

J'utilise ceci et ça fonctionne bien :
echo '<script>setTimeout(function(){ window.location = "' . $_SERVER['PHP_SELF'] . '"; }, 5000);</script>';

Merci en tout cas pour votre aide moogli ..

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

13 oct. 2016, 10:48

pour la redirection le premier exemple de la documentation de la fonction header fait le boulot.
donc avec tes données
<?php
header('Location: '+$_SERVER['PHP_SELF']);
@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 24 Messages

13 oct. 2016, 13:46

J'ai déja essayer mais ca ne fonctionne pas correctement ..
A chaque fois elle rafraichis la page tout le temps donc le site plante ..

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

13 oct. 2016, 15:10

ça doit pas être bien fait :)

si tu fais
<?php
if(!empty($_POST['le nom du champ submit'])) {
    // traitement du  formulaire
   header('Location: '+$_SERVER['PHP_SELF']);
}
cela ne peux pas boucler le header ne sera fait que si tu as cliqué sur le bouton submit.

cela fonction plutôt bien lorsque l'on a pas des submit du formulaire "intempestifs" ;)

@+
Il en faut peu pour être heureux ......