[PHP/Javascript] tester si popup ouverte

Résolu/Fermé
Phil_TSF - 3 avril 2008 à 11:09
Fallentree Messages postés 2309 Date d'inscription mercredi 25 février 2009 Statut Membre Dernière intervention 22 juillet 2019 - 13 juil. 2015 à 00:27
Bonjour à toutes et à tous,

J'ai un petit soucis sur une appli web sur laquelle je travail en ce moment.

Elle se compose de la manière suivante :
Un index.php, dans lequel j'include un hautpage.php (bandeau) et un menu.php (menu principale de l'appli) ainsi que le fichier de conf pour les variables utilises tout le long de l'uitlisation.

Lors d'un clic sur une entrée de mon menu, je redirige vers l'index avec en get une variable me permettant, selon sa valeur, d'appeler les pages php qui vont bien.

Une des entrées de mon menu fonctionne différement, et ouvre une fenêtre popup permettant un traitement quelconque.

Ce traitement ne doit pas être appelé 2 fois. Donc j'interdit l'ouverture d'une autre popup lorsque une première est ouverte, ce avec un bout de code javascript, dans mon menu.php.

Cela fonctionne correctement, mais seulement tant que je reste sur la page courante. Des que je change de page en cliquant sur une autre entrée de mon menu, comme celui ci se recharger, alors le traitement permettant l'interdiction de l'ouverture d'une autre fenêtre popup est réinitialisé, ce qui autorise à nouveau une réouverture.

Voici des bouts de codes qui pourrait vous permettre de mieux comprendre le fonctionnement :

L'index

//////////////////////////////////////////////////////////////////
// index.php
<?php


//Fichier de configutation (login, mot de pase, etc ...)

require("conf/conf.php");

//Fichier contenant toutes les fonctions

require("fonction.php");

//Le bandeau en haut du site

include('hautpage.php');

//Le menu du site

include('menu.php');


//Le corps du site

$menu = $_GET[menu];

$menu_env = $_GET[menu_env];

$menu_form = $_GET[menu_form];

$menu_recep = $_GET[menu_recep];

$versionForm = $_GET[vform];



if($menu == recep)

{

include('reception/mailbox.php');

}

elseif($menu == email)

{

if($menu_env == benv)

{

include('envoi/historique.php');

}

elseif ($menu_env == benr)

{

include('envoi/boite_save.php');

}

elseif($menu_env == histvoir)

{

include('envoi/historique_voir.php');

}

elseif($menu_env == ok)

{

include('envoi/envoie_ok.php');

}

elseif($menu_env == verif)

{

include('envoi/envoie_verif.php');

}

else

{

include('envoi/envoie.php');

}

}
[...]

////////////////////////////////////////////////////////////////////////////////////
// Le menu.php
<script language = 'Javascript'>
var winpopup = null
function open_popup()
{
if ((!winpopup) || (winpopup.closed))
{
winpopup = window.open('connexion/connection.php','','width=900,height=190,menubar=0,statusbar=0,scrollbars=0,resizable=0,toolbar=0');
}
else if(winpopup.closed)
{
winpopup = null
}
else
{
alert("Une tentative de connexion est en cour. Merci de ne pas tenter d'en lancer une autre !")
}
}

</script>

<table width="870" align="center" border="0" cellpadding="0" cellspacing="0">

<tr>

<td noWrap background="image/tab.bg.dln.gif" width="100%" rowspan="2" align="center"></td>

<td rowspan="2" ><IMG src="image/tab.slide.hm.li.gif"></td>

<td bgColor="#336699" height=13></td>

<td bgcolor="#336699" width="100%" colspan="10"></td>

</tr>

<tr>

<td><IMG src="image/tab.separator.off.gif"></td>

<td noWrap background="image/tab.bg.off.gif">

   <A href="index.php?menu=recep" class="menu">Boite de réception</A>   

</td>

<td><IMG src="image/tab.separator.off.gif"></td>

<td noWrap background="image/tab.bg.off.gif">

   <A href="index.php?menu=email" class="menu">Message</A>   

</td>

<td><IMG src="image/tab.separator.off.gif"></td>

<td noWrap background="image/tab.bg.off.gif">

   <A href="index.php?menu=form" class="menu">Formulaire SAP</A>   

</td>

<td><IMG src="image/tab.separator.off.gif"></td>

<td noWrap background="image/tab.bg.off.gif">

   <A href="index.php?menu=mijo" class="menu">Mise à jour</A>   

</td>

<td><IMG src="image/tab.separator.off.gif"></td>

<td noWrap background="image/tab.bg.off.gif" align="center" valign="middle">

<div>   <a onclick="open_popup()" href="#" class=menu>Se connecter</a>   </div>

</td>

<td><IMG src="image/tab.separator.end.gif"></td>

</tr>

</table>



Et donc, mon problème est au niveau du menu connexion, et de l'index.

Auriez vous une idée de la façon de procéder pour que, quelque soit la page sur laquelle je suis aprés un clic sur mon menu, tant que la fenêtre popup est ouverte, il est interdit d'en rouvrir une autre aprés un clic sur le menu "Se connecter"?

N'hésitez pas à me dire si je ne suis pas assez clair!!

Merci d'avance pour votre participation!

Phil.
A voir également:

3 réponses

re,

C'est ok pour cette méthode, ça fonctionne.

Merci pour cette idée de session_start, je ne pensais pas en avoir besoin dans cette appli, et là elle me sauve la vie!

Hors maintenant je me heurte à un autre problème.

Il s'agit d'unseter la variable de session à la fermeture de la popup...

Mais je vais continuer à creuser avant de lacher les bouts de codes que j'ai pondu.. cependant si tu as une idée...

Encore merci pour ton aide, tu auras participer au développement d'une appli a vocation humanitaire :)

Phil.
1
Fallentree Messages postés 2309 Date d'inscription mercredi 25 février 2009 Statut Membre Dernière intervention 22 juillet 2019 208
13 juil. 2015 à 00:27
a la fermeture et hop un autre popup ...
0
pour information, la méthode :

index.php :
<?php

session_start()

[...]

if ($menu == connec)
{
if (isset($_SESSION['etatPopup']))
{
echo "<script language='JAVASCRIPT'> alert('Une tentative de connexion est déjà en cour.');</script>";
}
else
{
$_SESSION['etatPopup']=true;
include('connexion/connec.php');

}
}

////////////////////////:
menu.php :
<div>   <a href='index.php?menu=connec' class=menu>Se connecter</a>   </div>
1
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
3 avril 2008 à 12:24
Bonjour,

Ce que je peux te conseiller :

- lorsque la popup s'ouvre, elle place en session un marqueur (genre $_SESSION['traitement'] = true;)
- quand le traitement est fini, le marqueur est placé à false
- dans l'affichage de ton menu, au moment de l'affichage des liens, tu testes l'état de ce marqueur.

Cela te conviendrait-il ?

Xavier
0
Bonjour Xavier!

Il serait intéressant de tester ça effectivement, maintenant, je ne vois pas à quoi correspond 'traitement'.

Concretement ma popup est un script php (connection.php) qui vérifie certain paramètre au niveau système, avec des shell_exec. Si ces tests de paramètres sont validés, un bouton apparait et nu click dessus permet d'autre traitement, comme l'établissement d'une connexion ppp.

Si tu pouvais me dire à quoi correspond dans ta ligne de code cette chaine, 'traitement', je pourrait effectuer mes tests et voir si ça fonctionne.

Toujours est il est que l'idée me semble bonne...

Phil.
0
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
3 avril 2008 à 13:41
Ce "traitement" n'est qu'un nom de variable. Tu peux mettre ce que tu veux.
Globalement, ton application peut avoir plusieurs états : pop-up cliquée / pop-up pas encore cliquée / pop-up refermée.
L'idée est de mettre en session un indicateur qui te dise dans quel état ton application est.

Après, tu peux adapter, je ne sais pas si tu n'as que ces états, ou si deux états peuvent être regroupés... A toi de voir :)

Xavier
0
Phil_TSF > Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021
3 avril 2008 à 15:38
Re,

Donc, j'ai tenté d'implémenter ta solution, mais sans succés pour l'instant.

La méthode :

à partir de mon menu.php, lors d'un clic sur le menu Se connecter censé ouvrir la fenêtre popup, je redirige l'appli vers l'index. Dans l'index Si $_SESSION['etatPopup'] est vide ou égale à false, j'ouvre la fenêtre popup, qui execute donc un script php dans lequel, au début, j'initialise ma variable de session de cette manière :
$_SESSION['etatPopup'] = true.

SINON, j'affiche une alert js.

Mais cette méthode ne fonctionne pas.

Les bouts de codes :

menu.php :
<div>   <a href="index.php?menu=connec" class=menu>Se connecter</a>   </div>

///////////////////////////
Index.php
if ($menu == connec)
{
if ($_SESSION['etatPopup'])
{
echo "<SCRIPT type='TEXT/JAVASCRIPT'> alert('Une fenêtre de connexion est déjà ouverte.');</script>";
//$_SESSION['etatPopup'] = true;
}
else
{
include('connexion/connec.php');
}
}

connec.php est un simple js qui ouvre ma popup en appelant le script connection.php.
Dans le dit script :
$_SESSION['etatPopup']=true;

Cela ne fonctionne pas, et ma popup s'ouvre a chaque coup.

Une idée?
0
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011 > Phil_TSF
3 avril 2008 à 17:43
Désolé pas le temps de développer, là, mais va voir la doc sur les sessions sur php.net
0