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.
Version imprimable
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:
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:
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:
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:
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:document.write('<iframe src="URL_DU_SCRIPT_PHP_A_EXECUTER"></iframe>');
Bonsoir,
j'ai créé ça :avec ce test.php :Code:
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:
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:
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>
Bonsoir Laurent,
il s’agit de bien faire la distinction entre le script côté client (JavaScript) et le script côté serveur (PHP). Le fait qu’on puisse écrire des deux dans la même page ne signifie pas du tout qu’ils peuvent travailler ensemble !
Le rôle de PHP est de construire un flux d’octets à envoyer au client à travers le réseau Internet. « Flux d’octets » est le terme savant pour « fichier », mais ça permet (je trouve) de bien comprendre comment PHP voit ça. Quand tu fais
Le serveur envoie successivement un 'H', puis un 'e', puis un 'l', etc. Avec JavaScript, pareil :Code:
1
2
3 <?php echo 'Hello World!'; ?>
Il envoie un '<' puis un 's' puis un 'c', etc. Le code source du JavaScript est envoyé octet par octet, PHP ne l’exécute pas.Code:echo '<script>alert("Hello World!")</script>';
Côté client à présent : le navigateur reçoit un fichier (donc un ensemble d’octets) qu’il reconnaît comme du HTML, et va commencer à l’analyser pour générer des éléments graphiques. S’il y a du JavaScript, c’est l’interpréteur JavaScript, intégré au navigateur, qui prend le relais. Il est important de comprendre que cet interpréteur n’a pas accès aux fonctions PHP, car tout le code PHP, les variables et fonctions en mémoire, etc. est resté sur le serveur !
Ainsi, PHP et JavaScript ne peuvent pas travailler ensemble.
J’espère que cette brève explication t’apportera quelque chose.
;)
Watilin : merci pour l'explication. En résumé, js tourne côté client et PHP côté serveur, donc ils ne se connaissent pas.
Gael : mon idée était surtout de faire une trace visible. Et je préfère le 2e code, car je l'ai compris (le peu de js que je connais suffit), alors que l'ajax, c'est du chinois pour moi. Et pour faire ma trace, je me suis rapproché de mon but ultime : je fais une écriture dans MySQL. En fait, dans test.php, j'ai mis ça :(le "_sql" dans la table, c'est que historiquement, ce code avait d'abord servi à tracer une requête SQL dans une page où les sorties écrans ne marchaient pas). Et ma table est en effet à jour à chaque fois que je quitte la page ! Merci. :ccool:Code:
1
2
3
4
5
6
7
8
9
10 <?php include("connect.php"); include("config.php"); $id_conn=connect(); $texte="ici test de onunload"; $sql= "INSERT into `espion` (_sql) VALUES('".$texte."')"; $sql = stripslashes($sql); $result = mysql_query($sql) or die(mysql_error()); close($id_conn); ?>
T'as raison, si tu n'as pas besoin de retour, c'est sûrement la meilleure solution.
un peu de lecture sur ajax: http://siddh.developpez.com/articles/ajax/
et si tu veux te simplifier la vie avec javascript:
http://jquery.com
http://pckult.developpez.com/tutorie.../introduction/