Execution de requetes SQL via Ajax

WRInaute discret
Bonjour à tous,

Voila, j'essaye de mettre à jour un champ dans une table de ma BDD.
En gros, lorsque l'utilisateur clique sur un bouton, le champ (int) de la Table doit s'incrémenter de +1.

Pour ce faire, j'essaye (je dit bien j'essaye! ;) ) d'utiliser Ajax.

Donc voila ou j'en suis:

Dans mon code PHP, le lien sur lequel j'appelle une fonction JavaScript:
($Rea_Num est le numéro du commentaire à recommander)
Code:
<a href=\"#Comm_$Rea_Num\" id=BoutonPlus class=BulleValid onclick=\"RecoReac('$Rea_Num')\";>
<span>Recommander ce commentaire</span>
</a>

La Fonction appelée lors du click:
Code:
function RecoReac(NumReac){

	var xhr_object = null;
		
		if(window.XMLHttpRequest) // Firefox
			xhr_object = new XMLHttpRequest();
		else if(window.ActiveXObject) // Internet Explorer
			xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
		else { // XMLHttpRequest non supporté par le navigateur
			alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
			return;
		}
	
		xhr_object.open("POST", "Recommander.php", true);
		
		
	
		xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		var data = "NUMREAC="+NumReac;
		xhr_object.send(data);
  
}

Et mon script "Recommander.php":
Code:
<?php
header('Content-type: text/html; charset=iso-8859-1');

INCLUDE_ONCE("Script.php");


//On récupere le numéro du commentaire à recommander
$NumReac=$_POST['NUMREAC'];

//On augmente le nombre de recommandations.
//Requete:

$Req="UPDATE `reactions`
      SET `Rea_Reco` =Rea_Reco+1  
      WHERE `Rea_Num` =$NumReac;" ;

//on exécute la requete
Requete($Req, $G_Pointeur);//Exécution de la requete


?>

Donc voila, je ne sais pas si mon code est bon, je n'ai pas d'erreur dans la Console, mais apparemment la requête ne s'exécute pas puisque le champ de la table n'est pas mis à jour.

Si quelqu'un peut m'éclairer, je débute en Ajax

Merci!
 
WRInaute passionné
Tu utilises firebug?
Dans l'onglet réseau tu peux voir ce qui est envoyé à ta page Recommander.php et voir les paramètre, réponse, ...

Cherche de ce coté à mon avis (ou met des print_r($_POST) sur ta page PHP).
 
WRInaute discret
Salut et merci de ta réponse rapide!

Firebug? Je ne connais pas, je vais tester! :oops:

Pour l'idée des print_r($_POST), je fait un echo des données en POST, et cela n'affiche rien...
En fait lorsque je clique sur le lien je reste sur la même page.

Sinon mon code semble correct?


EDIT: Je viens de tester Firebug... Nikel ce petit truc, merci! ;)

J'ai une ligne d'erreur dans l'onglet réseau:
POST Recommander.php
[mon site]/Articles/Recommander.php

404 Not Found


Je pense voir d'où cela vient, je regarde et te redis.
 
WRInaute discret
Ok, ca marche à moitié depuis que j'ai apporté une petite modification:

Dans le code Javascript apres la ligne "xhr_object.open("POST", "../Script/Recommander.php", true);" :
Code:
xhr_object.onreadystatechange = function anonymous() {
			if(xhr_object.readyState == 4)
				eval(xhr_object.responseText);
}

La mise à jour du champ de la table se fait bien, mais pour que la modification soit visible pour l'utilisateur celui-ci doit recharger la page...
J'aimerais que cela ce fasse automatiquement, comment faire?
 
WRInaute discret
Salut!

C'est faisable de réactualiser juste la div???
Pour le moment je réactualise la page, du coup je vois pas trop l'intérêt de Ajax dans ce cas! ;)
 
WRInaute discret
C'est pas faux, mais ça oblige à réexecuter des requêtes...
Quest-ce qui est le plus ourd? Recharger une page ou exécuter une requête? :roll:
Bon Ok!, je m'y met!!

Merci pour le coup de main!
 
WRInaute accro
En quoi cela t'obligerait t'il à rééxécuter des requêtes ? Il te suffit de récupérer, lors de l'appel à ta fonction php qui met à jour ta table, la valeur a laquelle cette table a été mise à jour, et d'afficher cette valeur dans ta div.
 
WRInaute discret
Re!

Je serait obligé de (ré)exécuter certaines requêtes car le fait de modifier la donnée en Ajax, modifie toute une partie de ma page est changée, donc elle doit être rechargée.
(ce qui est faisable avec ajax, mais plus fastidieux qu'un simple reload)

Enfin dites moi si je me trompe, peut être mon problème est très (trop?) spécifique.
 
WRInaute passionné
Non c'est plutôt générique.

Le plus simple : appeller un script PHP qui te retourne le HTML à intégrer à ta page.
Tu récupère le "text" de ton appel Ajax et tu le mets dans le innerHTML de ta div.

Et ça tu peux le faire après la MAJ dans ta table, donc tout en un.
 
Discussions similaires
Haut