Forum > PHP > Action et target

Action et target

ok Le problème posé sur ce sujet a été résolu.
avatar de Chopin
Membre
# Le 22/12/2008 à 12h53
Salut à tous!

J'ai un truc qui me trotte dans la tête depuis quelques temps mais je ne sais pas du tout si c'est possible. :) Alors je viens poser la question ici pour enfin me débarrasser de cette idée qui me trotte dans la tête ou bien tout simplement la mettre en pratique. :D

Donc voila, dans un lien classique et je voudrais savoir s'il était possible d'effectuer une action en php avec un target perso du genre target="_monTargetPerso". L'idée d'utilisation est simple je souhaiterais compter le nombre de hits sur un lien en dur (donc brute, sans ?id=blabla ou autre).

Enfin, s'il y a d'autre technique pour comptabiliser les hits sur des liens en dur je suis preneur.

Merci d'avance pour votre aide!
avatar de Tony_
Administrateur
# Le 22/12/2008 à 14h48
Bonjour Chopin, merci pour ton message.
Tu a une très bonne idée, il est en effet possible d'effectuer un petit tour de manivelle pour compter le nombre de clique. Par contre, ce n'est pas exactement comme cela qu'il faudrait faire (à moins que je me trompe).
En fait, l'idée est de se servir d'un script en AJAX. Autrement dit il faut utiliser du javascript et du PHP.
Le script javascript s'active à chaque clique sur un lien (les liens que tu indique). Tu peux ajouter un numéro d'identifiant pour que chaque liens ai un "compteur" différent. En parallèle, il faut utiliser une page en PHP qui incrément un compteur dans une base de donnée. Un compteur associé au numéro du lien.

Le gros problème dans cette histoire c'est que je n'ai pas trop de connaissance en AJAX, donc je ne peux pas trop t'aider pour le script.
En tout cas, si tu trouve je suis vraiment preneur et je te remercierais si tu pouvais faire partager ce script ici.

Bon courage. smiley
N'hésitez pas à consulter le dossier référencement. smiley
Sinon hors internet je suis développeur web PHP.
avatar de Chopin
Membre
# Le 23/12/2008 à 00h55
Merci pour ton aide. :)

Suite à ta réponse j'ai donc organisé mes recherches autour de l'ajax et après une après midi complète j'ai enfin trouvé un bout de script qui est peut être très imparfait ou peu fini mais qui comptabilise les hits comme je le souhaitais.

Avant de mettre les scripts ici, je me permets de donner les deux principaux liens qui m'ont permis à y parvenir, ne serais-ce qu’en guise de remercîment :)

http://www.xul.fr/xml-ajax.html
http://www.javascriptfr.com/forum/sujet-COMPTEUR-CLICK_660391.aspx

Pour commencer, voila la page contenant les liens que l'on veut comptabiliser le nombre de hits (faut surtout pas faire attention au codage car c'est fait à l'arrache mais le principal est que tout fonctionne).
  1. <?php
  2.  
  3. /* Nom de la page : test.php */
  4.  
  5. echo "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">
  6. <html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en\" dir=\"ltr\" lang=\"en\">
  7. <head>
  8. <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">
  9. <title>Test</title>
  10.  
  11.  
  12. <script src=\"ajax.js\" type=\"text/javascript\"></script>
  13. <script type=\"text/JavaScript\">
  14.  
  15. function hits_sortants(id)
  16. {
  17. getXhr()
  18.  
  19. xhr.onreadystatechange = function()
  20. {
  21. if(xhr.readyState == 4 && xhr.status == 200) {}
  22. }
  23. url = \"compteur_hits.inc.php?id=\" + id;
  24. xhr.open(\"GET\", url, true);
  25. xhr.send(null);
  26. }
  27.  
  28. </script>
  29.  
  30. </head>
  31. <body>
  32.  
  33.  
  34. <a href=\"http://test.fr\" onclick=\"window.open(this.href); hits_sortants('1'); return false;\">Test</a><br />
  35. <a href=\"http://test2.fr\" onclick=\"window.open(this.href); hits_sortants('2'); return false;\">Test2</a><br />
  36. <a href=\"http://test3.fr\" onclick=\"window.open(this.href); hits_sortants('3'); return false;\">Test3</a>
  37.  
  38.  
  39. </body>
  40. </html>";
  41.  
  42. ?>

Ici, rien de compliqué au niveau HTML, juste des liens classiques ayant un onclick avec "hits_sortants('id');" (il ne faut pas oublier de renseigner l'id qui correspond à l'entrée à mettre à jour dans la base de données).

Au niveau Javascript de cette même page, pour être honnête je ne suis pas très doué avec ce langage donc j'ai beaucoup pompé et je ne pourrais pas beaucoup donner d'explicitation.


Ensuite, il nous faut bien évidemment l'ajax qui est appelé sur la page ci-dessus.
  1. /* Nom de la page : ajax.js */
  2.  
  3. var xhr = null;
  4.  
  5. function getXhr()
  6. {
  7. if(window.XMLHttpRequest)
  8. {
  9. xhr = new XMLHttpRequest();
  10. }
  11. else(window.ActiveXObject)
  12. {
  13. try
  14. {
  15. xhr = new ActiveXObject("Msxml2.XMLHTTP");
  16. }
  17. catch (e)
  18. {
  19. xhr = new ActiveXObject("Microsoft.XMLHTTP");
  20. }
  21. }
  22. }



Et enfin le plus simple, la page qui comptabilise les hits en mettant la base de données à jour:
  1. <?php
  2.  
  3. /* Nom de la page : compteur_hits.inc.php */
  4.  
  5. // Ouverture de la connexion avec MYSQL
  6. include "../config/config.inc.php";
  7.  
  8.  
  9. // Récupération de l'id de l'entrée à mettre à jour
  10. $id = $_GET['id'];
  11.  
  12.  
  13. // Comptage du hit en mettant à jour la base de données
  14. mysql_query("UPDATE compteur_clic_basic SET clic=clic+1 WHERE id=$id");
  15.  
  16.  
  17. // Fermeture de la connexion avec MYSQL
  18. mysql_close();
  19.  
  20. ?>



Voila voila, il faut savoir que ça fonctionne très bien avec IE7 mais que je n’ai toujours pas réussi à le faire fonctionner avec FF. Donc, si tu as une solution. :) Pour ce qui est du bout de code qui est censé afficher le nombre de hits je ne l’ai pas mis ici car j’estime que c’est du B.A.-ba au niveau du php :D
avatar de Tony_
Administrateur
# Le 23/12/2008 à 12h39
Merci à toi pour cette réponse bien détaillée.
Pour Firefox tu es sur d'avoir bien activé le javascript et de ne pas avoir de plugin pour empêcher d'afficher le javascript (certains plugin pour empêcher les publicités n'affiche pas le javascript).

Sinon le problème viens peut-être de la page ajax.js.
J'ai l'impression qu'il y a un petit mélange sur ce bout de code. Pour ma part j'aurais choisi l'un ou l'autre de ces deux codes:

  1. /* Nom de la page : ajax.js */
  2. var xhr = null;
  3.  
  4. function getXhr()
  5. {
  6. if(window.XMLHttpRequest)
  7. {
  8. xhr = new XMLHttpRequest(); // Type de navigateur: Firefox, Safari, ...
  9. }
  10. else
  11. if(window.ActiveXObject)
  12. {
  13. xhr = new ActiveXObject("Microsoft.XMLHTTP"); // Type de navigateur: Internet Explorer
  14. }
  15. }



  1. /* Nom de la page : ajax.js */
  2. var xhr = null;
  3.  
  4. try
  5. {
  6. xhr = new ActiveXObject("Msxml2.XMLHTTP"); // Type de navigateur: Internet Explorer
  7. }
  8. catch (e)
  9. {
  10. xhr = new ActiveXObject("Microsoft.XMLHTTP"); // Type de navigateur: Les autres
  11. }


N'hésite pas à tester et voir s'il y a une amélioration.
Bon courage. smiley
N'hésitez pas à consulter le dossier référencement. smiley
Sinon hors internet je suis développeur web PHP.
avatar de Chopin
Membre
# Le 23/12/2008 à 13h08
Re!

Bien vue smiley, ça venait bien de la partie AJAX, c'est impeccable pour FF et IE7 avec ta première correction de code pour la deuxième j'ai des erreurs de script sur la page mais bon tant ça fonctionne avec la première. smiley

Plus que quelques petits tours de passe passe pour valider ça au W3C et c'est nikel pour mon site smiley
avatar de stc
Membre
# Le 24/12/2008 à 04h25
Pour Ajax j'utilise cette petite routine pour créer mes objets requête:
  1. function createXMLHttpRequestOject() {
  2. var xhr=null;
  3. try {
  4. xhr=new ActiveXObject("Microsoft.XMLHTTP");
  5. catch(Error) {
  6. try {
  7. xhr=new ActiveXObject("MSXML2.XMLHTTP");
  8. }
  9. catch(Error) {
  10. try {
  11. xhr=new XMLHttpRequest();
  12. }
  13. catch(Error) {
  14. alert("Impossible de créer l'objet XMLHttpRequest.");
  15. }
  16. }
  17. }
  18. return xhr;
  19. }


Tu n'as qu'a appeler la fonction au moment de créer ton objet:
  1. xhr=createXMLHttpRequestObject();


Voila A+
Joyeux Noël!
avatar de Chopin
Membre
# Le 24/12/2008 à 17h09
Salut STC,

Ce script est un peu plus lourd que le script de Funnycat pour en arriver au même résultat. Donc, j'utilise celui de Funnycat. :)

Pour infos, je n'ai pas mis "var xhr = null;" avant la fonction et ça fonctionne très bien sans.