IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AJAX Discussion :

[AJAX] Fonction PHP sur ONCLICK


Sujet :

AJAX

  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 58
    Par défaut [AJAX] Fonction PHP sur ONCLICK
    Bon... Je vais essayer d'être clair.

    Premièrement, bonjour à tous, je suis débutant en ajax...

    Ce que j'essaie de faire depuis un temps, c'est de mettre une fonction php à l'intérieur d'un "ONCLICK". J'ai compris que ca ne se faisait pas et donc me suis tourné vers ajax... J'ai trouvé des tutos sur xAjax et j'ai tenté quelque chose.

    Alors ce que je veux faire est très simple mais est très compliqué à faire, apparemment. C'est que sur le "CLICK" de mon lien (qui m'envoie sur une page d'un autre site), je veux insérer dans ma bdd les données $user, $ip $time et genre, un titre, le nom du lien (Flux RSS, par exemple). Tout ça, tout simplement pour compter le nombre de clics sur ce lien...

    Après avoir tout codé d'après les tutos que j'ai lus, aucun message d'erreur ne m'est renvoyé et le lien fonctionne bien. Par contre, aucune insertion ne se fait dans la bdd. Voici donc les codes...

    Donc, au début de ma page sur laquelle se trouve le lien à cliquer en question:
    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
     
    <?php
    require_once('./xajax_core/xajax.inc.php');
    $xajax = new xajax(); // On initialise l'objet xajax.
    $xajax->register(XAJAX_FUNCTION, 'compteur_lien_rss'); // Déclaration de la fonction MaFonctionPHP.
    $xajax->processRequest(); // Fonction qui va se charger de générer le Javascript à partir des données que l'on a fournies à xAjax.
    ?>
    <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 { // XMLHttpRequest non supporté par le navigateur 
    	   alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..."); 
    	   xhr = false; 
    	} 
    	return xhr
    }
     
    /**
    * Méthode qui sera appelée sur le click du bouton
    */
    function compteur_lien_rss( user, ip, time){
    	var user; var ip; var time;
    	var xhr = getXhr()
    	// On défini ce qu'on va faire quand on aura la réponse
    	xhr.onreadystatechange = function(){
    		// On ne fait quelque chose que si on a tout reçu et que le serveur est ok
    		if(xhr.readyState == 4 && xhr.status == 200){
    			alert(xhr.responseText);
    		}
    	}
    	xhr.open("POST","compteur_lien_rss.php",true);
    	xhr.send('user='+user+'&ip='+ip+'&time='+time);
    }
    </script> 
     
     
    <?
    $user = $HTTP_COOKIE_VARS['username'];
    if ($user == "") { $user = "Visiteur"; }
    $ip = $REMOTE_ADDR;
    $time = time();		
    ?>
    Ensuite, je dois appeler une fonction PHP dans rsslib.php alors comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <?php
    require_once("rsslib.php");
    $url = "http://www.quebechebdo.com/Rss/c/13617/Volleyball";
    echo RSS_Display($url, 15, false, true);
    ?>
    Dans mon fichier rsslib.php, j'ai plusieurs fonctions que je ne vous montrerai pas mais je ne mettrai que le bout de code qui affiche le lien à cliquer...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $page .= '
    <tr><td><font size="1">'.$description.'</font></td></tr>
    <tr><td align="right"><font size="1"><a onclick=\'xajax_compteur_lien_rss(\''.$user.'\',\''.$ip.'\',\''.$time.'\');\' href="'.$link.'">[Lire la suite...]</a></font></td></tr>';
    Et pour terminer, mon fichier compteur_lien_rss.php qui serait supposé insérer les données dans la bdd:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <?php
    // recuperation des donnees transmises
    $user 	= (isset($_POST['user']))? mysql_real_escape_string($_POST['user']) : '';
    $ip 	= (isset($_POST['ip']))? mysql_real_escape_string($_POST['ip']) : '';
    $time 	= (isset($_POST['time']))? mysql_real_escape_string($_POST['time']) : '';
    // insertion en bdd
    db_connex();
    $sql = "INSERT INTO clics VALUES ('','RSS','$user', '$ip', '$time')";
    mysql_query ($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
    ?>
    J'espère avoir fourni assez de renseignements... Merci d'avance pour votre réponse!

  2. #2
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Par défaut
    Bonjour,

    1-Vire cette partie de code:
    var user; var ip; var time;
    Ce sont des variables en paramètres, tu ne doivent pas les déclarer.
    2- En utilisant la méthode POST, tu dois ajouter:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    .

    A+.

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 58
    Par défaut
    Salut andry.aime ! Et merci de ta réponse...

    Cependant, l'insertion dans la bdd ne se fait toujours pas...

    Mon nouveau code de la fonction donnant ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    function compteur_lien_rss( user, ip, time){
    	var xhr = getXhr()
    	// On défini ce qu'on va faire quand on aura la réponse
    	xhr.onreadystatechange = function(){
    		// On ne fait quelque chose que si on a tout reçu et que le serveur est ok
    		if(xhr.readyState == 4 && xhr.status == 200){
    			alert(xhr.responseText);
    		}
    	}
    	xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    	xhr.open("POST","compteur_lien_rss.php",true);
    	xhr.send('user='+user+'&ip='+ip+'&time='+time);
    }

  4. #4
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Par défaut
    Ton alert affiche quoi?

    if(xhr.readyState == 4 && xhr.status == 200){
    alert(xhr.responseText);
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     if(xhr.readyState==4){
          if(xhr.status==200 || xhr.status==0){
                 alert(xhr.responseText);
          }else{
                 alert("Erreur");
          }
    }
    Et fait echo des valeurs postées.

    A+.

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 58
    Par défaut
    Re-salut!

    Aucune alerte n'est affichée...
    Et mes "echo" affichent tous... mes 3 variables sont définies et affichent quand je les fais afficher... Seul problème, elles ne s'insèrent pas dans la bdd... :/

    Non seulement il n'insère pas mes variables traitées mais aussi j'ai fait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = "INSERT INTO clics VALUES ('','RSS','user', 'ip', 'time')";
    Et rien ne s'est passé non plus...

  6. #6
    Membre très actif
    Avatar de buggen25
    Ingénieur développement logiciels
    Inscrit en
    Août 2008
    Messages
    554
    Détails du profil
    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Août 2008
    Messages : 554
    Par défaut
    Bonsoir
    Essaye sur phpmyadmin d'executer la requette suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    "INSERT INTO clics VALUES ('','RSS','user', 'ip', 'time')";

  7. #7
    Membre averti
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 58
    Par défaut
    Oui, ca insère de cette facon...

  8. #8
    Membre averti
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 58
    Par défaut
    Bon... Je viens de voir quelque chose...

    C'est p-ê une erreur toute bête... Vous saurez me dire...

    Dans mon fichier rsslib.php qui est en "include", je veux faire afficher "$user", "$ip" et "$time" ... Mais il n'y a que $time qui affiche.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $user = $HTTP_COOKIE_VARS['username'];
    if ($user == "") { $user = "Visiteur"; }
    $ip = $REMOTE_ADDR;
    $time = time();
    Est-ce par ce que c'est dans un include que ca n'affiche pas toutes les variables?

    C'est normal que l'insertion dans la bdd ne se fasse pas si je n'ai que le $time et que mes 2 autres variables sont vides...

    Alors comment je procède maintenant pour remplir ces variables? Ça m'a l'air d'une erreur de débutant mais j'ai les 2 yeux dans le même trou comme on dit ici au Québec! ouarf!

  9. #9
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Par défaut
    function compteur_lien_rss( user, ip, time)
    <a onclick=\'xajax_compteur_lien_rss(\''.$user.'\',\''.$ip.'\',\''.$time.'\');\' href="'.$link.'">

  10. #10
    Membre averti
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 58
    Par défaut

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $xajax->register(XAJAX_FUNCTION, 'compteur_lien_rss'); // Déclaration de la fonction MaFonctionPHP.

  11. #11
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Par défaut
    Je ne connais pas xajax, mais ce que je ne comprend pas c'est que tu déclares une fonction "compteur_lien_rss" mais tu appelles une fonction "xajax_compteur_lien_rss". Essaie de mettre un alert au début de la fonction pour voir. Sinon, installe firebug.

    A+.

  12. #12
    Membre averti
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 58
    Par défaut
    OUais, si ca continue, je vais virer xajax... Mais ma question reste sans réponse pour mes variables...

    Pourquoi $time = time(): me renvoie une donnée mais pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $user = $HTTP_COOKIE_VARS['username'];
    ni
    ...
    ?

  13. #13
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Par défaut
    Pose la question sur le forum php, tu aurais plus de chance qu'ici sur Ajax pour ça.

  14. #14
    Membre averti
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 58
    Par défaut
    lol ... ouais ok!

  15. #15
    Membre averti
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 58
    Par défaut
    Disons que je fous tout ça à la poubelle... et que j'explique ce que je veux faire... Je suppose que vous pourriez m,aider à m'enligner dans la bonne voie... J'ai réglé mon problème d'affichage mais bon... xajax ne semble pas faire ce que je veux de la façon dont je l'appelle...

    Donc voici:

    Dans ma page rsslib.php qui est une page où sont stockées mes fonctions php pour un affichage RSS, j'ai ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $user = $_COOKIE['username'];
    if ($user == "") { $user = "Visiteur"; }
    $ip = get_adr_ip();
    $time = time();
     
    $page .= '
    <tr><td><font size="1">'.$description.'</font></td></tr>
    <tr><td align="right"><font size="1"><a href="'.$link.'">[Lire la suite...]</a></font></td></tr>';
    Je voudrais que sur le clic de ce lien, j'insère dans ma bdd qui s'appelle "clics": $link, $user, $ip et $time.

    Alors dites-moi de quelle façon vous procéderiez si c'était vous qui le faisiez. J'aimerais voir quelque chose d'assez concret car là, j'ai fait le tour de plusieurs tutos sur ajax et je suis complètement mêlé je crois...

    Si une âme charitable osait m'aider, je lui serait très reconnaissant! (C'était la partie émotive de ce post) lol

    Merci d'avance!

  16. #16
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Par défaut
    Re,

    Ton code js est déjà bon. $HTTP_COOKIE_VARS est déjà obsolète. Fait seulement un simple echo des variables postées pour tester si elles sont bien transmises ou non.

    A+.

  17. #17
    Membre averti
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 58
    Par défaut
    J,ai changé mes variables et maintenant elles s'affichent bien. Mais je lâche xajax... Je crois que xajax me pose problème! Je bosse d'une autre manière... À moins que vous ayez une meilleure idée...

Discussions similaires

  1. [MySQL] requete update avec fonction php sur champs
    Par SpaceFrog dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 21/10/2008, 09h14
  2. [AJAX] fonction setinterval sur frame ajax
    Par speedylol dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 23/01/2008, 15h28
  3. [PHP-JS] fonction php sur click d'une image
    Par LeXo dans le forum Langage
    Réponses: 2
    Dernier message: 30/06/2007, 15h57
  4. [PHP-JS] lancer une fonction php via onClick?
    Par popogendarme dans le forum Langage
    Réponses: 3
    Dernier message: 30/01/2007, 14h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo