Probleme de variable avec google charts
Résolu
mont_dani
Messages postés
232
Date d'inscription
Statut
Membre
Dernière intervention
-
mont_dani Messages postés 232 Date d'inscription Statut Membre Dernière intervention -
mont_dani Messages postés 232 Date d'inscription Statut Membre Dernière intervention -
Bonjour a tous
J ai le script suivant qui fonctionne très bien quand je renseigne la variable $mes_opcion = 03;
Mais quand je veux utiliser $mes_opcion = $_SESSION['mes']; j ai l'erruer suivante: Notice: Array to string conversion in C:\wamp\www\PW\LCDC\fr\new3.php on line 15 et Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in C:\wamp\www\PW\LCDC\fr\new3.php on line 21.
Merci pour votre aide.
voici le code
J ai le script suivant qui fonctionne très bien quand je renseigne la variable $mes_opcion = 03;
Mais quand je veux utiliser $mes_opcion = $_SESSION['mes']; j ai l'erruer suivante: Notice: Array to string conversion in C:\wamp\www\PW\LCDC\fr\new3.php on line 15 et Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in C:\wamp\www\PW\LCDC\fr\new3.php on line 21.
Merci pour votre aide.
voici le code
<?php //Démarrage des sessions session_start (); // Conectamos base de datos $conexion = mysql_connect('localhost', 'root', '') or die('No se pudo conectar: ' . mysql_error()); mysql_select_db('meteo_test_3') or die('No se pudo seleccionar la base de datos'); $_SESSION['mes'] = $_POST['mes']; $mes_opcion = $_SESSION['mes']; //$mes_opcion = 03; print_r(array_values($mes_opcion)); // donne Array ( [0] => 03 ) //preparamos la consulta $SQLDatos = "SELECT * FROM meteo WHERE MONTH(fecha) = $mes_opcion"; //ejecutamos la consulta $result = mysql_query($SQLDatos); //obtenemos número filas $numFilas = mysql_num_rows($result); //cargamos array con los nombres de las métricas a visualizar $datos[0] = array('lluvia','fecha'); //recorremos filas for ($i=1; $i<($numFilas+1); $i++) { $datos[$i] = array(mysql_result($result, $i-1, "fecha"), (int) mysql_result($result, $i-1, "lluvia")); } print_r(array_values($datos)); //donne ce resultat avec mes_opcion =03 ==> Array ( [0] => Array ( [0] => lluvia [1] => fecha ) [1] => Array ( [0] => 2017-03-14 [1] => 10 ) [2] => Array ( [0] => 2017-03-14 [1] => 40 ) [3] => Array ( [0] => 2017-03-15 [1] => 5 ) [4] => Array ( [0] => 2017-03-17 [1] => 5 ) [5] => Array ( [0] => 2017-03-30 [1] => 20 ) [6] => Array ( [0] => 2017-03-31 [1] => 91 ) ) mysql_close($conexion); ?> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" > </script> <!-- Load the AJAX API --> <script type="text/javascript" src="https://www.google.com/jsapi" > </script> <script type="text/javascript" src="https://www.google.com/jsapi?autoload={ 'modules':[{ 'name':'visualization', 'version':'1', 'packages':['corechart'] }] }"></script> <script type="text/javascript"> google.setOnLoadCallback(drawChart); function drawChart() { //cargamos nuestro array $datos creado en PHP para que se puede utilizar en JavaScript var cargaDatos = <?php echo json_encode($datos); ?>; var datosFinales = google.visualization.arrayToDataTable(cargaDatos); var options = { title: 'Ejemplo gráfica', curveType: 'function', legend: { position: 'bottom' } }; var chart = new google.visualization.LineChart(document.getElementById('curve_chart')); chart.draw(datosFinales, options); } </script> </head> <body> <div id="curve_chart" style="width: 900px; height: 500px"></div> </body> </html>
A voir également:
- Probleme de variable avec google charts
- Google maps satellite - Guide
- Dns google - Guide
- Google maps - Guide
- Google photo - Télécharger - Albums photo
- Créer un compte google - Guide
7 réponses
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
bonsoir, je suggère de remplacer
par
$_SESSION['mes'] = $_POST['mes']; $mes_opcion = $_SESSION['mes']; //$mes_opcion = 03; print_r(array_values($mes_opcion)); // donne Array ( [0] => 03 )
par
$mes_opcion = intval($_POST['mes']); print_r($mes_opcion);
Bonjour,
1 - On récupère PROPREMENT les variables avant de les utiliser
devient :
2 - Tu utilises l'ancienne extension mysql considérée comme OBSOLETE !
Je t'invite vivement à passer à PDO ou mysqli
3 - En attendant que tu passes à pdo ou mysqli ... pense à gérer les erreurs au niveau des requête...
par exemple :
4 - Pense à activer l'affichage des erreurs de code...
Il faut ajouter ces deux lignes au tout début de ton fichier php (juste après le <?php
Cordialement,
Jordane
1 - On récupère PROPREMENT les variables avant de les utiliser
$_SESSION['mes'] = $_POST['mes']; $mes_opcion = $_SESSION['mes'];
devient :
$mes = !empty($_POST['mes']) ? $_POST['mes'] : (!empty($_SESSION['mes']) ? $_SESSION['mes'] : NULL); $_SESSION['mes'] = $mes; //la valeur se trouve dans un array... // tu le dis toi même dans ton print_r //print_r(array_values($mes_opcion)); // donne Array ( [0] => 03 ) //il faut donc extraire la donnée de l'array ! $mes_opcion = !empty($mes) ? $mes[0] : NULL;
2 - Tu utilises l'ancienne extension mysql considérée comme OBSOLETE !
Je t'invite vivement à passer à PDO ou mysqli
3 - En attendant que tu passes à pdo ou mysqli ... pense à gérer les erreurs au niveau des requête...
par exemple :
$result = mysql_query($SQLDatos) or die(mysql_error());
4 - Pense à activer l'affichage des erreurs de code...
Il faut ajouter ces deux lignes au tout début de ton fichier php (juste après le <?php
//-------------------------------------// // Affichage des erreurs PHP //-------------------------------------// error_reporting(E_ALL); ini_set('display-errors','on');
Cordialement,
Jordane
Bonjour Jordane.
Merci pour ta réponse.
J'ai effectué quelques modifications.
Dans l'array retourné il manque la date(fecha).
voici le code modifié.
Merci pour ta réponse.
J'ai effectué quelques modifications.
Dans l'array retourné il manque la date(fecha).
voici le code modifié.
<?php //Démarrage des sessions session_start (); //Affichage des erreurs PHP error_reporting(E_ALL); ini_set('display-errors','on'); // REQUIRE require_once ('connexion.php'); //Récupération des variables AVANT de les utiliser $mes_opcion = !empty($_POST['mes']) ? $_POST['mes'] : (!empty($_SESSION['mes']) ? $_SESSION['mes'] : NULL); $_SESSION['mes'] = $mes_opcion ; print_r(array_values($mes_opcion)); // renvoi Array ( [0] => 03 ) ==> valeurs correctes //Traitement $sql = 'SELECT fecha, lluvia FROM meteo WHERE MONTH(fecha) = 03 '; $datas = array($mes_opcion[0]); try{ $req = $connexion->prepare($sql); $req->execute($datas); $row = $req->fetchAll(PDO::FETCH_ASSOC); //on stocke les données dans un ARRAY }catch(Exception $e){ echo "Erreur ! ".$e->getMessage(); } $datos_lluvia = array(); if(!empty($row)){ //On parcours l'array foreach($row as $R) { $datos_lluvia[] = (float)$R['lluvia']; } }else{ echo " La requête n'a pas retournée de données.... "; } print_r(array_values($datos_lluvia)); // renvoi Array ( [0] => 10 [1] => 40 [2] => 5 [3] => 5 [4] => 20 [5] => 91 ) ==> valeurs correctes mais il manque la date $req->closeCursor(); ?> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" > </script> <!-- Load the AJAX API --> <script type="text/javascript" src="https://www.google.com/jsapi" > </script> <script type="text/javascript" src="https://www.google.com/jsapi?autoload={ 'modules':[{ 'name':'visualization', 'version':'1', 'packages':['corechart'] }] }"></script> <script type="text/javascript"> google.setOnLoadCallback(drawChart); function drawChart() { //cargamos nuestro array $datos_lluvia creado en PHP para que se puede utilizar en JavaScript var cargaDatos = <?php echo json_encode($datos_lluvia); ?>; var datosFinales = google.visualization.arrayToDataTable(cargaDatos); var options = { title: 'Precipitacion', curveType: 'function', legend: { position: 'bottom' } }; var chart = new google.visualization.LineChart(document.getElementById('curve_chart')); chart.draw(datosFinales, options); } </script> </head> <body> <div id="curve_chart" style="width: 900px; height: 500px"></div> </body> </html>
Nonn. Le graphique ne s'affiche pas
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
effectivement, console.log(cargaDatos); ne renvoi rien.
J ai mis ta partie de code juste avant $req->closeCursor();
ca m'affiche
datos_lluvia :
Array
(
[0] => 10
[1] => 40
[2] => 5
[3] => 5
[4] => 20
[5] => 91
)
en Json => [10,40,5,5,20,91]
ca m'affiche
datos_lluvia :
Array
(
[0] => 10
[1] => 40
[2] => 5
[3] => 5
[4] => 20
[5] => 91
)
en Json => [10,40,5,5,20,91]
Non console.log(cargaDatos); placé juste après la déclaration de la variable ne donne rien.
//cargamos nuestro array $datos_lluvia creado en PHP para que se puede utilizar en JavaScript var cargaDatos = <?php echo json_encode($datos_lluvia); ?>; console.log(cargaDatos); var datosFinales = google.visualization.arrayToDataTable(cargaDatos);
//cargamos nuestro array $datos_lluvia creado en PHP para que se puede utilizar en JavaScript var cargaDatos = <?php echo json_encode($datos_lluvia); ?>; console.log( " cargaDatos : " ); console.log(cargaDatos); var datosFinales = google.visualization.arrayToDataTable(cargaDatos);
et comme ça ? Tu vois quelque chose ou non ? Tu n'as pas messages d'erreurs dans la console ?
C est pareil.
Excuse moi parceque tu me l'avait dit dans le mesage precedent et je ne l'avait pas regardé.
En faisant F12, j ai cela:
jsapi:22 A Parser-blocking, cross site (i.e. different eTLD+1) script, https://www.google.com/uds/api/visualization/1.0/40ff64b1d9d6b3213524485974f36cc0/format+es,default+es,ui+es,corechart+es.I.js is invoked via document.write. The network request for this script MAY be blocked by the browser in this or a future page load due to poor network connectivity. If blocked in this page load, it will be confirmed in a subsequent console message.See https://www.chromestatus.com/feature/5718547946799104 for more details.
new3.php:52 Array(6)
new3.php:53 cargaDatos :
Uncaught Error: First row is not an array.
at gvjs_oba (format+es,default+es,ui+es,corechart+es.I.js:272)
at Object.gvjs_Cl [as arrayToDataTable] (format+es,default+es,ui+es,corechart+es.I.js:274)
at drawChart (new3.php:54)
Excuse moi parceque tu me l'avait dit dans le mesage precedent et je ne l'avait pas regardé.
En faisant F12, j ai cela:
jsapi:22 A Parser-blocking, cross site (i.e. different eTLD+1) script, https://www.google.com/uds/api/visualization/1.0/40ff64b1d9d6b3213524485974f36cc0/format+es,default+es,ui+es,corechart+es.I.js is invoked via document.write. The network request for this script MAY be blocked by the browser in this or a future page load due to poor network connectivity. If blocked in this page load, it will be confirmed in a subsequent console message.See https://www.chromestatus.com/feature/5718547946799104 for more details.
new3.php:52 Array(6)
new3.php:53 cargaDatos :
Uncaught Error: First row is not an array.
at gvjs_oba (format+es,default+es,ui+es,corechart+es.I.js:272)
at Object.gvjs_Cl [as arrayToDataTable] (format+es,default+es,ui+es,corechart+es.I.js:274)
at drawChart (new3.php:54)
Bonjour,
J'ai trouvé le souci je pense....
Tu as placé l'initialisation de ta variable dans ta fonction ....
Essayes de la placer en dehors...
Peux-tu également t'assurer que ton fichier est bien encodé en utf8 sans bom ( voir chapitre 1 : https://forums.commentcamarche.net/forum/affich-37584944-php-html-caracteres-accentues-et-l-utf8 )
J'ai trouvé le souci je pense....
Tu as placé l'initialisation de ta variable dans ta fonction ....
Essayes de la placer en dehors...
<?php //Démarrage des sessions session_start (); //Affichage des erreurs PHP error_reporting(E_ALL); ini_set('display-errors','on'); // REQUIRE require_once ('connexion.php'); //Récupération des variables AVANT de les utiliser $mes_opcion = !empty($_POST['mes']) ? $_POST['mes'] : (!empty($_SESSION['mes']) ? $_SESSION['mes'] : NULL); $_SESSION['mes'] = $mes_opcion ; print_r(array_values($mes_opcion)); //Traitement $sql = 'SELECT fecha, lluvia FROM meteo WHERE MONTH(fecha) = ? '; $datas = array($mes_opcion[0]); try{ $req = $connexion->prepare($sql); $req->execute($datas); $row = $req->fetchAll(PDO::FETCH_ASSOC); //on stocke les données dans un ARRAY }catch(Exception $e){ echo "Erreur ! ".$e->getMessage(); } $datos_lluvia = array(); if(!empty($row)){ //On parcours l'array foreach($row as $R) { $datos_lluvia[] = (float)$R['lluvia']; } }else{ echo " La requête n'a pas retournée de données.... "; } print_r(array_values($datos_lluvia)); echo "<pre>datos_lluvia :<br>"; print_r($datos_lluvia); echo " en Json => " . json_encode($datos_lluvia); echo "</pre>"; $req->closeCursor(); ?> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" > </script> <!-- Load the AJAX API --> <script type="text/javascript" src="https://www.google.com/jsapi" > </script> <script type="text/javascript" src="https://www.google.com/jsapi?autoload={ 'modules':[{ 'name':'visualization', 'version':'1', 'packages':['corechart'] }] }"></script> <script type="text/javascript"> var cargaDatos = <?php echo json_encode($datos_lluvia); ?>; console.log(cargaDatos); console.log( " cargaDatos : " ); google.setOnLoadCallback(drawChart); function drawChart() { var datosFinales = google.visualization.arrayToDataTable(cargaDatos); var options = { title: 'Precipitacion', curveType: 'function', legend: { position: 'bottom' } }; var chart = new google.visualization.LineChart(document.getElementById('curve_chart')); chart.draw(datosFinales, options); } </script> </head> <body> <div id="curve_chart" style="width: 900px; height: 500px"></div> </body> </html>
Peux-tu également t'assurer que ton fichier est bien encodé en utf8 sans bom ( voir chapitre 1 : https://forums.commentcamarche.net/forum/affich-37584944-php-html-caracteres-accentues-et-l-utf8 )
Merci pour ton aide.
J'ai trouvé le souci je pense....
Tu as placé l'initialisation de ta variable dans ta fonction ....
Essayes de la placer en dehors...
Cela ne change rien. même message en console.
Peux-tu également t'assurer que ton fichier est bien encodé en utf8 sans bom
Je te confirme que mon fichier est bien en utf8.
Sinon tu peux aussi essayer avec cette syntaxe
var cargaDatos ="<?php print(json_encode($datos_lluvia)); ?>";
Cela ne change rien. même message en console.
J'ai passé la journée a fiare des recherches et essais, mais en vain.
Aurais-tu une autre idée?
J'ai trouvé le souci je pense....
Tu as placé l'initialisation de ta variable dans ta fonction ....
Essayes de la placer en dehors...
Cela ne change rien. même message en console.
Peux-tu également t'assurer que ton fichier est bien encodé en utf8 sans bom
Je te confirme que mon fichier est bien en utf8.
Sinon tu peux aussi essayer avec cette syntaxe
var cargaDatos ="<?php print(json_encode($datos_lluvia)); ?>";
Cela ne change rien. même message en console.
J'ai passé la journée a fiare des recherches et essais, mais en vain.
Aurais-tu une autre idée?
Première chose :
pourrais tu tester ce script et me dire ce que ça te donne ?
Deuxième chose .... place ton code javascript à la fin de ta page (avant le </body>) et non dans le head....
pourrais tu tester ce script et me dire ce que ça te donne ?
<?php $datos_lluvia = array(); foreach($R=1;$R<=10;$R++) { $datos_lluvia[] = $R * 10; } ?> <!doctype html> <html lang="<?=$langDefaut?>"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> </head> <body> <script type="text/javascript"> var datos_lluvia = <?php echo json_encode($datos_lluvia); ?>; console.log("datos_lluvia :"); console.log(datos_lluvia); </script> </body> </html>
Deuxième chose .... place ton code javascript à la fin de ta page (avant le </body>) et non dans le head....
ah.. et puis... au lieu d'aller charger les librairies javascript sur le site de google... je te conseille de tes télécharger dans ton site et de les instancier directement...
donc au lieu d'avoir :
Tu place le contenus des scripts en "local" sur ton serveur.. et tu modifies les lignes de code pour pointer dessus
donc au lieu d'avoir :
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" > </script> <!-- Load the AJAX API --> <script type="text/javascript" src="https://www.google.com/jsapi" > </script>
Tu place le contenus des scripts en "local" sur ton serveur.. et tu modifies les lignes de code pour pointer dessus
<script src="chemin_vers_le_fichier/jquery.min.js" > </script> <!-- Load the AJAX API --> <script type="text/javascript" src="chemin_vers_le_fichier/jsapi" > </script>