Execution de requetes SQL via Ajax


ygalr22
WRInaute discret
WRInaute discret
 
Messages: 140
Inscription: 9 Jan 2008

Execution de requetes SQL via Ajax

Message le Lun Nov 03, 2008 17:16

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: Tout sélectionner
                     
<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: Tout sélectionner
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: Tout sélectionner
<?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!


Bacteries
WRInaute passionné
WRInaute passionné
 
Messages: 1369
Inscription: 27 Mai 2004

Message le Lun Nov 03, 2008 17:27

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).


ygalr22
WRInaute discret
WRInaute discret
 
Messages: 140
Inscription: 9 Jan 2008

Message le Lun Nov 03, 2008 17:35

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.
Dernière édition par ygalr22 le Lun Nov 03, 2008 17:56, édité 1 fois.


ygalr22
WRInaute discret
WRInaute discret
 
Messages: 140
Inscription: 9 Jan 2008

Message le Lun Nov 03, 2008 17:54

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: Tout sélectionner
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?


UsagiYojimbo
WRInaute accro
WRInaute accro
 
Messages: 8575
Inscription: 23 Nov 2005

Message le Lun Nov 03, 2008 18:12

Bein une fois l'enregistrement fait, tu réactualises la div qui affiche ton compteur (cf propriété JS innerHTML).


ygalr22
WRInaute discret
WRInaute discret
 
Messages: 140
Inscription: 9 Jan 2008

Message le Lun Nov 03, 2008 22:05

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! ;)


UsagiYojimbo
WRInaute accro
WRInaute accro
 
Messages: 8575
Inscription: 23 Nov 2005

Message le Lun Nov 03, 2008 22:34

Bein oui si t'as div possède un id unique, tu peux tout à fait ne modifier que le contenu de celle-ci.


ygalr22
WRInaute discret
WRInaute discret
 
Messages: 140
Inscription: 9 Jan 2008

Message le Lun Nov 03, 2008 23:46

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!


UsagiYojimbo
WRInaute accro
WRInaute accro
 
Messages: 8575
Inscription: 23 Nov 2005

Message le Lun Nov 03, 2008 23:50

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.


ygalr22
WRInaute discret
WRInaute discret
 
Messages: 140
Inscription: 9 Jan 2008

Message le Mar Nov 04, 2008 4:24

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.


Bacteries
WRInaute passionné
WRInaute passionné
 
Messages: 1369
Inscription: 27 Mai 2004

Message le Mar Nov 04, 2008 9:33

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.


ygalr22
WRInaute discret
WRInaute discret
 
Messages: 140
Inscription: 9 Jan 2008

Message le Mar Nov 04, 2008 18:07

Ok, merci je vais essayer ca!


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité