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

Langage PHP Discussion :

php pour appel AJAX


Sujet :

Langage PHP

  1. #1
    Membre confirmé
    Inscrit en
    Juillet 2011
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Juillet 2011
    Messages : 63
    Par défaut php pour appel AJAX
    Bonjour,
    Je veux vérifier avec vous mon script php
    il doit être utiliser par un appel AJAX
    pour fournir des coordonnes (ms,peaks) stockées dans
    ma base de données en format json pour être
    ensuite afficher par la librairies Highchart

    mon code est comme suit :
    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
     
     <?php
     header("Content-type: text/json");
     try
    {
     $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
    $bdd = new PDO('mysql:host=localhost;dbname=hs', 'root', '',
    $pdo_options);
     $reponse = $bdd->query("SELECT ms,peaks FROM stress ");
     $donnees = $reponse->fetch();
     
    		  extract ($donnees);
    		 $data=array($ms,$peaks);
     	    echo json_encode($data);
     
    $reponse->closeCursor(); 
     
    }
     
     catch(Exception $e)
     {
     die('Erreur : '.$e->getMessage());
     
       }
    ?>
    Ma question si ce script est capable de passer au point suivant dans ma base de données ? Parce que j'obtient toujours le même point, je sais pas si le problème est dans le script php ou JS code.

    mon script affiche
    Merci infiniment

  2. #2
    Membre Expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Par défaut
    Bonjour,

    Il faut que tu boucle sur ta ressource fournie $reponse, sinon tu auras tjs la même valeur.

    Exemple a adapter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $result = mysql_query($query) or die(mysql_error());
    while($row = mysql_fetch_array($result)){
    	traitement ...
    }

  3. #3
    Membre confirmé
    Inscrit en
    Juillet 2011
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Juillet 2011
    Messages : 63
    Par défaut
    Merci Fench pour votre réponse,
    en fait a chaque appel AJAX je doit récupérer un point ["x","y"]
    et non récupérer tous les point en même temps.
    Est ce que l'output de mon script est bien au Json format ?
    Merci

  4. #4
    Membre Expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Par défaut
    Format json pour le tableau, c'est Ok.

    Pour plus d'info regardes les automates fournis dans le site json.org

  5. #5
    Membre confirmé
    Inscrit en
    Juillet 2011
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Juillet 2011
    Messages : 63
    Par défaut
    Merci Fench !

  6. #6
    Membre confirmé
    Inscrit en
    Juillet 2011
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Juillet 2011
    Messages : 63
    Par défaut
    Bonjour,
    une autre question s'il vous plait
    j'ai changer mon script comme suit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
      <?php
    $sql = mysql_query("SELECT ms,peaks FROM stress  ");
     
     while( $row= mysql_fetch_array($sql) )   
       {
                 extract ($row); 
                  $x= $row['ms'];
    	      $y= $row['peaks'];
                  $ret=array($x,$y);
                  echo"[$x,$y]";
     
    	 	   }
    ?>
    depuis firebug j'arrive pas a voir aucune requête ajax exécutées et aucun point afficher dans ma courbe
    alor que sans boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
      <?php
    $sql = mysql_query("SELECT ms,peaks FROM stress  ");
     
     $row= mysql_fetch_array($sql) ;
                  extract ($row); 
                  $x= $row['ms'];
    	      $y= $row['peaks'];
                  $ret=array($x,$y);
                  echo"[$x,$y]";
     
      ?>
    depuis firebug je peut voir les requêtes AJAX exécutées avec le même point qui est retournée qui correspond au premier point de ma DB et j'obtiens un point dans ma courbe .

    je suis confus d'ou vient le problème!
    tout d'abord je doit être sur de mon script php, ce que je veux savoir s'il vous plait c'est comment faire pour qu'a chaque appel ajax
    la valeur retournée sera la suivante dans ma table et si c'est faisable !
    mysql_fetch_array peut faire ça ou je doit utiliser une autre fonction comme mysql_fetch_row.
    Merci d'avance pour vos commentaires et suggestions

  7. #7
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Salut

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT ms,peaks FROM stress
    La requête récupère toutes les données, sans exception.

    Si tu souhaite récupérer 1 point en particulier il n'y a pas d'autre choix de rajouter au minimum une condition dans la requête SQL.
    Je ne vois pas autre chose.

    Quelque chose comme :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT ms, peaks
    FROM stress
    WHERE truc = paramètre
    En somme, rajouter une clause.

    Du coup, il faudrait peut être un paramètre (au moins 1) qui serait théoriquement variable pour que chaque point récupéré sera différent du précédant/suivant.
    Ce paramètre pourrait très bien être transmit au niveau de la requête Ajax, et par conséquent récupéré dans ce code ici, en GET ou POST.
    (même principe qu'un lien ou formulaire).

    Mais ça il n'y a que toi qui doit savoir quelle serait la ou les conditions ou/et paramètre(s) en question.

  8. #8
    Membre confirmé
    Inscrit en
    Juillet 2011
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Juillet 2011
    Messages : 63
    Par défaut
    merci pour votre réponse
    en fait ma BD est trop simple elle contient juste une table qui contient 2 colonne ms et peaks (x,y)
    j'ai ajouté une troisieme colonne id et j'ai modifiee la requête comme suit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = mysql_query("SELECT ms,peaks FROM stress WHERE id BETWEEN 1 AND 20 ");
    et c'est toujours le même problème!
    comment obtenir a partir du script un tableau de nombre (en json format) parce que c'est le format accepter dans mon cas .
    pour le moment json_encode retourne ça .
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo json_encode($ret) => ["281","95"]
    est je crois que c'est un tableau de string si je me trompe pas !
    Merci et désolé pour ces question basiques

  9. #9
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    (en json format) parce que c'est le format accepter dans mon cas .
    pour le moment json_encode retourne ça .
    Ton problème serait alors un problème de type de données, de format ?

    Il me semble avoir lu que ce que renvoie la fonction json_encode() respecterait totalement le format standard de Json, en somme, que tout soit des string, qu'il n'y aurait aucun type de donnée.

    Si le code Ajax n'accepte pas ce standard ce serait lui qui ne serait pas si standard que ça.
    Du moins c'est ce que j'en conclu par rapport à ce que tu dis.

    Dans ces conditions là, faudrait peut être ne plus utiliser la fonction json_encode, mais formater manuellement les données à renvoyer.


    Si, juste pour tester tu renvoie "en dur" ceci : echo '[281,95]';
    L'Ajax fonctionne t-il ?
    Et lorsque c'est ça : echo '["281","95"]';
    Le code Ajax ne fonctionne plus ?
    Est-cela le problème ?

  10. #10
    Membre confirmé
    Inscrit en
    Juillet 2011
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Juillet 2011
    Messages : 63
    Par défaut
    merci pour votre réponse
    l'appel ajax s'execute qu'elle que soit le format même avec un echo normale
    mais cote javascipt le point n'est afficher si seulement il est recu comme ca mais avec json_encode je vois l'appel ajax exécute mais aucun point n'est afficher puiseque il'est reçu pour enlever le doute sur le code javascipt
    j'ai changer le x et le y par time et random data sans passer par la base de donnees et tout marche tres bien !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?php 
    // Set the JSON header
      header("Content-type: text/json");
     
    $x = time() * 1000;
     
    $y = rand(-500, -100);
     
    $ret = array($x, $y);
        echo json_encode($ret);
     
     //  echo"[$x,$y]"; 
     
    ?>
    et le script revoie achaque appel une donnees sous la forme
    même avec json encode et comme vous voyez y'a plus de (" " ) et les requêtes ajax sont exécutés et a chaque appel un nouveau point.
    donc ça devrait être un problème de BD , puisque dans le code précédent quand je rafraîchi le browser j'obtient une nouvelle données alors que si je passe par DB toujours le même point qui est retournée .

  11. #11
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Essai de transtyper (caster) les données venant de la Bdd.
    C'est à dire, faire quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?php
    while ($row = mysql_fetch_assoc($sql)) {
        $x = (int)$row['ms'];
        $y = (int)$row['peaks'];
        // ... etc ...
    }
    Ensuite exploiter $x et $y pour par exemple créer un autre tableau pour à la fin le convertir avec la fonction json_encode().
    Vu que ce sera cette fois des interger, json_encode() va peut être les envoyer dans le format que tu attends.


    Même si les types de données des des champs dans MySQL sont des interger, ce qu'on obtient sont des chaines.
    Il faut soit même transtyper les données.

  12. #12
    Membre confirmé
    Inscrit en
    Juillet 2011
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Juillet 2011
    Messages : 63
    Par défaut
    merci ça marche
    le problème json est réglé
    mais le problème initiale demeure !
    j'arrive pas a comprendre le mécanisme d'ajax coupler avec une BD
    avec des données dynamique(temps et random data ) a chaque appel c'est un nouveau point,
    mais a partir d'une base de données c'est toujours la même donnée reçu.
    Ma fonction javascript add.Point est capable d'ajouter seulement un point
    donc l'appel ajax doit recevoir seulement un point je vois comment il peut passer
    au point suivant c'est dire la ligne suivante dans ma table !

  13. #13
    Membre confirmé
    Inscrit en
    Juillet 2011
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Juillet 2011
    Messages : 63
    Par défaut
    je vais supposer que c'est résolu vue que je suis entrain de faire quelque chose qui va pas avec highcharts framework !
    je doit mettre a jour ma data base par un moyen et synchroniser avec l'appel ajax pour obtenir le dernier point .
    Merci en tout cas pour vos suggestions

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 7
    Dernier message: 14/03/2010, 10h19
  2. Framework PHP pour requête AJAX
    Par kheraud dans le forum Langage
    Réponses: 4
    Dernier message: 13/03/2010, 20h52
  3. [AJAX] AJAX et PHP pour semblant de calendrier
    Par xess91 dans le forum AJAX
    Réponses: 0
    Dernier message: 15/04/2009, 10h08
  4. Réponses: 4
    Dernier message: 28/10/2007, 20h01
  5. Réponses: 8
    Dernier message: 08/06/2007, 21h39

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