Ajax php pour histogramme

Résolu/Fermé
tonio2807 Messages postés 9 Date d'inscription lundi 22 avril 2013 Statut Membre Dernière intervention 28 juin 2013 - 22 avril 2013 à 18:23
tonio2807 Messages postés 9 Date d'inscription lundi 22 avril 2013 Statut Membre Dernière intervention 28 juin 2013 - 18 juin 2013 à 15:01
Bonjour,
J'aimerais savoir comment il fallait procéder afin de créer un histogramme dont les valeurs sont stockés dans une base de données.
Pour être plus précis j'ai dans ma base de données une table qui contient 24 lignes(de 0 à 23) avec 4 champs : id,date,conso, coût. Les valeurs de conso et de coût sont actualiser périodiquement par un automate qui envoie les données dans la table. Elles vont donc changer au fil du temps.
Mon but est de créer un histogramme qui reprend ces différentes valeurs. Pour cela il faut que juste les valeurs de l'histogramme se mette à jour et non la page toute entière.
J'ai déjà réalisé une première partie qui permet d'afficher sur ma page web toutes les lignes de ma table avec toutes les différentes valeurs et faire en sorte que juste ces valeurs la se rafraîchissent et non toute ma page.
Pour exemple sur ma page web j'aurais :
La conso de ma 0(valeur de id de la ligne 1ère ligne de la table) ligne est : 32 (valeur de conso de la ligne 1ère ligne de la table)
La conso de ma 1(valeur de id de la ligne 1ère ligne de la table) ligne est : 32 (valeur de conso de la ligne 2ème ligne de la table)
etc...
Pour cela j'ai utiliser Ajax PHP et prototype.js. Le problème c'est que pour créer un histogramme il me faut du javascript et la est mon problème. Je n'arrive pas à récupérer les valeurs de la table pour les insérer dans mon histogramme puisque on ne peut pas insérer du php dans des balises script!!!
Quelqu'un aurait il une idée du procédé??
A voir également:

9 réponses

jeremy.s Messages postés 1226 Date d'inscription lundi 28 mars 2011 Statut Membre Dernière intervention 2 septembre 2013 79
22 avril 2013 à 20:06
Salut !

Pour récupérer ce que tu fais coté php après un appel AJAX, tout ce passe dans la fonction callback. Je ne travaille pas avec prototype pour l'aJax donc je ne sais pas, mais dans tous les framework ajax tu as un callback ou tu récupères tous les echo du code php.
0
tonio2807 Messages postés 9 Date d'inscription lundi 22 avril 2013 Statut Membre Dernière intervention 28 juin 2013
23 avril 2013 à 08:32
salut jeremy,

D'abord merci pour ta réponse! Il est vrai que j'avais déjà vu dans quelques tutorial l'existence de ce callback! Ensuite j'ai réalisé la même chose sans le prototype.js qui marche tout aussi bien!Donc si tu as quelques conseil à me donner pour récupérer les echo du code php je suis preneur!! Dans tous les cas je vais me pencher sur ce callback!! merci pour la piste en tout cas!!
0
jeremy.s Messages postés 1226 Date d'inscription lundi 28 mars 2011 Statut Membre Dernière intervention 2 septembre 2013 79
23 avril 2013 à 14:41
Ici tu le vois : http://prototypejs.org/learn/introduction-to-ajax.html
new Ajax.Request('/some_url', {
method:'get',
onSuccess: function(transport) {
var response = transport.responseText || "no response text";
alert("Success! \n\n" + response);
},
onFailure: function() { alert('Something went wrong...'); }
});

Le callback est la fonction appelée lors du onSuccess.
Si par exemple dans ton code php, tu fais un echo "bonjour";
Et bah le bonjour serra contenu dans la variable transport.responseText
0
et donc transport peut etre un tableau de valeurs?
0
jeremy.s Messages postés 1226 Date d'inscription lundi 28 mars 2011 Statut Membre Dernière intervention 2 septembre 2013 79
23 avril 2013 à 16:03
Alors transport est un objet, c'est l'objet XMLHttpRequest (Ajax), tu peux lui donné n'importe quel nom quand tu déclares la fonction
0
tonio2807 Messages postés 9 Date d'inscription lundi 22 avril 2013 Statut Membre Dernière intervention 28 juin 2013
24 avril 2013 à 09:05
Salut jeremy,

En réfléchissant un petit moment je me suis rendu compte que mon problème est de récupérer dans une page A une partie html d'une page B qui contiendrait un script javascript et tout ça via Ajax.

J'ai pu lire à ce sujet que le js ne sera pas interprété dans le html retourné et qu'il faut l'extraire de la réponse et l'évaluer.


Je pense donc que je devrais partir sur cette voie. Qu'est ce que tu en penses?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jeremy.s Messages postés 1226 Date d'inscription lundi 28 mars 2011 Statut Membre Dernière intervention 2 septembre 2013 79
24 avril 2013 à 14:27
J'ai pas spécialement compris ce que tu veux récupéré : du html ou du javascript ?
Dans le premier cas tu a juste à l'incorporé dans ta page où tu veux, dans l'autre il faut faire un eval(script); où script est du code js dans un string.
0
ce que je veux récupérer c'est ça :

<script>
window.onload = function ()
{


var jArray= <?php echo json_encode($tableau, JSON_NUMERIC_CHECK); ?>;


var data = [jArray[0],jArray[1],jArray[2],jArray[3],jArray[4],jArray[5],jArray[6],jArray[7],jArray[8],jArray[9],jArray[10],jArray[11],jArray[12],jArray[13],jArray[14],jArray[15],jArray[16],jArray[17],jArray[18],jArray[19],jArray[20],jArray[21],jArray[22],jArray[23]];

var bar = new RGraph.Bar('cvs', data);
bar.Set('labels', ['0','1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17','18','19','20','21','22','23']);
bar.Set('labels.above', true);
bar.Draw();
}
</script>

la fonction "window.onload = function ()" est une fonction toute faite d'une librairie.

"$tableau" renvoie toute les données d'une colonne d'une table de ma BDD => code qui permet d'avoir $tableau.

<?php
$tableau = array(24);
$reponse = $bdd -> query('SELECT * FROM visu_aux_th');

while ($donnees = $reponse -> fetch())
{
$tableau[$donnees['id_visu_th_aux']] = $donnees['conso_visu_th_aux'];

}

$reponse -> closeCursor();
?>

et "data" sont les valeurs que va prendre mon histogramme pour créer les différentes bars.
0
jeremy.s Messages postés 1226 Date d'inscription lundi 28 mars 2011 Statut Membre Dernière intervention 2 septembre 2013 79
24 avril 2013 à 15:10
Concrètement, AJAX (l'objet XMLHttpRequest qui te renvois responseText) peut te renvoyer de tout (niveau format de données récupéré) ! Mais il serra stocké dans un string. Il faut donc que tu saches ce que tu envois, et que tu saches l'interprété.

Ton histogramme se charge quand tu arrives sur la page non ? Pourquoi ne pas simplement rechargé la page pour actualiser ton histogramme ?
0
J'arrive bien à récupérer ce qu'il y'a dans "$tableau" et le mettre dans un alert par exemple.

Et oui mon histogramme se charge bien quand j'arrive sur la page. . mais je ne veux pas actualiser toute la page pour une question d'ergonomie.
0
quand je parle d'actualiser c'est par une fonction qui rafraîchit la page toutes les 5 secondes par exemple
0
jeremy.s Messages postés 1226 Date d'inscription lundi 28 mars 2011 Statut Membre Dernière intervention 2 septembre 2013 79
24 avril 2013 à 15:21
Ton histogramme est fait en javascript alors c'est ca ?
Ta fonction bar.Draw(); te l'affiche à l'endroit où tu veux ?
0
oui mon histogramme est fait en javascript, et je n'utilise pas de fonction bar.draw(); mais une fonction récupérer d'une librairie.
0
jeremy.s Messages postés 1226 Date d'inscription lundi 28 mars 2011 Statut Membre Dernière intervention 2 septembre 2013 79
24 avril 2013 à 15:27
Bah moi ce que je te propose, c'est de mettre ta fonction anonyme en une fonction normal, donc nommé, et de l'appeler toute les 5min par exemple, ca n'irait pas ?
0
tonio2807 Messages postés 9 Date d'inscription lundi 22 avril 2013 Statut Membre Dernière intervention 28 juin 2013
18 juin 2013 à 15:01
Bonjour à tous,

juste pour signaler que si quelqu'un rencontre le même problème qu'il n'hésite pas à me demander et je lui expliquerai comment proceder, la méthode étant assez fastidieuse!!!

tonio2807
0