Google Charts et base de données

Eléphanteau du PHP | 32 Messages

26 oct. 2012, 08:44

bonjour bonjour,

J'ai un petit soucis avec mon api google.

j'ai ce bout de code qui fait appelle à mes données sur ma base de données:
function <?php echo $name_chart; ?>() {

var data = google.visualization.arrayToDataTable([

['Campagne', 'Durée d\'appel'],
['<?php while ($Camp = $requete->fetch(PDO::FETCH_ASSOC))
{ echo $Camp['Nom'] ; } ?>', 3],

Le problème étant qu'en affichant mes données, cela les affiche que sur une seule colonne.

j'aimerai que chaque ligne de mon résultat de requête soit affiché pour une seule colonne.

Pour information, j'ai pris "column bar" comme type de graphique.

Merci d'avance pour réponse. :)

Avatar du membre
Mammouth du PHP | 1489 Messages

26 oct. 2012, 16:42

Bonjour,

tu a certainement une erreur:
function <?php echo $name_chart; ?>() {

var data = google.visualization.arrayToDataTable([

['Campagne', 'Durée d\'appel'],
['<?php while ($Camp = $requete->fetch(PDO::FETCH_ASSOC))
{ echo $Camp['Nom'] ; } ?>', 3],
function <?php echo $name_chart; ?>() { j'ai jamais vue de ce genre de function au passé

tu pourrai passer plus de code stp pour voir?

saian
Invité n'ayant pas de compte PHPfrance

26 oct. 2012, 18:05

A priori je dirai, normal. C'est le while qui ne va pas.
Il est inséré dans des apostrophes, donc en sortie tu vas avoir une chaine style :

['Campagne', 'Durée d\'appel'],
['nom_camp_1nom_camp_2_nom_camp_3etc', 3],

saian
Invité n'ayant pas de compte PHPfrance

26 oct. 2012, 18:09

PS : pour two3d

Code : Tout sélectionner

function <?php echo $name_chart; ?>() {
DarkEnd déclare ici une fonction javascript qui aura pour nom la valeur de la variable php $name_chart. En sorti il obtient :

Code : Tout sélectionner

function nom_du_graphique() { var data = google.visualization.arrayToDataTable([ ['Campagne', 'Durée d\'appel'], ['...', 3],

Avatar du membre
Mammouth du PHP | 1489 Messages

26 oct. 2012, 18:34

PS : pour two3d

Code : Tout sélectionner

function <?php echo $name_chart; ?>() {
DarkEnd déclare ici une fonction javascript qui aura pour nom la valeur de la variable php $name_chart. En sorti il obtient :

Code : Tout sélectionner

function nom_du_graphique() { var data = google.visualization.arrayToDataTable([ ['Campagne', 'Durée d\'appel'], ['...', 3],
Ok

une question pour DarkEnd:

il te faut 3 colonnes ?

si oui, fait comme ceci:
<?php
echo "function ".$name_chart."() {";
$nbr=0;
?>
var data = google.visualization.arrayToDataTable([

<?php while ($Camp = $requete->fetch(PDO::FETCH_ASSOC)) {
	$nbr++;
	echo "['Campagne', 'Durée d\'appel'],['".$Camp['Nom']."', ".$nbr."],";
} ?>]);

Eléphanteau du PHP | 32 Messages

30 oct. 2012, 11:01

Tout d'abord, merci de votre aide

Ensuite, j'ai essayé ton code mais cela ne m'affichait plus le graphique.
Donc j'explique peut être un petit peu mieux.

j'ai fait une requête qui me permet de récupéré le nom de toutes les campagnes.

Et j'aimerais affichait chaque nom de campagne sur chaque colonne

Voici tout mon body, donc tout le script pour le graphique.
Actuellement, ce code me retourne tous les noms des campagnes mais que sur une seule colonne.

Donc j'ai créé comme campagne par exemple:
-iPhone 3gs
-iPad
-iPhone 4
-iPhone 5

Ceci s'affiche à la ligne comme ceci: "iPhone 3gsiPadiPhone 4iPhone 5"

<body>
		<script type="text/javascript" src="https://www.google.com/jsapi"></script>
		<script type="text/javascript">
		google.load("visualization", "1", {packages:["corechart"]});
		google.setOnLoadCallback(<?php echo $name_chart; ?>);
		function <?php echo $name_chart; ?>() {
		
			var data = google.visualization.arrayToDataTable([	
		 
				['Campagne', 'Durée d\'appel'],
				['<?php while ($Camp = $requete->fetch(PDO::FETCH_ASSOC))
						{	 echo $Camp['Nom'] ; } ?>', 3],
		
		]); 
			var options = {
				title: 'Moyenne de durée d\'appel par campagne',
				hAxis: {title: 'Campagne', titleTextStyle: {color: 'blue'}}
			};

			var chart = new google.visualization.ColumnChart(document.getElementById('<?php echo $name_chart; ?>'));
			chart.draw(data, options);
		}
		</script>
			
		<div id="<?php echo $name_chart ?>" style="width: 900px; height: 500px;"></div>	
</body>
Voici une image du graphique:

Image

Avatar du membre
Mammouth du PHP | 1489 Messages

30 oct. 2012, 11:57

Je peut avoir plus d'info sur cette requête stp ?:

<?php while ($Camp = $requete->fetch(PDO::FETCH_ASSOC))
{ echo $Camp['Nom'] ; } ?>

- combien de ligne doit telle retournée ?

Aurai tu un graphique de base de chez Google pour voir comment faire ?

Avatar du membre
Mammouth du PHP | 1489 Messages

30 oct. 2012, 12:00

essaye ceci (c'est ton body avec mon code while):

<body>
<script type="text/javascript" src="https://www.google.com/jsapi"></script>
<script type="text/javascript">
google.load("visualization", "1", {packages:["corechart"]});
google.setOnLoadCallback(<?php echo $name_chart; ?>);
function <?php echo $name_chart; ?>() {

var data = google.visualization.arrayToDataTable([

<?php $nbr=0; while ($Camp = $requete->fetch(PDO::FETCH_ASSOC)) {
$nbr++;
echo "['Campagne', 'Durée d\'appel'],['".$Camp['Nom']."', ".$nbr."],";
} ?>]);

]);
var options = {
title: 'Moyenne de durée d\'appel par campagne',
hAxis: {title: 'Campagne', titleTextStyle: {color: 'blue'}}
};

var chart = new google.visualization.ColumnChart(document.getElementById('<?php echo $name_chart; ?>'));
chart.draw(data, options);
}
</script>

<div id="<?php echo $name_chart ?>" style="width: 900px; height: 500px;"></div>
</body>

Eléphanteau du PHP | 32 Messages

30 oct. 2012, 12:09

j'ai beau essayé ton code, juste en remplacement mon body par le tien mais ça n'a pas l'air de vouloir marcher.

le graphique ne s'affiche pas.

Voici ma requête


<?php 
			//requête : Moyenne durée d'appel par campagne
			$requete = $bdd->prepare("SELECT phonevent_commande.com_prixTotal as AVG, phonevent_campagne.cam_nom as Nom 
			FROM phonevent_commande, phonevent_campagne 
			WHERE phonevent_commande.cam_id=phonevent_campagne.cam_id");
			$requete->bindValue(':dateDebut', $_POST['datepicker3'], PDO::PARAM_STR);
			$requete->bindValue(':dateFin', $_POST['datepicker4'], PDO::PARAM_STR);
			$requete->execute();

			// Défini le nom de notre fonction JS et l'id du div HTML dans lequel se trouvera le graphique
			$name_chart = "result";
?>

Avatar du membre
Mammouth du PHP | 1489 Messages

30 oct. 2012, 12:12

pourrai tu me dire qu'est ce qu'affiche la requête ?:

<?php $nbr=0; while ($Camp = $requete->fetch(PDO::FETCH_ASSOC)) {
$nbr++;
echo "['Campagne', 'Durée d\'appel'],['".$Camp['Nom']."', ".$nbr."],";
} ?>

Eléphanteau du PHP | 32 Messages

30 oct. 2012, 12:21

ça m'affiche celà :
['Campagne', 'Durée d\'appel'],['iPhone 3gs', 1],['Campagne', 'Durée d\'appel'],['iPhone 4', 2],['Campagne', 'Durée d\'appel'],['iPhone 4', 3],['Campagne', 'Durée d\'appel'],['iPhone 5', 4],
Ceci pour le résultat de ton code php que tu m'as donné.

Mais je suis obligé de l'exclure de la balise script pour que ça s'affiche ...

Si tu as d'autres solutions je suis preneur.

Je précise que le graphique ne s'affichait pas avec ton code.

Merci en tout cas de ton aide.

Avatar du membre
Mammouth du PHP | 1489 Messages

30 oct. 2012, 12:26

essaye de mettre ce code donc (directement à la place du php):

['Campagne', 'Durée d\'appel'],['iPhone 3gs', 1],['Campagne', 'Durée d\'appel'],['iPhone 4', 2],['Campagne', 'Durée d\'appel'],['iPhone 4', 3],['Campagne', 'Durée d\'appel'],['iPhone 5', 4],

essaye avec et sans la virgule de la fin

Avatar du membre
Mammouth du PHP | 1489 Messages

30 oct. 2012, 12:42

voila, ceci devrai fonctionner( d'parès les tutos google:https://developers.google.com/chart/int ... odatatable ):

voila, ceci devrai fonctionner:

[javascript]var data = google.visualization.arrayToDataTable([
['Campagne', 'Durée d\'appel'],
<?php
$nbr=0;
$echo = "";
while ($Camp = $requete->fetch(PDO::FETCH_ASSOC)) {
$nbr++;
$echo .= "['".$Camp['Nom']."', ".$nbr."],";
}
echo substr($echo,0,-1); // on enlve la virgule de la fin
?>]);[/javascript]

Eléphanteau du PHP | 32 Messages

30 oct. 2012, 12:57

Bordel!!!! génial!!!


Merciiii

ça marche, merci bien, je suis content :)

Avatar du membre
Mammouth du PHP | 1489 Messages

30 oct. 2012, 13:23

avec plaisir, bonne continuation