Php/javascript ; submit et close

Résolu/Fermé
karine_b
Messages postés
32
Date d'inscription
dimanche 19 août 2007
Statut
Membre
Dernière intervention
6 juillet 2009
- 2 mars 2008 à 05:44
eee.eee
Messages postés
69
Date d'inscription
samedi 12 janvier 2008
Statut
Membre
Dernière intervention
15 septembre 2009
- 4 mars 2008 à 00:28
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 !

4 réponses

sfel
Messages postés
1640
Date d'inscription
lundi 18 juin 2007
Statut
Membre
Dernière intervention
15 juillet 2009
427
2 mars 2008 à 19:31
bonsoir,

pour le alert a enlevé :


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


0
eee.eee
Messages postés
69
Date d'inscription
samedi 12 janvier 2008
Statut
Membre
Dernière intervention
15 septembre 2009
20
2 mars 2008 à 19:36
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
dimanche 19 août 2007
Statut
Membre
Dernière intervention
6 juillet 2009
1
3 mars 2008 à 17:35
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
dimanche 19 août 2007
Statut
Membre
Dernière intervention
6 juillet 2009
1 > karine_b
Messages postés
32
Date d'inscription
dimanche 19 août 2007
Statut
Membre
Dernière intervention
6 juillet 2009

3 mars 2008 à 18:06
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
samedi 23 juin 2007
Statut
Membre
Dernière intervention
19 juin 2011
226
3 mars 2008 à 00:06
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
dimanche 19 août 2007
Statut
Membre
Dernière intervention
6 juillet 2009
1
3 mars 2008 à 15:51
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
samedi 12 janvier 2008
Statut
Membre
Dernière intervention
15 septembre 2009
20
4 mars 2008 à 00:28
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