Probleme de variable avec google charts

Résolu/Fermé
mont_dani Messages postés 229 Date d'inscription mardi 6 juin 2017 Statut Membre Dernière intervention 10 février 2024 - 21 juin 2017 à 21:20
mont_dani Messages postés 229 Date d'inscription mardi 6 juin 2017 Statut Membre Dernière intervention 10 février 2024 - 26 juin 2017 à 07:49
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 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
21 juin 2017 à 21:36
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 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
Modifié le 21 juin 2017 à 21:41
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 229 Date d'inscription mardi 6 juin 2017 Statut Membre Dernière intervention 10 février 2024
22 juin 2017 à 10:57
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 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
22 juin 2017 à 11:56
Donc c'est bon ??
Tu mettras le sujet en RESOLU dans ce cas.
0
mont_dani Messages postés 229 Date d'inscription mardi 6 juin 2017 Statut Membre Dernière intervention 10 février 2024
22 juin 2017 à 13:25
Nonn. Le graphique ne s'affiche pas
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
22 juin 2017 à 13:54
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 229 Date d'inscription mardi 6 juin 2017 Statut Membre Dernière intervention 10 février 2024
22 juin 2017 à 14:50
effectivement, console.log(cargaDatos); ne renvoi rien.
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
22 juin 2017 à 15:38
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 229 Date d'inscription mardi 6 juin 2017 Statut Membre Dernière intervention 10 février 2024
22 juin 2017 à 18:03
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 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
22 juin 2017 à 18:35
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 229 Date d'inscription mardi 6 juin 2017 Statut Membre Dernière intervention 10 février 2024 > jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024
23 juin 2017 à 07:38
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 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650 > mont_dani Messages postés 229 Date d'inscription mardi 6 juin 2017 Statut Membre Dernière intervention 10 février 2024
23 juin 2017 à 10:19
//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 229 Date d'inscription mardi 6 juin 2017 Statut Membre Dernière intervention 10 février 2024 > jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024
23 juin 2017 à 10:53
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 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
23 juin 2017 à 16:38
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 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
23 juin 2017 à 16:42
Sinon tu peux aussi essayer avec cette syntaxe
var cargaDatos ="<?php print(json_encode($datos_lluvia)); ?>";

0
mont_dani Messages postés 229 Date d'inscription mardi 6 juin 2017 Statut Membre Dernière intervention 10 février 2024 > jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024
23 juin 2017 à 18:27
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 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
23 juin 2017 à 18:32
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 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650 > jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024
Modifié le 23 juin 2017 à 21:27
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 229 Date d'inscription mardi 6 juin 2017 Statut Membre Dernière intervention 10 février 2024 > jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024
23 juin 2017 à 18:46
premièrec chose
erreur en ligne 4
0