Page 1 sur 3

Problème de popup qui s'ouvre plusieurs fois

Posté : 04 oct. 2016, 13:28
par cahuet-200
Bonjour à tous et à toute,

Je me permets d'écrire un sujet sur mon problème car après maintes recherches je n'arrive pas à résoudre mon problème je m'explique :

J'ai créer un site web qui permet la réémission des messages. Jusque la tout vas bien, une consigne m'a été donnée par la suite qui était si on sélectionne tel application avec tel type de message et tel valeur je dois afficher un message (script) qui permet juste d'avertir l'utilisateur sur ce qu'il va réémettre.

Le message s'affiche bien mais lorsque l'utilisateur rentre son numéro a rejouer dans le textarea et appuie sur le bouton submit, le script s'effectue une deuxième fois ce que j'aimerais évité.

Mais je n'arrive pas a ce que le script s’exécute qu'une seule fois ...

Je vous mets mon code ci dessous :
Code :

Code : Tout sélectionner

[color=#000000]// Si l'application est HL7IDEOLOC et que le TYPE de message est LST et que son format est MDOS ou Si l'application est HL7IDEOLOC et que le TYPE de message est LST et que son format est DSIT if (($appli == 'HL7IDEOLOC' and $TYPE_MSG =='LST' and $FORMAT_MSG=='MDOS' or $appli == 'HL7IDEOLOC' and $TYPE_MSG =='LST' and $FORMAT_MSG=='DSIT') and $_SESSION['test_popup'] == 0 ) { // ouvrir une POPUP pour avertir que nous sommes sur l'application IDEOMED echo"<script>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\")</script>"; } // Si les numero de dossiers sont remplit if($verif_all_num_dossier && sizeof($listNumDossiers) > 0) { foreach ($listNumDossiers as $numDossier) { if($appli == 'HL7IDEOLOC') { //Exécution du script pour effacer le dossier d'un patient exec("/home/interface/dvt/html/HERMES/TEST/scripts/EFFACEDOSSIERCOMPLET.sh $numDossier"); } // Pour chaque numero de dossier, on l'insert en base et on dit que la mise a jour a été faite! $requeteInsert = " Insert into INTERNEW.HL7_IS_REEMIS (SEQ, ABONNE, TYPE_MSG, FORMAT_MSG, NDA, NIP, DATE_REEMIS, ETAT_REEMIS, MODE_REEMIS)"; $requeteInsert .= " Values (HL7_REEMIS_SEQUENCE.NEXTVAL, '".$appli."', '".$TYPE_MSG."', '".$FORMAT_MSG."', '".$numDossier."','0', TO_DATE('31/12/2099 23:59:59', 'dd/mm/yyyy hh24:mi:ss'), '".$ETAT_REEMIS."', '".$MODE_REEMIS."')"; $resReq= exec_select( 'ORACLE8', 'TOTO', $requeteInsert,'', $trace=true ); } echo '<br/><br/>Votre réémission à bien été prise en compte !<br/>'; } } // FIN du else } // FIN du if($TYPE_MSG == 'LST') ?> <br/> <input id='Submit' type='Submit' class='btn' name='valid' value='Sauvegarder'/>[/color]
Merci d'avance,

Cordialement Cahuet

Re: Problème de popup qui s'ouvre plusieurs fois

Posté : 04 oct. 2016, 14:41
par moogli
salut,

je suppose que le formulaire mène vers la même page ?
Si oui il te faut prendre en compte la soumission (la non soumission en fait) du fourmulaire pour afficher l'alerte (ou pas).

coté code tu peux simplifier et rendre plus simple àlire.
Pour cela une indentation correcte est la base. Avec le code founit il y a deux } en trop, ce qui me fait dire que celui ci n'est pas complet (même complet l'indentation est ésotérique ;) )
Ensuite simplifie le premier if. tu n'as pas besoin de tester deux fois appli et type_msg

Au final un code dans le style
<?php

if (($appli == 'HL7IDEOLOC' and $TYPE_MSG =='LST' and in_array($FORMAT_MSG, ['MDOS', 'DSIT'])) && $_SESSION['test_popup'] == 0 && empty($_POST['valid'])) {
    // ouvrir une POPUP pour avertir que nous sommes sur l'application IDEOMED
    echo"<script>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\")</script>";
}
// Si les numero de dossiers sont remplit
if ($verif_all_num_dossier && sizeof($listNumDossiers) > 0) {
    foreach ($listNumDossiers as $numDossier) {
        if ($appli == 'HL7IDEOLOC') {
            //Exécution du script pour effacer le dossier d'un patient
            exec("/home/interface/dvt/html/HERMES/TEST/scripts/EFFACEDOSSIERCOMPLET.sh $numDossier");
        }
        // Pour chaque numero de dossier, on l'insert en base et on dit que la mise a jour a été faite!
        $requeteInsert = " Insert into INTERNEW.HL7_IS_REEMIS (SEQ, ABONNE, TYPE_MSG, FORMAT_MSG, NDA, NIP, DATE_REEMIS, ETAT_REEMIS, MODE_REEMIS)";
        $requeteInsert .= " Values (HL7_REEMIS_SEQUENCE.NEXTVAL, '".$appli."', '".$TYPE_MSG."', '".$FORMAT_MSG."', '".$numDossier."','0', TO_DATE('31/12/2099 23:59:59', 'dd/mm/yyyy hh24:mi:ss'),  '".$ETAT_REEMIS."',  '".$MODE_REEMIS."')";
        $resReq= exec_select('ORACLE8', 'TOTO', $requeteInsert, '', $trace=true);
    }
    echo '<br/><br/>Votre réémission à bien été prise en compte !<br/>';
}
?>
<br/>
<input id='Submit' type='Submit'  class='btn' name='valid' value='Sauvegarder'/>
Ta requête SQL est sensible aux injections SQL.
De plus le driver oracle permet l'utilisation de requêtes préparées qui, comme dans ton cas, son apropriées pour le traitement de requêtes dans une boucle (gain de perf notament, tu y gagneras au sécurité).

@+

Re: Problème de popup qui s'ouvre plusieurs fois

Posté : 05 oct. 2016, 10:09
par cahuet-200
Bonjour moogli,

Pour :
je suppose que le formulaire mène vers la même page ?
Si oui il te faut prendre en compte la soumission (la non soumission en fait) du fourmulaire pour afficher l'alerte (ou pas).
Mon formulaire mène bien sur la même page :

Code : Tout sélectionner

<form method='post' id='Application' action='<?php echo $_SERVER["PHP_SELF"]; ?> '>
Mais comment dois je faire ce que vous dites pour la non soumission du formulaire ?

Au niveau de l'indentation, a la base je travail sur eclipse et mon code est bien indenté et la j'ai juste fais un copier coller sans regarder si il était propre .. erreur de ma part ..

Au niveau du premier if je n'avais pas pensé a le faire comme ceci et en effet c'est beaucoup plus simple et propre merci =) !

Pour ce que vous avez dit :
Ta requête SQL est sensible aux injections SQL.
De plus le driver oracle permet l'utilisation de requêtes préparées qui, comme dans ton cas, son apropriées pour le traitement de requêtes dans une boucle (gain de perf notament, tu y gagneras au sécurité).
je ne comprend pas vraiment ce que je dois faire ou améliorer ..

Merci beaucoup en tout cas pour votre aide

Re: Problème de popup qui s'ouvre plusieurs fois

Posté : 05 oct. 2016, 17:13
par moogli
injection sql : http://lmgtfy.com/?q=injection+sql :-)~

c'est une faille de sécurité qui au pire peux te faire perdre ta base (delete, drop etc.) au pire récupérer des données sensible.
le moins chiant c'est un champ qui va contenir des ' et qui va faire que la requête ne sera pas syntaxiquement correcte et échouera.

Ce qu'il faut faire ? ne sachant pas ce qu'il y a derrière la fonction exec_select je ne peux pas te l'indiquer exactement.
J'imagine bien qu'elle doit permettre de choisir en différent driver ou source de donnée et permet aussi une traçabilité des actions ?

exemple de requête préparée dans la doc de oci_bind_by_name

en gros une requête préparé c'est envoyer un "template" de la requête au serveur qui la 'compile' et ensuite tu n'as plus qu'a lui donner les valeurs.
Dans le cas d'insertion en boucle c'est un gain en performance car tu n'as pas a faire cette étape de 'compilation' à chaque fois que tu exécutes la requête ;)

@+

Re: Problème de popup qui s'ouvre plusieurs fois

Posté : 06 oct. 2016, 09:54
par cahuet-200
Bonjour,

D'accord je regarderais ça une fois mon problème résolue au niveau du popup qui s'ouvre une deuxième fois lors de la soumission ..
Avez vous une idée pour qu'il ne s’exécute qu'une seule fois ?
J'essaye depuis le début de semaine pour trouver une solution et je n'en vois aucune jusqu’à présent ...

Merci en tout cas de votre aide et de vos réponses

Re: Problème de popup qui s'ouvre plusieurs fois

Posté : 06 oct. 2016, 10:20
par moogli
ben avec mon code
<?php
if (($appli == 'HL7IDEOLOC' and $TYPE_MSG =='LST' and in_array($FORMAT_MSG, ['MDOS', 'DSIT'])) && $_SESSION['test_popup'] == 0 && empty($_POST['valid'])) {
    // ouvrir une POPUP pour avertir que nous sommes sur l'application IDEOMED
    echo"<script>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\")</script>";
}
pour peu que le bouton submit se nomme valid !


@+

Re: Problème de popup qui s'ouvre plusieurs fois

Posté : 06 oct. 2016, 10:30
par cahuet-200
J'ai une erreur sur le if :

Parse error: syntax error, unexpected '[' in /var/www/html/HERMES/TEST/pages/menu.php

Donc j'ai remplacer comme ceci :

Code : Tout sélectionner

if (($appli == 'HL7IDEOLOC' && $TYPE_MSG =='LST' && in_array('MDOS', 'DSIT',$FORMAT_MSG)) && $_SESSION['test_popup'] == 0 && empty($_POST['valid'])) { $_SESSION['test_popup'] = 1; // ouvrir une POPUP pour avertir que nous sommes sur l'application IDEOMED echo"<script>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\")</script>"; }
Mais cette fois ci il n'y a plus du tout de popup qui s'ouvre ..

Re: Problème de popup qui s'ouvre plusieurs fois

Posté : 06 oct. 2016, 11:09
par moogli
la parse error c'est parce que tu as une version de php 'trop vieille' :-)~

il faut déboguer, vire la condition sur la session, c'est peur être ça qui pose problème.
vérifie le contenue de toutes les variables utilisée dans le if (par exemple dans un else en affichant attendu et présent
par exemple : echo 'HL7IDEOLOC == ', $appli, ' ? <br />';

@+

Re: Problème de popup qui s'ouvre plusieurs fois

Posté : 06 oct. 2016, 12:54
par cahuet-200
la parse error c'est parce que tu as une version de php 'trop vieille' :-)~
Oui je pense je code sur eclipse en 4.2.2

J'ai essaye de déboguer comme vous m'avez dis :

Code : Tout sélectionner

if (($appli == 'HL7IDEOLOC' && $TYPE_MSG =='LST' && in_array('MDOS', 'DSIT',$FORMAT_MSG)) && empty($_POST['valid'])) { // ouvrir une POPUP pour avertir que nous sommes sur l'application IDEOMED echo"<script>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\")</script>"; }else{ echo 'HL7IDEOLOC == ', $appli, ' ? <br />'; echo 'MDOS/DSIT == ', $FORMAT_MSG, ' ? <br />'; echo 'LST == ', $TYPE_MSG, ' ? <br />'; }
Cela me remonte bien les informations que je veut, par contre je n'ai plus le popup qui s'affiche

Re: Problème de popup qui s'ouvre plusieurs fois

Posté : 06 oct. 2016, 13:19
par moogli
alors la version d'éclipse n'a rien a voir avec celle de php. pour savoir créé une page avec dedans juste <?php phpinfo(); ?> et affiche la ;) (sinon y a juste la fonction phpversion())

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']))
la cela devrait s'afficher quand le formulaire est posté et que les autres paramètres sont bon.

vu que tu as éclipse tu peux déboguer facilement et activement avec xdebug.

pour cela demande a google des tutos (une fois que tu as testé tu t'en passe plus, c'est tellement plus simple de pouvoir vérifier l'état des variables pendant l’exécution, tu pourras aussi les modifier etc. c'est l'outils indispensable pour avancer ;) )

@+

Re: Problème de popup qui s'ouvre plusieurs fois

Posté : 06 oct. 2016, 14:33
par cahuet-200
Je suis en version php 5.3.3

En utilisant le bout de code que vous m'avez donné :

Code : Tout sélectionner

if (($appli == 'HL7IDEOLOC' && $TYPE_MSG =='LST' && in_array('MDOS', 'DSIT',$FORMAT_MSG)) && !empty($_POST['valid'])) { // ouvrir une POPUP pour avertir que nous sommes sur l'application IDEOMED echo"<script>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\")</script>"; }
Mais le popup ne s'affiche plus du tout ..
ET c'est possible je connais eclipse vraiment en simplifié ..

Re: Problème de popup qui s'ouvre plusieurs fois

Posté : 07 oct. 2016, 12:47
par moogli
est ce que les données utilisées dans le if permettent de la valider.
notamment le $_POST['valid']. est ce que cela existe bien dans le formulaire ? qu'elle valeur il a ?

@+

Re: Problème de popup qui s'ouvre plusieurs fois

Posté : 07 oct. 2016, 15:54
par cahuet-200
est ce que les données utilisées dans le if permettent de la valider.
je ne sais pas ...

notamment le $_POST['valid']. est ce que cela existe bien dans le formulaire ? qu'elle valeur il a ?
Lorsque je fais ceci :

Code : Tout sélectionner

echo "Le".$_POST['valid']; //SI l'application est HL7IDEOLOC et que le TYPE de message est LST et que son format est MDOS ou Si l'application est HL7IDEOLOC et que le TYPE de message est LST et que son format est DSIT if (($appli == 'HL7IDEOLOC' && $TYPE_MSG =='LST' && in_array('MDOS', 'DSIT',$FORMAT_MSG)) && !empty($_POST['valid'])) { echo "Les".$_POST['valid']; // ouvrir une POPUP pour avertir que nous sommes sur l'application IDEOMED echo"<script>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\")</script>"; }
Lorsque je sélectionne les applications et tout les autres listes déroulantes, il ne contient rien du tout jusqu'a ce que je fasse un submit ou la il contient sauvegarder

Re: Problème de popup qui s'ouvre plusieurs fois

Posté : 10 oct. 2016, 12:09
par cahuet-200
Soit la fenêtre s'ouvre deux fois ou soit elle ne s'ouvre plus du tout suivant le code ...

Re: Problème de popup qui s'ouvre plusieurs fois

Posté : 10 oct. 2016, 14:43
par moogli
peux tu me donner le code html du formualire généré stp (que je teste). c'est étonnant ce truc ?


@+