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

JavaScript Discussion :

[AJAX] faire tourner un script php en boucle avec ajax


Sujet :

JavaScript

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 103
    Points : 56
    Points
    56
    Par défaut [AJAX] faire tourner un script php en boucle avec ajax
    Bonjour à tous !

    J'ai programmé un script php qui extrait des données d'un fichier xml qui est régulièrement modifié et qui les enregistre dans une base de données. Pour le faire tourner de manière régulière, j'ai utilisé la méthode XMLHttpRequest fournie dans les tutos. Le problème est que j'utilise déjà cette méthode pour rafraîchir l'affichage de mon site, toujours en fonction du même fichier xml, et les deux méthodes étant appelées au chargement de la page, elles semblent se "marcher dessus" : la dernière chargée est exécutée mais pas l'autre

    Existe-t-il un moyen d'exécuter deux fonctions faisant appel aux xhr simultanément ? Sinon y ais-je un autre moyen de parvenir à mes fins ?

    En vous remerciant
    Sébastien

  2. #2
    En attente de confirmation mail
    Inscrit en
    Novembre 2005
    Messages
    52
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Novembre 2005
    Messages : 52
    Points : 46
    Points
    46
    Par défaut
    Bonsoir mitmit,

    Je ne suis pas vraiment sur d'être bien placé pour t'apporter conseil car je débute AJAX mais je vais tenté tout de même.
    Personnellement j'ai eu besoin de faire la même chose, c'est à dire actualiser régulièrement (toutes les 5secs) une page.
    J'ai donc créer ma fonction d'abord qui permet de réactualiser toutes les 5secs

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function NomDeLaFonction()
    {
      // Instructions
      setTimeout("NomDeLaFonction()",5000);
    }
    Et dans les instructions je fais simplement appelle à ma fonction qui permet d'actualiser la page.

    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 NomFonction()
    {
      xmlHttp=GetXmlHttpObject();
      xmlHttp.onreadystatechange=function()
      {
        if(xmlHttp.readyState==4)
        {
          // Instructions
        }
      }
      var url="page.php";
      xmlHttp.open("GET",url,true);
      xmlHttp.send(null);
    }
    Je pense donc que si tu créés 2 fonctions similaires à la fonction NomFonction() ici et que tu mets les 2 dans les instructions de NomDeLaFonction(), ça devrait fonctionner.

    En espérant t'avoir aidé.

    Bonne soirée.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 103
    Points : 56
    Points
    56
    Par défaut
    c'est effectivement ce que j'ai tenté et je suis parvenu à mes fins ^^
    en te remerciant pour tes conseils

    cordialement,
    mitmit

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 103
    Points : 56
    Points
    56
    Par défaut
    heu en fait j'ai un problème avec mon script php :/
    je l'ai fait tourner un peu pour le tester et au bout d'un moment il devient "fou" et fait une entrée incohérente dans la base de données toutes les secondes...
    je post ici bien que ce ne soit pas un forum php car je pense que ce problème vient d'ajax et non de php

    voici le fichier php que j'appelle :
    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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    <?
    switch ($_GET['act'])
    {
    	case  "track":
     
    	/********connexion à la base**********/
    	$co = mysql_connect("192.168.96.187","generation","stu64pru") or die(mysql_error());
    	mysql_select_db("_gene") or die(mysql_error());
    	/***********************/
     
    	$handle = fopen("http://generationsfm.com/sms/Titres.xml", "r");
    	$stack = array();
    	if ($handle) 
    	{
    		while (!feof($handle)) 
    	    {
    		$buffer = fgets($handle, 4096);
    		$buffer=strip_tags($buffer);
    		array_push ($stack,$buffer);
    		}
    	 fclose($handle);
    	}
     
    	/**********ajout des infos dans la base de données************/
    	$date = date("Y-m-d");
    	$h = date("H");
    	$min = date("i");
    	$sec = date("s");
    	$heure = $h.":".$min.":".$sec;
    	$titre = $stack[3];
    	$artiste = $stack[4];
    	//echo $titre."----".$artiste."----".$date."----".$heure;
     
    	//pour savoir si la date est déjà enregistrée
    	$nb_date=0;
    	$exec=mysql_query("select date from seb_date where date='".$date."'") /*or die ("Erreur1 : ".mysql_error())*/;
    	while (($row = mysql_fetch_row($exec))) {
    		if ($row[0]==$date) $nb_date=$nb_date+1;
    	}
    	if ($nb_date > 0) /*echo "Date déjà entrée </br>"*/;
    	//si elle n'existe pas on l'enregistre
    	else  mysql_query("insert into seb_date values('".$date."')") /*or die("Erreur2 : ".mysql_error())*/;
     
    	//pour savoir si l'artiste est déjà enregistré
    	$nb_artiste=0;
    	$exec=mysql_query("select nomartiste from seb_artiste where nomartiste='".$artiste."'")/* or die ("Erreur3 : ".mysql_error())*/;
    	while (($row = mysql_fetch_row($exec))) {
    		if ($row[0]==$artiste) $nb_artiste=$nb_artiste+1;
    	}
    	if ($nb_artiste > 0) /*echo "Artiste déjà enregistré </br>"*/;
    	//si il n'existe pas on l'enregistre, avec comme identifiant (le plus grand identifiant+1)
    	else {	
    		$exec=mysql_query("select max(numartiste) from seb_artiste")/* or die ("Erreur4 : ".mysql_error())*/; 
    		$nbA=mysql_result($exec,0);
    		$nbA=$nbA+1;
    		mysql_query("insert into seb_artiste values('".$nbA."','".$artiste."')")/* or die ("Erreur5 : ".mysql_error())*/;
    	}
     
    	//pour savoir si le morceau est déjà enregistré
    	$nb_morceau=0;
    	$exec=mysql_query("select titre from seb_morceau where titre='".$titre."'")/* or die ("Erreur6 : ".mysql_error())*/;
    	while (($row = mysql_fetch_row($exec))) {
    		if ($row[0]==$titre) $nb_morceau=$nb_morceau+1;
    	}
    	if ($nb_morceau > 0) /*echo "Morceau déjà enregistré </br>"*/;
    	//si il n'existe pas on l'enregistre, avec comme identifiant (le plus grand identifiant+1)
    	else {	
    		$exec=mysql_query("select max(nummorceau) from seb_morceau")/* or die ("Erreur7 : ".mysql_error())*/; 
    		$nbM=mysql_result($exec,0);
    		$nbM=$nbM+1;
    		//récupération de l'identifiant de l'artiste pour l'ajout dans seb_morceau
    		$exec = mysql_query("select numartiste from seb_artiste where nomartiste='".$artiste."'")/* or die ("Erreur8 : ".mysql_error())*/; 
    		$interprete = mysql_result($exec,0);
    		mysql_query("insert into seb_morceau values('".$nbM."','".$titre."','".$interprete."')")/* or die ("Erreur9 : ".mysql_error())*/;
    	}
     
    	//*************
    	//enregistrement dans la table heure
    	//**************
     
    	//recup la dernière heure d'enregistrement du morceau 
    	$exec = mysql_query("select max(heure) from seb_heure,seb_morceau where seb_morceau.nummorceau=seb_heure.nummorceau and titre='".$titre."'");// or die ("Erreur9.1 : ".mysql_error());
    	$time = mysql_result($exec,0);
     
    	//recup de la dernière date d'enregistrement du morceau
    	$exec = mysql_query("select max(date) from seb_heure,seb_morceau where seb_morceau.nummorceau=seb_heure.nummorceau and titre='".$titre."'");// or die ("Erreur9.2 : ".mysql_error());
    	$dat = mysql_result($exec,0);
     
    	//calcul de l'écart de temps entre maintenant et le dernier enregistrement 
    	$diff = mktime($h,$min,$sec,date("n"),date("j"),date("Y"))-mktime($time[0].$time[1],$time[3].$time[4],$time[6].$time[7],$dat[5].$dat[6],$dat[8].$dat[9],$dat[0].$dat[1].$dat[2].$dat[3]);
    	//echo "</br>".mktime($h,$min,$sec,date("n"),date("j"),date("Y"))."</br>".mktime($time[0].$time[1],$time[3].$time[4],$time[6].$time[7],$dat[5].$dat[6],$dat[8].$dat[9],$dat[0].$dat[1].$dat[2].$dat[3])."</br>".$diff."</br>";
     
    	//si le morceau a été enregistré il y a moins de dix minutes, on ne le reenregistre pas
    	if ($diff>600) {
    	$exec = mysql_query("select nummorceau from seb_morceau where titre='".$titre."'");// or die ("Erreur10 : ".mysql_error());
    	$num = mysql_result($exec,0);
    	mysql_query("insert into seb_heure values('".$heure."','".$date."','".$num."')");// or die ("Erreur11 : ".mysql_error());
    	}
     
    	mysql_close($co);
    	/*******************/
     
     
     
    	echo $stack[3]."-".$stack[4];
    	break;
    }
    ?>
    et voici le code qui l'appelle :
    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
    <script language="JavaScript" type="text/javascript">
     
    function getXhr() {
    	var xhr = null;
     
    	//firefox
        if (window.XMLHttpRequest) { 
    		xhr = new XMLHttpRequest();
        }
     
    	//ie
        else if (window.ActiveXObject) {
    		try {
    			xhr = new ActiveXObject("Msxml2.XMLHTTP");
    		}
    		catch (e) { 
    			xhr = new ActiveXObject("Microsoft.XMLHTTP");
    		}
    	}
     
    	//non supporté
    	else {  
    		alert("Fonction non supportée par le navigateur"); 
    		xhr = false; 
    	}
     
    	return (xhr);
    }
     
    function getTrack()
    {
        var xhr = getXhr();
     
        //on définit l'appel de la fonction au retour serveur
        xhr.onreadystatechange = function() { 
     
    								if (xhr.readyState == 4 && xhr.status == 200) {
    									var resultat = xhr.responseText;
    									document.getElementById('div_track').innerHTML=resultat;
    								}
     
    							};
        xhr.open("GET","http://generationsfm.com/ajax_track.php?act=track",true);
    	xhr.send(null);
    }
     
    window.onload=getTrack;
    </script>
    voilà si quelqu'un peut m'aider ça m'arrangerait bien ^^
    merci par avance

    cordialement
    mitmit

  5. #5
    En attente de confirmation mail
    Inscrit en
    Novembre 2005
    Messages
    52
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Novembre 2005
    Messages : 52
    Points : 46
    Points
    46
    Par défaut
    Bonjour à toi,

    Alors je vais analysé ton code un petit peu pour essayer de t'aider.

    Déjà tu aurais pu cacher ta connexion à SQL Bien que je n'en ferai rien mais tout le monde n'est pas comme moi!

    Petite parenthèse pour l'heure, tu as mit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    	$h = date("H");
    	$min = date("i");
    	$sec = date("s");
    	$heure = $h.":".$min.":".$sec;
    Tu peux mettre simplement ceci, ça évitera d'utiliser des variables pour rien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $heure = date("H:i:s");
    Ensuite pour savoir si la date est déjà enregistrée ainsi que l'artiste et le morceau, je te conseil d'utiliser la fonction PHP mysql_num_rows(); :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    	//pour savoir si la date est déjà enregistrée
    	$nb_date=0;
    	$exec=mysql_query("select date from seb_date where date='".$date."'") /*or die ("Erreur1 : ".mysql_error())*/;
            $nb_date = mysql_num_rows($exec);
    	if ($nb_date > 0) /*echo "Date déjà entrée </br>"*/;
    	//si elle n'existe pas on l'enregistre
    	else mysql_query("insert into seb_date values('".$date."')") /*or die("Erreur2 : ".mysql_error())*/;
    Je n'ai pas vu d'erreur particulière sinon...

  6. #6
    Candidat au Club
    Inscrit en
    Mai 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    bonjour
    je me permer de rentrer dans la conversation car je crois que le code de adidas correspont a ce que j'ai besoin, mais je sais pas trop comment l'exploiter.
    je m'explique

    j'ai une page php qui extrait des données d'une table pour les affiché
    pour mon ka ce sont les pseudo des membres qui sont connectés

    cette page est apele par un include qui est dans un div de ma page principale

    donc je voudrai faire en sorte qu'il ny est ke la requete sql qui s'actualise
    sans pour devoir reaficher la page complete
    j'espere m'etrre bien expliquer
    ça fait 4 jours que je me alnce dans l'ajax et c'est vraiment pas evident

    merci pour votre aide

    tilillois

Discussions similaires

  1. Appeler un script php en boucle avec Ajax
    Par noob_motivation dans le forum AJAX
    Réponses: 1
    Dernier message: 02/10/2015, 20h34
  2. [EasyPHP] Faire tourner des scripts PHP en cgi
    Par Jim_Nastiq dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 19/04/2006, 10h45
  3. [PERL] faire tourner un script comme un service
    Par LE NEINDRE dans le forum Langage
    Réponses: 5
    Dernier message: 26/09/2005, 13h34
  4. Réponses: 2
    Dernier message: 11/07/2002, 08h31

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