Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > AJAX
AJAX Forum sur la programmation AJAX. Avant de poster : Cours AJAX, FAQ AJAX, Toutes les FAQ JavaScript
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 07/02/2012, 23h29   #1
Invité de passage
 
Homme
Inscription : décembre 2011
Messages : 34
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations forums :
Inscription : décembre 2011
Messages : 34
Points : 4
Points : 4
Par défaut 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 :
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 :
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 :
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 :
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!
DoumCSS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/02/2012, 05h27   #2
Rédacteur/Modérateur
 
Avatar de andry.aime
 
Homme Andry Aimé
Inscription : septembre 2007
Messages : 5 148
Détails du profil
Informations personnelles :
Nom : Homme Andry Aimé
Localisation : Ile Maurice

Informations forums :
Inscription : septembre 2007
Messages : 5 148
Points : 7 295
Points : 7 295
Bonjour,

1-Vire cette partie de code:
Citation:
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 :
xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
.

A+.
andry.aime est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/02/2012, 12h36   #3
Invité de passage
 
Homme
Inscription : décembre 2011
Messages : 34
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations forums :
Inscription : décembre 2011
Messages : 34
Points : 4
Points : 4
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 :
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);
}
DoumCSS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/02/2012, 13h04   #4
Rédacteur/Modérateur
 
Avatar de andry.aime
 
Homme Andry Aimé
Inscription : septembre 2007
Messages : 5 148
Détails du profil
Informations personnelles :
Nom : Homme Andry Aimé
Localisation : Ile Maurice

Informations forums :
Inscription : septembre 2007
Messages : 5 148
Points : 7 295
Points : 7 295
Ton alert affiche quoi?

Citation:
if(xhr.readyState == 4 && xhr.status == 200){
alert(xhr.responseText);
}
Code :
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+.
andry.aime est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/02/2012, 23h00   #5
Invité de passage
 
Homme
Inscription : décembre 2011
Messages : 34
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations forums :
Inscription : décembre 2011
Messages : 34
Points : 4
Points : 4
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 :
$sql = "INSERT INTO clics VALUES ('','RSS','user', 'ip', 'time')";
Et rien ne s'est passé non plus...
DoumCSS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/02/2012, 23h35   #6
Membre expérimenté
 
Avatar de buggen25
 
Inscription : août 2008
Messages : 510
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 510
Points : 595
Points : 595
Bonsoir
Essaye sur phpmyadmin d'executer la requette suivante
Code :
1
2
 
"INSERT INTO clics VALUES ('','RSS','user', 'ip', 'time')";
__________________
If you type Google into Google, you Can break the internet" - The IT Crowd
buggen25 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/02/2012, 23h53   #7
Invité de passage
 
Homme
Inscription : décembre 2011
Messages : 34
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations forums :
Inscription : décembre 2011
Messages : 34
Points : 4
Points : 4
Oui, ca insère de cette facon...
DoumCSS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2012, 03h39   #8
Invité de passage
 
Homme
Inscription : décembre 2011
Messages : 34
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations forums :
Inscription : décembre 2011
Messages : 34
Points : 4
Points : 4
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 :
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!
DoumCSS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2012, 04h44   #9
Rédacteur/Modérateur
 
Avatar de andry.aime
 
Homme Andry Aimé
Inscription : septembre 2007
Messages : 5 148
Détails du profil
Informations personnelles :
Nom : Homme Andry Aimé
Localisation : Ile Maurice

Informations forums :
Inscription : septembre 2007
Messages : 5 148
Points : 7 295
Points : 7 295
Citation:
function compteur_lien_rss( user, ip, time)
Citation:
<a onclick=\'xajax_compteur_lien_rss(\''.$user.'\',\''.$ip.'\',\''.$time.'\');\' href="'.$link.'">
andry.aime est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2012, 05h38   #10
Invité de passage
 
Homme
Inscription : décembre 2011
Messages : 34
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations forums :
Inscription : décembre 2011
Messages : 34
Points : 4
Points : 4

Code :
$xajax->register(XAJAX_FUNCTION, 'compteur_lien_rss'); // Déclaration de la fonction MaFonctionPHP.
DoumCSS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2012, 06h31   #11
Rédacteur/Modérateur
 
Avatar de andry.aime
 
Homme Andry Aimé
Inscription : septembre 2007
Messages : 5 148
Détails du profil
Informations personnelles :
Nom : Homme Andry Aimé
Localisation : Ile Maurice

Informations forums :
Inscription : septembre 2007
Messages : 5 148
Points : 7 295
Points : 7 295
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+.
andry.aime est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2012, 12h19   #12
Invité de passage
 
Homme
Inscription : décembre 2011
Messages : 34
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations forums :
Inscription : décembre 2011
Messages : 34
Points : 4
Points : 4
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 :
$user = $HTTP_COOKIE_VARS['username'];
ni
...
?
DoumCSS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2012, 12h44   #13
Rédacteur/Modérateur
 
Avatar de andry.aime
 
Homme Andry Aimé
Inscription : septembre 2007
Messages : 5 148
Détails du profil
Informations personnelles :
Nom : Homme Andry Aimé
Localisation : Ile Maurice

Informations forums :
Inscription : septembre 2007
Messages : 5 148
Points : 7 295
Points : 7 295
Pose la question sur le forum php, tu aurais plus de chance qu'ici sur Ajax pour ça.
andry.aime est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2012, 12h56   #14
Invité de passage
 
Homme
Inscription : décembre 2011
Messages : 34
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations forums :
Inscription : décembre 2011
Messages : 34
Points : 4
Points : 4
lol ... ouais ok!
DoumCSS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2012, 01h58   #15
Invité de passage
 
Homme
Inscription : décembre 2011
Messages : 34
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations forums :
Inscription : décembre 2011
Messages : 34
Points : 4
Points : 4
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 :
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!
DoumCSS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2012, 03h24   #16
Rédacteur/Modérateur
 
Avatar de andry.aime
 
Homme Andry Aimé
Inscription : septembre 2007
Messages : 5 148
Détails du profil
Informations personnelles :
Nom : Homme Andry Aimé
Localisation : Ile Maurice

Informations forums :
Inscription : septembre 2007
Messages : 5 148
Points : 7 295
Points : 7 295
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+.
andry.aime est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2012, 03h57   #17
Invité de passage
 
Homme
Inscription : décembre 2011
Messages : 34
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations forums :
Inscription : décembre 2011
Messages : 34
Points : 4
Points : 4
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...
DoumCSS est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h54.


 
 
 
 
Partenaires

Hébergement Web