Bonjour,
je voudrais savoir si dans un événement onunload, je peux mettre une page contenant un formulaire html dont l'action comporterait une écriture dans une base MySQL.
Bonjour,
je voudrais savoir si dans un événement onunload, je peux mettre une page contenant un formulaire html dont l'action comporterait une écriture dans une base MySQL.
J'ai fait l'essai suivant qui ne marche pas ; peut-on m'expliquer ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 <?php function test() { echo '<fonct color="white">Coucou</font><br>'; } ... <body onunload="test()"> ?>
onunload pourra peut etre exécuter une fonction javascript mais cetainnement pas du php!
En effet, ça marche mieux avecCela dit, à la sortie, je voudrais faire mon écriture dans MySQL : y aurait-il moyen de le "bluser", en mettant dans le javascript un document.write("<iframe..."), l'iframe pointant sur une page PHP ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 <script type="text/javascript"> function test() { alert('coucou');} </script> ... <body onunload="test()">
Une solution est d'utiliser ajax:
Une autre est d'ajouter un élément factice dans ta page :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 function createXhrObject() { if (window.XMLHttpRequest) return new XMLHttpRequest(); if (window.ActiveXObject) { var names = [ "Msxml2.XMLHTTP.6.0", "Msxml2.XMLHTTP.3.0", "Msxml2.XMLHTTP", "Microsoft.XMLHTTP" ]; for(var i in names) { try{ return new ActiveXObject(names[i]); } catch(e){} } } window.alert("Votre navigateur ne prend pas en charge l'objet XMLHTTPRequest."); return null; // non supporté } function test(){ xhr = createXhrObject(); xhr = getXhr(); xhr.onreadystatechange = function(){ if(xhr.readyState == 4 && xhr.status == 200){ } } xhr.open("GET","URL_DU_SCRIPT_PHP_A_EXECUTER",true); xhr.send(null); }
Cette dernière solution a l'avantage de pouvoir exécuter un script tiers et est équivalente à celle que tu proposes avec:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 function test(){ balise_script = document.createElement('script'); balise_script.src= "URL_DU_SCRIPT_PHP_A_EXECUTER"; document.body.appendChild( balise_script ); }
Code : Sélectionner tout - Visualiser dans une fenêtre à part document.write('<iframe src="URL_DU_SCRIPT_PHP_A_EXECUTER"></iframe>');
Bonsoir,
j'ai créé ça :avec ce test.php :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 <script type="text/javascript"> function test() { balise_script = document.createElement('script'); balise_script.src= "http://www.../test.php"; document.body.appendChild( balise_script ); } </script> ... <body onunload="test()">Mais quand je quitte ma page, il n'y a pas de coucou (et j'ai mis une pause pour être sûr de le voir)...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 <?php echo 'Coucou'; sleep(5); ?>
ta pause ne fait pas ce que tu souhaites: ton serveur va attendre 5 secondes avant d'envoyer la réponse. Toi, tu voudrais que le client attende 5 secondes avant de se fermer.
Si tu veux attendre le résultat, le plus simple est d'utiliser ajax en mode synchrone:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39 <html> <head> <script type="text/javascript" > function getXhr(){ var xhr = null; if(window.XMLHttpRequest) // Firefox et autres xhr = new XMLHttpRequest(); else if(window.ActiveXObject){ // Internet Explorer try { xhr = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { xhr = new ActiveXObject("Microsoft.XMLHTTP"); } } else { xhr = false; } return xhr; } function test(){ xhr = getXhr(); xhr.onreadystatechange = function(){ if(xhr.readyState == 4 && xhr.status == 200){ alert(xhr.responseText); } } xhr.open("GET","test.php",false); xhr.send(null); } </script> </head> <body onunload="test();"> </body> </html>
Partager