Php/javascript ; submit et close

Résolu
karine_b Messages postés 32 Date d'inscription   Statut Membre Dernière intervention   -  
eee.eee Messages postés 69 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

voilà, je suis (encore) bloquée... voilà mon soucis ; ma fenetre principale ouvre une fenetre de saisie. Dans cette fenetre, l'utilisateur entre un nom et clique sur un bouton. Ce bouton envoie une requete SQL au server et, une fois le forfait accompli, elle doit se fermer (c'est là que le bas blesse)

Dans ma fenetre de saisie ;
<form name="formT" method="post" >
<?php echo str_replace("|"," / ",$path_to_find)." / "; ?>
<input name="add_new_cat" type="text" class="Style_Normal" id="add_new_cat" value="" size="60" />
<input type="button" onclick="javascript:document.forms.formT.submit();sleep(2);self.close()" value="Valider">
</form>

Le submit se fait, mais la fenetre ne se ferme pas.
si j'enlève sleep(2) la fenetre se ferme, mais la requete ne se fait pas...

et si je mets ceci
onclick="javascript:document.forms.formT.submit();alert('requete ok');self.close()"
le submit se fait, et la fenetre se ferme après que j'ai "OKté " le message...
Y a pas moyen de virer ce "alert" ???

Help !
A voir également:

4 réponses

sfel Messages postés 1640 Date d'inscription   Statut Membre Dernière intervention   430
 
bonsoir,

pour le alert a enlevé :


onclick="javascript:document.forms.formT.submit();self.close()"


0
eee.eee Messages postés 69 Date d'inscription   Statut Membre Dernière intervention   20
 
Salut, j'ai une solution qui contourne le problème:

Dans le formulaire, tu met le lien vers la même page avec action="". De plus tu crée un checkbox invisible ( style="display:none" ), et de name="Enregistre".

Au début de la page tu rajoute un code PHP/javascript:

<script LANGUAGE="Javascript">
<?php
if(isset($_POST['Enregistre']))
{
print('self.close();');
}
?>
</script>

Ton ancien code sera alors:
<input type="button" onclick="javascript:document.forms.formT.submit();" value="Valider">


En clair il vérifie au début par PHP si la saisie a été enregistrée. Si c'est le cas il quitte la fenêtre. Le problème est qu'il y aura une requête au serveur supplémentaire et inutile. Bon c'est prendre un tank pour écraser une mouche, mais ça marche.
0
karine_b Messages postés 32 Date d'inscription   Statut Membre Dernière intervention   1
 
Hello eee.eee

j'ai essayé ta solution ; mais ca ne marche pas (je dois manquer d'expérience...)
Si j'ai bien tout compris, il faudrait faire qqchose comme ;
(ma page se nomme toolbox.php)

$action=$_GET["action"];

<form name="formT" method="post" action="toolbox.php?action=close" >
<input name="add_new_cat" type="text" class="Style_Normal" id="add_new_cat" value="" size="60" />
<input type="button" onClick="javascript:document.forms.formT.submit();" value="Valider">
</form>

<?php }
if ($action == "close")
{ ?>
<script LANGUAGE="Javascript">
window.setTimeout("close()", 2000)
</script> <?php
}

Mais ca marche pô... snif snif. Je me suis dit ; "Le monsieur, il a dit POST et non GET..."


donc, j'ai fait ;
<form name="formT" method="post" action="" >
<?php echo str_replace("|"," / ",$path_to_find)." / "; ?>
<input name="add_new_cat" type="text" class="Style_Normal" id="add_new_cat" value="" size="60" />
<input type="button" onClick="javascript:document.forms.formT.submit();" value="Valider">
<input type="checkbox" value="Valider" style="display:none" name="Enregistre">
</form>

en rajoutant ;
<body topmargin="0" leftmargin="0">
<script LANGUAGE="Javascript">
<?php
if(isset($_POST['Enregistre']))
{
print('self.close();');
}
?>
</script>

Je teste... et ... raté !! (mais de peu...)
en effet,
La fenetre ne se ferme pas, et le code généré est ;
<script LANGUAGE="Javascript">

</script>

Apparemment, il ne passe pas dans la condition ; if(isset($_POST['Enregistre']))

to be continued...
0
karine_b Messages postés 32 Date d'inscription   Statut Membre Dernière intervention   1 > karine_b Messages postés 32 Date d'inscription   Statut Membre Dernière intervention  
 
yeah !! j'ai trouvé l'erreur ;

<?php
if(isset($_POST['add_new_cat']))
{
print('self.close();');
}
?>


<form name="formT" method="post" action="" >
<?php echo str_replace("|"," / ",$path_to_find)." / "; ?>
<input name="add_new_cat" type="text" class="Style_Normal" id="add_new_cat" value="" size="60" />
<input type="button" onClick="javascript:document.forms.formT.submit();" value="Valider">
<input name="Enregistre" type="checkbox" value="Valider" style="display:none" id="Enregistre">
</form>

ca marche enfin ! Merci à vous !!

...ce qui m'amène à la question à 100.000$ ; voilà la situation...
ma fenetre principale liste le contenu d'une base de données (des catégories de bookmarks).
pour ajouter une catégorie, je clique sur un bouton de la fenetre principale, ce qui ouvre une fenetre de saisie.
Dans cette fenetre de saisie, je rentre le nom de la catégorie. Une fois validée, elle execute sa requete et se ferme toute seule.

La question à 100.000$ est ; comment rafraichir ma fenetre principale après que la requete de la fenetre de saisie ait été envoyée...

Alors là, si vous trouvez, chapeau bas messieurs !
@+ bisous !
0
Posotaz Messages postés 489 Date d'inscription   Statut Membre Dernière intervention   225
 
Hello,

A en juger du comportement du script, tout porte à croire que la méthode sleep soit responsable de la non exécution de l'instruction suivante, à savoir la fermeture de la fenêtre de saisie.

D'où provient cette méthode sleep ? (Elle n'existe pas en standard donc je suppose que tu as dû la recréer). La console d'erreur JavaScript indique-t-elle une erreur ?

Sinon je te conseille cette lecture pour le sleep http://www.xorax.info/blog/programmation/103-sleep-wait-pause-javascript.html

Très simplement, il suffirait de lancer l'instruction "close()" au travers du setTimeout (les unités sont mesurées en millisecondes, donc 2000 pour 2 secondes).
0
karine_b Messages postés 32 Date d'inscription   Statut Membre Dernière intervention   1
 
Merci pour vos réponses !

Alors, j'ai commencé par essayer un Setimeout (proposé par Posotaz) ;
voilà le code (la page est nommée toolbox.php) ;

<form name="formT" method="post" action="toolbox.php?action=close" >
<?php echo str_replace("|"," / ",$path_to_find)." / "; ?>
<input name="add_new_cat" type="text" class="Style_Normal" id="add_new_cat" value="" size="60" />
<input type="button" onClick="javascript:document.forms.formT.submit();" value="Valider">
</form>

<?php }
if ($action == "close")
{ ?>
<script LANGUAGE="Javascript">
window.setTimeout("close()", 2000)
</script> <?php
}

==> la fenetre se ferme bien au bout de 2secondes. Par contre, la requête n'a pas été envoyée... snif snif
0
eee.eee Messages postés 69 Date d'inscription   Statut Membre Dernière intervention   20
 
Pour mettre à jour automatiquement ta fenêtre principale, la solution: xmlhttprequest(). Voici des pages ou on la décrit (Et là je ferai bien de faire la même chose que toi ^^ et de les lire aussi)

https://www.toutjavascript.com/savoir/xmlhttprequest.php3
https://www.xul.fr/xml-ajax.html
0