Foros del Web » Programando para Internet » Jquery »

[SOLUCIONADO] jquery flot y Mysql

Estas en el tema de jquery flot y Mysql en el foro de Jquery en Foros del Web. Buenas tengo un pequeño problema que no he podido solucionar. he encontrado una libreria para hacer unas graficas dinamcas sencillas y lo que he visto ...
  #1 (permalink)  
Antiguo 13/03/2013, 12:52
 
Fecha de Ingreso: enero-2013
Mensajes: 9
Antigüedad: 11 años, 10 meses
Puntos: 1
jquery flot y Mysql

Buenas tengo un pequeño problema que no he podido solucionar.

he encontrado una libreria para hacer unas graficas dinamcas sencillas y lo que he visto del codigo no es muy complicado trabajarlas estan en javascript, el problema es que tengo que hacer una consulta a una bd de mysql pero no he podido

adjunto codigo.

donde la funcion realiza el numero al azar, debo hacer que tome un dato de la bd a la que estoy apuntando. no se como hacerlo..

lo que esta en rojo es un ejemplo que supuestamente funcionaba y que esta dentro de un ejemplo que encontre navegando..

gracias

Cita:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Flot Examples</title>
<link href="layout.css" rel="stylesheet" type="text/css">
<!--[if lte IE 8]><script language="javascript" type="text/javascript" src="../excanvas.min.js"></script><![endif]-->
<script language="javascript" type="text/javascript" src="../jquery.js"></script>
<script language="javascript" type="text/javascript" src="../jquery.flot.js"></script>
</head>
<body>
<h1>Flot Examples</h1>

<div id="placeholder" style="width:600px;height:300px;"></div>
<?php

$server = "localhost";
$user="root";
$password="";
$database = "monitoreo";

$connection = mysql_connect($server,$user,$password);
$db = mysql_select_db($database,$connection);

query = "SELECT Temperatura FROM gy01 ORDER BY `id` DESC LIMIT 1";
$result = mysql_query($query);

$dataset1[] = $result;


?>



<p>You can update a chart periodically to get a real-time effect
by using a timer to insert the new data in the plot and redraw it.</p>

<p>Time between updates: <input id="updateInterval" type="text" value="" style="text-align: right; width:5em"> milliseconds</p>



<script type="text/javascript">
$(function () {

var dataset1 = <?php echo json_encode($dataset1); ?>;
// we use an inline data source in the example, usually data would
// be fetched from a server
var data = [], totalPoints = 300;
function getRandomData() {
if (data.length > 0)
data = data.slice(1);

// do a random walk
while (data.length < totalPoints) {
var prev = data.length > 0 ? data[data.length - 1] : 50;
var y = prev + Math.random() * 10-5;
var yw = 50;

if (y < 0)
y = 0;
if (y > 100)
y = 100;
data.push(y);


}

// zip the generated y values with the x values
var res = [];
for (var i = 0; i < data.length; ++i)
res.push([i, data[i]])
return res;
}

// setup control widget
var updateInterval = 30;
$("#updateInterval").val(updateInterval).change(fu nction () {
var v = $(this).val();
if (v && !isNaN(+v)) {
updateInterval = +v;
if (updateInterval < 1)
updateInterval = 1;
if (updateInterval > 2000)
updateInterval = 2000;
$(this).val("" + updateInterval);
}
});

// setup plot
var options = {
series: { shadowSize: 0 }, // drawing is faster without shadows
yaxis: { min: 0, max: 100 },
xaxis: { show: false }
};
function euroFormatter(v, axis) {
return v.toFixed(axis.tickDecimals) +"€";
}

var y2= [80,80];
var plot = $.plot($("#placeholder"), [{data:getRandomData(),label:"aleatorio"},{data:80, label:"Constante 80"}],
{
xaxes: [ { mode: 'time' } ],
yaxes: [ { min: 0 }],
legend: { position: 'sw' }
}, options);

function update() {
plot.setData([ getRandomData(),80]);
// since the axes don't change, we don't need to call plot.setupGrid()
plot.draw();

setTimeout(update, updateInterval);
}

update();
});
</script>

</body>
</html>
  #2 (permalink)  
Antiguo 13/03/2013, 13:25
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 20 años, 2 meses
Puntos: 454
Respuesta: jquery flot y Mysql

Hola:

Por lo que veo del código, da la impresión de que la gráfica se va moviendo ¿desplazándose hacia la izquierda? de forma que se van perdiendo puntos por un lado y mostrándose puntos nuevos por el otro.

Si es así, ¿En tu base de datos están TODOS los datos en el momento de consultarlos o van a ir insertándose nuevos y son los que quieres que vayan apareciendo por el lateral de la gráfica?

Si es el primer caso, no hay puntos que vayan a salir nuevos, no sé si tiene mucho sentido el desplazamiento, salvo que sea para "jugar". En tu línea

Código Javascript:
Ver original
  1. var dataset1 = <?php echo json_encode($dataset1); ?>;

no guardes los datos en json (sólo sirve para complicarse la vida), mételos directamente como array de javascript. Tendráis que hacer un

Código Javascript:
Ver original
  1. var datast1 = <?php echo '['.   bucle para valores serparados por comas .'];'?>

Luego en getRandom() "sólo" deberías llevar un indice de qué datos de ese array ya has ido usando para meter el siguiente cada vez.

Si es el segundo caso, en la base de datos van a seguir insertándose datos, no te queda más remedio que usar algo de AJAX para obtener los datos nuevos, ya que la línea de antes sólo se ejecuta y mostrará los datos que haya cuando se ejecuta el código PHP al cargar la página, nunca se actualizará con nuevos datos.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #3 (permalink)  
Antiguo 13/03/2013, 14:11
 
Fecha de Ingreso: enero-2013
Mensajes: 9
Antigüedad: 11 años, 10 meses
Puntos: 1
Respuesta: jquery flot y Mysql

Gracias por la respuesta. en este instante estoy tratando de hacer algo con ajax. ya te pongo el codigo..

Cita:
function getRandomData() {
if (data.length > 0)
data = data.slice(1);

// do a random walk
while (data.length < totalPoints) {
$.ajax({
url:'consultabd.php',
data: "",
dataType: 'json',
success: function(data){
var x = data[0];
}

});

var prev = data.length > 0 ? data[data.length - 1] : 50;
var y2 = prev + Math.random() * 10-5;

var y = 50;

if (y < 0)
y = 0;
if (y > 100)
y = 100;

data.push(y);


}

el archivo consultabd.php es uno que cree que consulta un solo registro y en ese caso es el ultimo registro que fue insertado. a esa base le entra +o- un dato cada segundo. y para visualizar no importa que se pierdan los anteriores yo uso otra grafica para otro tipo de consulta.

lo que esta en rojo es el codigo ajax. no se si esta bien. lo azul es solo codigo del ejemplo que luego quitare. y lo morado es el valor que hace la consulta php. pero no se como llevarlo al "data.push(XX);"

no he implementado lo de no usar JSON. ya tambien me pongo en eso
  #4 (permalink)  
Antiguo 13/03/2013, 15:00
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 20 años, 2 meses
Puntos: 454
Respuesta: jquery flot y Mysql

Hola:

Para la respuesta incial no necesitas JSON, pero para AJAX sí.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #5 (permalink)  
Antiguo 14/03/2013, 08:00
 
Fecha de Ingreso: enero-2013
Mensajes: 9
Antigüedad: 11 años, 10 meses
Puntos: 1
Respuesta: jquery flot y Mysql

Una pregunta. como paso el valor recogido desde ajax a javascript. no se como hacerlo.

gracias..
  #6 (permalink)  
Antiguo 14/03/2013, 09:22
 
Fecha de Ingreso: enero-2013
Mensajes: 9
Antigüedad: 11 años, 10 meses
Puntos: 1
Respuesta: jquery flot y Mysql

Buenas sigo con el problema no se por que no funciona el ajax pongo el codigo

Cita:
function getRandomData() {
var consulta="";
if (data.length > 0)
data = data.slice(1);

// do a random walk
while (data.length < totalPoints) {
$.ajax({
type : 'GET',
url:'consultabd.php',
data: "",
dataType: 'json',
success: function(data){
var x = data[0];
alert(x);
consulta=x;
}
});
var y = 50;
data.push(y);
alert(consulta);
}
No se por que no realiza la consulta, no me muestra ningun dato. cabe decir que el archivo .php creo que esta bien pongo el codigo por si estoy en algun error

Cita:
<?php
//Configuracion de la conexion a base de datos
$bd_host2 = "localhost";
$bd_usuario2 = "root";
$bd_password2 = "";
$bd_base2 = "monitoreo";

$con2 = mysql_connect($bd_host2, $bd_usuario2, $bd_password2);

mysql_select_db($bd_base2, $con2);



$query=mysql_query("SELECT Temperatura FROM gy01_rt",$con2) ;

echo json_encode($query);

?>
en este instante solo hay un dato en el campo temperatura, para las pruebas. a esta tabla le iran llegando datos cada segundo y cambiare la consulta por una que tome el ultimo registro que entro.
  #7 (permalink)  
Antiguo 14/03/2013, 09:26
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 20 años, 2 meses
Puntos: 454
Respuesta: jquery flot y Mysql

En el código de tu mensaje anterior lo tienes hecho

Código Javascript:
Ver original
  1. success: function(data){
  2. var x = data[0];
  3. }

Solo necesitas que tu php envie como respuesta un json correcto que represente un array de datos.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #8 (permalink)  
Antiguo 14/03/2013, 09:45
 
Fecha de Ingreso: enero-2013
Mensajes: 9
Antigüedad: 11 años, 10 meses
Puntos: 1
Respuesta: jquery flot y Mysql

sera algo como esto

Cita:
$arraytemp=array;
$arraytemp=$query;
echo json_encode($arraytemp);
donde query es la consulta realizada
  #9 (permalink)  
Antiguo 14/03/2013, 10:37
 
Fecha de Ingreso: enero-2013
Mensajes: 9
Antigüedad: 11 años, 10 meses
Puntos: 1
Respuesta: jquery flot y Mysql

Siguiendo con el tema, realice una smodificaciones al codigo php de consulta estos son los cambios deacuerdo a lo que entendi que habia que sacar el dato del identificador y llevarlo a un array.

Cita:
$resultado=mysql_query("SELECT Temperatura FROM gy01_rt",$con2) ;

while ($fila = mysql_fetch_array($resultado, MYSQL_NUM)) {
//printf ($fila[0]);
echo json_encode($fila);
}

mysql_free_result($resultado);

pero no he podido que desde el ajax me tome ese valor. no se que estoy haciendo mal..

Cita:
var data = [], totalPoints = 300;
function getData() {
var x="";
if (data.length > 0)
data = data.slice(1);

// do a random walk
while (data.length < totalPoints) {
$.ajax({
type : 'GET',
url:'consultabd.php',
data: "",
dataType: 'json',
success: function(data){
var x = data[0];


}
});

data.push(x);

}
la variable consulta nunca toma el valor que realiza el archivo *.php
  #10 (permalink)  
Antiguo 14/03/2013, 13:31
 
Fecha de Ingreso: enero-2013
Mensajes: 9
Antigüedad: 11 años, 10 meses
Puntos: 1
Respuesta: jquery flot y Mysql

Muchas gracias por la ayuda prestada. logre solucionar el problema. me hacia falta poner si el ajax era asíncrono o no. pongo el código del ajax demostrando la solucion.


De nuevo muchas gracias
Cita:
function getData() {

var x="";

if (data.length > 0)
data = data.slice(1);

// do a random walk
while (data.length < totalPoints) {
$.ajax({
type:'GET',
url:'consultabd.php',
data: "",
dataType: 'json',
async:false,
success: function(dato){
x = dato[0];


}
});
var y = 50;
//alert (consulta);

data.push(x);

}
.


ahh y el código de la consulta de db es el siguiente, solo hace falta modificar lo para que realice la consulta del ultimo registro insertado y con esto tendremos una gráfica dinámica sencilla para efectos de visualización mas no para análisis.

Cita:
?php
//Configuracion de la conexion a base de datos
$bd_host2 = "localhost";
$bd_usuario2 = "root";
$bd_password2 = "";
$bd_base2 = "monitoreo";

$con2 = mysql_connect($bd_host2, $bd_usuario2, $bd_password2);

mysql_select_db($bd_base2, $con2);




$resultado=mysql_query("SELECT Temperatura FROM gy01_rt",$con2) ;

while ($fila = mysql_fetch_array($resultado, MYSQL_NUM)) {
//printf ($fila[0]);
echo json_encode($fila);
}

mysql_free_result($resultado);

?>

Etiquetas: funcion, html, input, javascript, js, mysql, php, select
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:23.