Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
537 connectés 

  FORUM HardWare.fr
  Programmation
  HTML/CSS

  Requete ajax sur base sql

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Requete ajax sur base sql

n°1991957
rolintouco​ur
Posté le 10-05-2010 à 19:34:05  profilanswer
 

Bonjour,
J'essaie de développer, pour l'intranet de mon entreprise, une page se mettant à jour toute seule depuis une base sql.
Explication : la page est une liste de différentes informations récupérées dans une base sql ; en html classique il faut forcer la page à se recharger toutes les x secondes pour que les informations restent à jour (car ces informations sont modifiées par mes collègues très fréquemment).
Tout heureux de découvrir l'ajax, j'ai essayé de l'appliquer de façon synchrone ou asynchrone (soit en lançant ma requete en boucle infini, soit le serveur teste en permanence une mise à jour et envoie le résultat si c'est le cas). Le problème évident, c'est que ça surcharge la machine, soit la mienne soit le gros serveur du patron.
 
Je me demandais s'il est possible de "surveiller", avec Ajax, une base sql, pour se mettre à jour. ou éventuellement si, par une autre technique / autre langage, cela est possible ?
 
Merci d'avance!

mood
Publicité
Posté le 10-05-2010 à 19:34:05  profilanswer
 

n°1991962
David Bori​ng
Posté le 10-05-2010 à 19:45:55  profilanswer
 

Tu aurais du code à montrer, pour comprendre ce que tu fais.
 
 

n°1992737
rolintouco​ur
Posté le 12-05-2010 à 19:59:09  profilanswer
 

David Boring a écrit :

Tu aurais du code à montrer, pour comprendre ce que tu fais.
 
 


 
En copie-collage, ça fait :
- Dans mon fichier principal en php, je créé un DIV avec ID="liste". Ensuite, en javascript :
function charger()
  {
   try
   {
    var requete_ajax_list = new ActiveXObject(\"Microsoft.XMLHTTP\" );
   }
   catch(e)
   {
    var requete_ajax_list = new XMLHttpRequest();
   }
   requete_ajax_list.open('GET', 'ajax_list.php?liste=liste', true);
   requete_ajax_list.onreadystatechange = function () {
    afficherList(requete_ajax_list)
   }
   requete_ajax_list.send(null);
   
  }
 
  function afficherList(requete_ajax_list)
  {
   if(requete_ajax_list.readyState == 4)
   {
    if(requete_ajax_list.status == 200)
    {
     $('liste').innerHTML = requete_ajax_list.responseText;
    }
   }
   
  }  
 
Enfin, dans mon fichier requete_ajax_list.php :
if($_GET['liste']=="liste" )
{  
 $requete_nb="SELECT COUNT(*) AS nombre FROM ". $maTable ." WHERE ". $conditions;
  $resultat_nb=mysql_db_query("$database", $requete_nb);
  if($unResultatNb=mysql_fetch_array($resultat_nb))
  {
   $nombreDeResultats = $unResultatNb['nombre'];
                        // ensuite si y'a plus de résultats on envoit le résultat de la requete
  }
Là, je peux tester une différence dans le nombre de résultats pour voir si le resultat est différent, et alors l'envoyer à ma page ajax ; cela dit étrangement (c'est ironique) ça me bloque le serveur comme il faut.
 
D'où ma question : est-il possible de surveiller le remplissage d'un table SQL sans bloquer le serveur, pour en informer un programme ajax ?


Message édité par rolintoucour le 14-05-2010 à 08:54:25
n°1993401
Pascal le ​nain
Posté le 16-05-2010 à 01:41:55  profilanswer
 

Quand tu appelles ta page PHP manuellement, ca bloque aussi ton serveur ?
 
Ton "blocage" c'est un freeze, un lag, un BSoD,... ?

Message cité 1 fois
Message édité par Pascal le nain le 16-05-2010 à 01:42:04
n°1993411
rolintouco​ur
Posté le 16-05-2010 à 10:20:36  profilanswer
 

Pascal le nain a écrit :

Quand tu appelles ta page PHP manuellement, ca bloque aussi ton serveur ?
 
Ton "blocage" c'est un freeze, un lag, un BSoD,... ?


 
J'ai mal copié mon code, dans la version que j'ai présentée ça bloque pas. Ma version blocante de mon php ressemble à ça :
 
while(true)
{
        $requete_nb="SELECT COUNT(*) AS nombre FROM ". $maTable ." WHERE ". $conditions;  
  $resultat_nb=mysql_db_query("$database", $requete_nb);  
  if($unResultatNb=mysql_fetch_array($resultat_nb))  
  {  
                    $nombreDeResultats = $unResultatNb['nombre'];  
                    if($nombreDeResultats != $nombreDeResultatAnterieur)
                               {on renvoie le resultat a jour à afficher et on l'enregistre en cookie pour comparer dans la prochaine occurence; break;}
                     
                         
  }  
Le problème est que mon script boucle en permanence pour compter le nombre de résultats, et ne renvoyer un résultat que si mon table est mise à jour. D'où un lag génial qui bloque le serveur à tous les collègues pour qq dizaines de secondes...
}

n°1993437
Pascal le ​nain
Posté le 16-05-2010 à 14:37:10  profilanswer
 

Si tu fais un while(true) c'est pas étonnant que ton serveur galère un poil :p

n°1993474
rolintouco​ur
Posté le 16-05-2010 à 19:27:26  profilanswer
 

Pascal le nain a écrit :

Si tu fais un while(true) c'est pas étonnant que ton serveur galère un poil :p


Mais comment je peux faire alors pour détecter un changement sur ma base sql sans pourrir le serveur?

n°1993476
Pascal le ​nain
Posté le 16-05-2010 à 19:36:36  profilanswer
 

C'est du coté client, et donc en javascript, que doit être la boucle infinie.
Par exemple, toutes les 10 secondes, tu recharges ta page.
Ton script php ne fait qu'une seule requete et renvoie le résultat du temps T.
10 sec après, tu recharges ta page, et le résultat sera celui du temps T+1.
 
Et voila, tu es à jour  ;)
 
Ou sinon tu la fais en ajax. La page est chargée une bonne fois pour toute, et les valeurs sont mises a jour via une requete ajax périodique.

Message cité 1 fois
Message édité par Pascal le nain le 16-05-2010 à 19:40:36
n°1993509
rolintouco​ur
Posté le 16-05-2010 à 23:06:38  profilanswer
 

Pascal le nain a écrit :

C'est du coté client, et donc en javascript, que doit être la boucle infinie.
Par exemple, toutes les 10 secondes, tu recharges ta page.
Ton script php ne fait qu'une seule requete et renvoie le résultat du temps T.
10 sec après, tu recharges ta page, et le résultat sera celui du temps T+1.
 
Et voila, tu es à jour  ;)
 
Ou sinon tu la fais en ajax. La page est chargée une bonne fois pour toute, et les valeurs sont mises a jour via une requete ajax périodique.


 
Ca j'ai réussi à le faire, je fais actuellement une page en ajax qui se met à jour toutes les 10s mais l'idéal serait qu'elle se mette vraiment à jour dès que ma table sql est mise à jour sans les 10s. Du coup je suppose que ce n'est plus possible ???

n°1993539
Pascal le ​nain
Posté le 17-05-2010 à 02:59:11  profilanswer
 

Non c'est impossible.
La base de donnée ne peut pas créer d'événement lorsqu'elle est modifiée...
 
Mais je te propose une solution qui peut te convenir :
 
Tu crées un endroit (fichier texte ou enregistrement sql) où tu vas stocker le timestamp de la dernière modification.
A chaque fois que quelqu'un modifie la base, il met en plus à jour ce timestamp.
 
Dans la page où tu affiches tes informations, en ajax tu vas juste chercher le timestamp. S'il est plus récent que celui de ta page, tu le remplaces et tu refais une requete ajax pour mettre à jour tes données.
 
Ainsi, puisqu'il y a juste un timestamp à communiquer, et non pas toutes les données, tu peux te permettre de faire un refresh plus souvent, genre toutes les secondes.
 
Encore une fois, cela risque de surcharger le serveur, si plusieurs personnes font 1 requete par seconde. Si le contenu est petit (timestamp), ce sont les headers d'envoi qui deviennent significatifs (plusieurs lignes).
 
Mais c'est vrai que le web est pas fait pour ca... A la base, tu charges ta page, et tu la consulte une fois téléchargée...
 
Sinon tu peux tenter avec un petit bout de flash, qui lui, te permet une connexion permanente avec le serveur...

mood
Publicité
Posté le 17-05-2010 à 02:59:11  profilanswer
 

n°1993622
rolintouco​ur
Posté le 17-05-2010 à 10:59:18  profilanswer
 

Merci je vais essayee ça ça serait déjà plus léger !


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  HTML/CSS

  Requete ajax sur base sql

 

Sujets relatifs
Pb d'enregistrement en base d'un tableau linéariséajax peut-il faire la meme chose que jsp ?
Jquerytools et Ajax (chargement pages)écriture base de registre
Access champ null dans une requêteUne requête dans une autre requête sql
Requete Ldap sur Active directory 2008Export d'une base ACCESS en csv avec php
php objet insertion base de donnéerequete access dans php
Plus de sujets relatifs à : Requete ajax sur base sql


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR