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   -
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

<?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:

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
$_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);
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Bonjour,

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                                                                 
0
mont_dani Messages postés 232 Date d'inscription   Statut Membre Dernière intervention  
 
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é.

<?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>
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Donc c'est bon ??
Tu mettras le sujet en RESOLU dans ce cas.
0
mont_dani Messages postés 232 Date d'inscription   Statut Membre Dernière intervention  
 
Nonn. Le graphique ne s'affiche pas
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Mais là c'est peut-être bien un souci côté javascript ....
As tu regardé dans la console si tu n'avais pas de message d'erreur ???
As tu regardé (via un console.log) ce que vaut ta variable cargaDatos dans ton code js ?
As tu regardé (via un console.log) ce que vaut ta variable datosFinales ?
0

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

Posez votre question
mont_dani Messages postés 232 Date d'inscription   Statut Membre Dernière intervention  
 
effectivement, console.log(cargaDatos); ne renvoi rien.
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
et , si dans ton code, avant le javascript tu ajoutes
 
echo "<pre>datos_lluvia :<br>";
print_r($datos_lluvia);
echo " en Json => " . json_encode($datos_lluvia);
echo "</pre>";


Qu'est-ce que ça t'affiche ?
0
mont_dani Messages postés 232 Date d'inscription   Statut Membre Dernière intervention  
 
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]
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Et le
console.log(cargaDatos);
placé juste après la déclaration de la variable dans ton js ne donne rien ??
0
mont_dani Messages postés 232 Date d'inscription   Statut Membre Dernière intervention   > jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention  
 
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);
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752 > mont_dani Messages postés 232 Date d'inscription   Statut Membre Dernière intervention  
 
//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 ?
0
mont_dani Messages postés 232 Date d'inscription   Statut Membre Dernière intervention   > jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention  
 
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)
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
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...
 <?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 )
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Sinon tu peux aussi essayer avec cette syntaxe
var cargaDatos ="<?php print(json_encode($datos_lluvia)); ?>";

0
mont_dani Messages postés 232 Date d'inscription   Statut Membre Dernière intervention   > jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention  
 
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?
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Première chose :
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....
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752 > jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention  
 
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 :
<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>
0
mont_dani Messages postés 232 Date d'inscription   Statut Membre Dernière intervention   > jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention  
 
premièrec chose
erreur en ligne 4
0