Nueva pregunta

Pregunta:

Fecha: 03-11-2016 22:20:49 (En Español)

Promediar datos cada 24 hs[Resuelta]

Hola nuevamente... quisiera me ayuden ya que no se me cae ninguna idea como leer la fecha timestamp. Necesito promediar los datos del tiempo por día desde 00:00hs hasta 23:59 hs, desde ya gracias.


<p>
<table border="1" cellspacing=1 cellpadding=2 style="font-size: 8pt">
</p><tr> </tr>
<table width="946" border="1">
  <tr>
    <td width="276">&nbsp;</td>
    <td width="330">PROMEDIOS PRONOSTICO CADA 1 HORA</td>
    <td width="318">&nbsp;</td>
  </tr>
</table>
<p>&nbsp;</p>
<table width="" border="1" cellpadding=2 cellspacing=1 style="font-size: 10pt" align="center"><tr>
<td ><font face="verdana"><b>Id</b></font></td>
<td ><font face="verdana"><b>Dirección del viento</b></font></td>
<td  align="center" valign="middle"><font face="verdana"><b>Velocidad del viento</b></font></td>
<td ><font face="verdana"><b>Temperatura</b></font></td>
<td ><font face="verdana"><b>Lluvia</b></font></td>
<td ><font face="verdana"><b>Presion</b></font></td>
<td ><font face="verdana"><b>Humedad</b></font></td>
<td ><font face="verdana"><b>Fecha y Hora</b></font></td>
</tr>

<?php  
  //enlace a BD
    $enlace = mysqli_connect("127.0.0.1","root","", "sensores");

if (!$enlace) {
    echo "Error: No se pudo conectar a MySQL." . PHP_EOL;
    echo "errno de depuración: " . mysqli_connect_errno() . PHP_EOL;
    echo "error de depuración: " . mysqli_connect_error() . PHP_EOL;
    exit;
}

  $result = mysqli_query($enlace, "SELECT *  from valores ORDER BY fecha desc");
  $numero = 0;
  while($row = mysqli_fetch_array($result)){
    echo "<tr><td><font face=\"verdana\">" . 
	    $row["id"] . "</font></td>";
    echo "<td><font face=\"verdana\">" . 
	    $row["WindDirection"] . "</font></td>";
    echo "<td><font face=\"verdana\">" . 
	    $row["WindSpeedAverage"] . "</font></td>";
	echo "<td><font face=\"verdana\">" . 
	    $row["Temperature"] . "</font></td>";
	echo "<td><font face=\"verdana\">" . 
	    $row["RainfallOneHour"] . "</font></td>";
	echo "<td><font face=\"verdana\">" . 
	    $row["BarPressure"] . "</font></td>";
	echo "<td><font face=\"verdana\">" . 
	    $row["Humidity"] . "</font></td>";
    echo "<td><font face=\"verdana\">" . 
	    $row["fecha"]. "</font></td></tr>";    
    $numero++;
  }
  echo "<tr><td colspan=\"15\"><font face=\"verdana\"><b>Cantidad de Registros: " . $numero . 
      "</b></font></td></tr>";
  
  mysqli_free_result($result);
  mysqli_close($enlace);
?>
</table>
Etiquetas: MySQL - PHP - Pregunta - Timestamp Votos: 3 - Respuestas: 30 - Vistas: 15 Compartir en: Google Facebook Twitter LinkedIn Link
 

Respuestas:

  • Fecha: 04-11-2016 10:29:50 Lo de promediar los datos cada 24 horas puedes usar el setinterval de Jquery.   Votos: 1 - Link respuesta
     
  • Fecha: 05-11-2016 05:28:42 gracias!! lo pruebo y comento   Votos: 1 - Link respuesta
     
  • Fecha: 05-11-2016 05:54:41 Hola Anabel, podrías darnos un ejemplo de a que te refieres con "...promediar los datos del tiempo por día desde 00:00hs hasta 23:59 hs...", me refiero a un ejemplo conceptual (sin hablar de código) para entender bien la pregunta y lo que estas necesitando, y así poder ayudarte.

    Quedo al aguardo de más detalle, saludos!
      Votos: 2 - Link respuesta
     
  • Fecha: 05-11-2016 07:33:11 Adivinando porque no se entiende bien la idea.
    Hago inferencia por lo que entendi en la pregunta y el codigo expuesto. Solo me centrare en la consulta SQL

    Creo que lo que pide es filtrar de la columna fecha tomar todas los valores de hora que este comprendido en un dia dado ejemplo 2016-10:28 hora 00:00:00 hasta 2016-10:28 hora 23:59:59
    Suponiendo que ese resultado obtenido de (2016-10:28 00:00:00 al 2016-10:28 23:59:59) arrojó 10 registros
    Promediar por ejemplo la columna BarPressure : Sumar los valores de BarPressure dividirlo por 10 (cantidad de registros devueltos)

    Para obtener datos entre fechas es utilizar el operador de comparación BETWEEN.
    Por ejemplo si queremos ver los datos entre dos fechas lo haremos de la siguiente manera.
    En este ejemplo la fecha mas baja es ‘fechaMin’ y la alta ‘fechaMax’, y hay que tener en cuenta que todos los argumentos tienen que ser del mismo tipo.
    SELECT * FROM `miTabla` WHERE `miCampoFecha` BETWEEN 'fechaMin'  AND 'fechaMax';

    Si el valor de `micampoFecha` es mayor o igual que ‘fechaMin’ y menor o igual que ‘fechaMax’ ‘BETWEEN’ devolvera 1 si no devolvera 0. Esto es lo mismo que hacer lo siguiente.
    SELECT * FROM `miTabla` WHERE ('fechaMin' <= `miCampoFecha` AND `miCampoFecha` <= 'fechaMax');


    Codigo original de Anabel:
     $result = mysqli_query($enlace, "SELECT *  from valores ORDER BY fecha desc");


    Para obtener los datos entre fechas, que sea del mismo dia deberia ser algo como

     $result = mysqli_query($enlace, "SELECT * FROM valores  WHERE fecha  BETWEEN '2016-10-28 00:00:00' AND '2016-10-28 23:59:59';");


    Hasta allí obtenemos los registros comprendido entre una fecha.

    De ese resultado solo nos queda promediar por una columna dada.

    La función AGV() retorna el valor promedio de los valores del campo especificado. Por ejemplo, queremos saber el promedio de la columna BarPressure

     $result = mysqli_query($enlace, "SELECT AVG(BarPressure) FROM valores  WHERE fecha  BETWEEN '2016-10-28 00:00:00' AND '2016-10-28 23:59:59';");


    Si queremos darle un Alias al promedio de BarPressure llamado Promedio_BarPressure
     $result = mysqli_query($enlace, "SELECT AVG(BarPressure) AS  Promedio_BarPressure FROM valores  WHERE fecha  BETWEEN '2016-10-28 00:00:00' AND '2016-10-28 23:59:59';");


    De esa manera obtendremos el promedio de BarPressure que este comprendido entre 2016-10:28 00:00:00 al 2016-10:28 23:59:59

    Si queremos agregar a la consulta un promedio mas de otra tabla por ejemplo WindSpeedAverage

     $result = mysqli_query($enlace, "SELECT AVG(BarPressure), AVG(WindSpeedAverage) FROM valores  WHERE fecha  BETWEEN '2016-10-28 00:00:00' AND '2016-10-28 23:59:59';");


    Si queremos darle un Alias al promedio de WindSpeedAverage llamado Promedio_WindSpeedAverage
     $result = mysqli_query($enlace, "SELECT AVG(BarPressure) AS  Promedio_BarPressure, AVG(WindSpeedAverage) AS Promedio_WindSpeedAverage FROM valores  WHERE fecha  BETWEEN '2016-10-28 00:00:00' AND '2016-10-28 23:59:59';");


    Allí obtenemos los promedios de BarPressure y WindSpeedAverage entre la fecha dada.

    Creo que no es de ninguna utilidad usar ORDER BY fecha DESC en este caso en particular.

    Demostración de lo explicado anteriormente de las consultas MySQL con phpMyAdmin

    Espero que sirva de algo mi respuesta.

    Alguien mas avezado en el tema podría brindarte una solución más acorde o de mejor performance que la mía.

    Saludos
      Votos: 2 - Link respuesta
     
  • Fecha: 05-11-2016 13:50:56 hola, primeero que nada muchas gracias por las respuestas.
    comento mi proyecto... desde un microcontrolador levanto los datos cada 5 minutos, lo guardo en una tabla, muestro ese ultimo dato por pantalla y lo guardo en una tabla temporal, cuando sumo 12 datos (1 hora) hago el promedio y lo guardo en una tabla permanente (la otra la borro)
    Pero me piden ahora que haga un promedio de los valores diarios... y los muestre

    espero haber sido mas clara ahora
      Votos: 2 - Link respuesta
     
  • Fecha: 05-11-2016 13:55:21 buenisima rta Walter!! esa funcion como la disparo sola 1 o 2 veces.... o deberia hacerla con un boton manual?? como me convendria?

    Gracias
      Votos: 2 - Link respuesta
     
  • Fecha: 05-11-2016 14:28:43 Lamento no entender cuando dices:
    ...esa funcion como la disparo sola 1 o 2 veces.... o deberia hacerla con un boton manual?? como me convendria?

    Los promedios lo va a realizar cada vez que ejecutes el query, la consulta sql.
      Votos: 1 - Link respuesta
     
  • Fecha: 05-11-2016 15:57:15 Otra cosa que se me ocurre es que si SIEMPRE los promedios se van a realizar con la FECHA ACTUAL, es decir la de hoy.

    Podría utilizar las siguientes funciones que provee MySql.
    CURRENT_DATE(): función de Mysql para obtener la fecha actual.
    Ejemplo:
    SELECT CURRENT_DATE(); devuelve la fecha actual, por ejemplo la de hoy 2016-11-05

    CONCAT(): función de Mysql que permite concatenar dos o mas cadenas en una consulta.

    Ejemplo de uso en tu caso:
    La fecha del dia de hoy cuando inicia el dia que es a las 00:00:00 horas
    SELECT CONCAT(CURRENT_DATE(), ' 00:00:00'); devuelve 2016-11-05 00:00:00
    La fecha del dia de hoy cuando se termina el dia que es a las 23:59:59 horas
    SELECT CONCAT(CURRENT_DATE(), ' 23:59:59'); devuelve 2016-11-05 23:59:59

    Teniendo en cuenta ello tengo la fecha y hora de inicio del dia actual 2016-11-05 00:00:00 y el final del día actual 2016-11-05 23:59:59.

    Y finalmente la consulta armada sería:

    Sin alias:
    SELECT AVG(BarPressure), AVG(WindSpeedAverage) FROM valores WHERE fecha BETWEEN CONCAT(CURRENT_DATE(), ' 00:00:00') AND CONCAT(CURRENT_DATE(), ' 23:59:59');

    Con los Alias Promedio_BarPressure y Promedio_WindSpeedAverage:
    SELECT AVG(BarPressure) AS Promedio_BarPressure, AVG(WindSpeedAverage) AS Promedio_WindSpeedAverage FROM valores WHERE fecha BETWEEN CONCAT(CURRENT_DATE(), ' 00:00:00') AND CONCAT(CURRENT_DATE(), ' 23:59:59');

    Demostración de lo explicado anteriormente de las consultas MySQL con phpMyAdmin


    De esta manera te ahorras de insertar la fecha por medio de PHP al Query (consulta)
    Tener presente que solo promediara los datos en el dia que se ejecute. Es decir hoy con los registros insertados hoy, si lo ejecutas mañana serán con los registros del dia de mañana.

    Ahora si, los promedios deben ser con registros ingresados con otras fechas que no sea la actual hay que modificar la consulta.

    Espero que te sirva esta idea.

    Saludos
      Votos: 1 - Link respuesta
     
  • Fecha: 06-11-2016 03:25:49 buenisimas todas las respuestas... muestro lo que hice y me sigue quedando la duda si hacer el promedio donde elijan las fechas (q me parece mas competo) a que no sea configurable... lo que me complicaria seria timestamp .... como se maneja con lo que hice yo

    y aca en lo que hice creo me quede en lo mas facil.... no puedo pasarle el input a la consulta....
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <link rel="stylesheet" type="text/css" href="jquery.datetimepicker.css"/ >
    <script src="jquery.js"></script>
    <script src="jquery.datetimepicker.js"></script>
    
    </head>
    
    <body>
    
    
    </body>
    </html>
    </head>
    
    <body>
    
    </body>
    </html>
    
    
    <title>Documento sin título</title>
    </head>
    
    <body>
    <input type="datetime" name="fechaMin">
    <input type="datetime" name="fechaMax">
    </body>
    </html>
    <?php	//enlace a BD
    		$enlace = mysqli_connect("127.0.0.1","root","", "sensores");
    	
    	if (!$enlace) {
    		echo "Error: No se pudo conectar a MySQL." . PHP_EOL;
    		echo "errno de depuración: " . mysqli_connect_errno() . PHP_EOL;
    		echo "error de depuración: " . mysqli_connect_error() . PHP_EOL;
    		exit;
    	}
    
    $res = mysqli_query($enlace, "SELECT * FROM valores  WHERE fecha  BETWEEN '2016-10-28 00:00:00' AND '2016-10-28 23:59:59' ORDER BY fecha  DESC");
    
     $res = mysqli_query($enlace, "SELECT AVG(WindDirection), AVG(WindSpeedAverage), AVG(WindSpeedMax), AVG(WindSpeedMax), AVG(Temperature), AVG(RainfallOneHour), AVG(BarPressure), AVG(Humidity) FROM valores  WHERE fecha  BETWEEN "fechaMin" AND "fechaMax"");
     
    
    		  
    		  while($i = mysqli_fetch_array($res)){
    		  
    		  echo " <h4> <br/>Número de registro :".$id= $i[0]."  </h4> ";
              echo " <h4> <br/>Direccion del viento :".$WindDirection = $i[1]."  </h4> ";
    		  echo " <h4><br/> Velocidad del viento : ". $WindSpeedAverage = $i[2]."Km/h</h4>" ;
              echo " <h4><br/> Velocidad max del viento : ".$WindSpeedMax = $i[3]."  ºC</h4>" ;        
    		  echo " <h4><br/> Temperatura : ".$Temperature = $i[4]."  ºC</h4>";
              echo " <h4><br/> Lluvia : ".$RainfallOneHour = $i[5]."  mm/h"; 
              echo " <h4><br/> Presion atmosferica : ".$BarPressure = $i[6]." HectoPascales</h4>"; 
              echo " <h4><br/> Humedad : ".$Humidity = $i[7]."  %</h4>";
              
              break;
          }
            
       
    ?>
    
    
      Votos: 2 - Link respuesta
     
  • Fecha: 06-11-2016 16:30:42 Anabel:
    En tu codigo he encontrado algunos errores tales como:
    1- Formulario en tu codigo:
    <input type="datetime" name="fechaMin">
    <input type="datetime" name="fechaMax">


    Esta incompleto el esquema de un formulario, además no hay codigo php que tome los valores enviado por el formulario.

    Un formulario tiene una estructura básica como:
    <form method="POST" action="procesar_formulario.php">
    	<input type="datetime" name="fechaMin">
    	<input type="datetime" name="fechaMax">
    	<input type="submit" value="Enviar" name="enviar"></p>
    </form>


    Te dejo un link para que veas como Tratar con formularios

    2- Las consultas a la base de datos.
    a) Tienes dos consultas, la segunda consulta $res anula la primera. Debería ser una sola consulta SQL.
    $res = mysqli_query($enlace, "SELECT * FROM valores  WHERE fecha  BETWEEN '2016-10-28 00:00:00' AND '2016-10-28 23:59:59' ORDER BY fecha  DESC");
     $res = mysqli_query($enlace, "SELECT AVG(WindDirection), AVG(WindSpeedAverage), AVG(WindSpeedMax), AVG(WindSpeedMax), AVG(Temperature), AVG(RainfallOneHour), AVG(BarPressure), AVG(Humidity) FROM valores  WHERE fecha  BETWEEN "fechaMin" AND "fechaMax"");


    b) la segunda consulta
     $res = mysqli_query($enlace, "SELECT AVG(WindDirection), AVG(WindSpeedAverage), AVG(WindSpeedMax), AVG(WindSpeedMax), AVG(Temperature), AVG(RainfallOneHour), AVG(BarPressure), AVG(Humidity) FROM valores  WHERE fecha  BETWEEN "fechaMin" AND "fechaMax"");


    El que expuse era conceptual había que modificarla según tu requerimiento.
    El error esta en:
    WHERE fecha BETWEEN "fechaMin" AND "fechaMax"

    Tanto "fechaMin" como "fechaMax" era conceptual deberia ser reemplazados por las fechas, por ejemplo WHERE fecha BETWEEN '2016-10-28 00:00:00' AND '2016-10-28 23:59:59'
    O bien reemplazarlos por variables que contengan las fechas, ya sean que vengan por un formulario o definidas las variable con php.

    Ejemplo consulta SQL con variables:
        $fechaMin = '2016-11-06 00:00:00';
        $fechaMax = '2016-11-06 23:59:59';
        $consultaSQL = "SELECT AVG(BarPressure) AS Promedio_BarPressure, AVG(WindSpeedAverage) AS Promedio_WindSpeedAverage FROM valores WHERE fecha BETWEEN '$fechaMin' AND '$fechaMax'";
    

    Uso las comillas simples ' cerrando las variables '$fechaMin' AND '$fechaMax' para que el valor sea tomado como cadena,

    Otro error es que en la consulta utilzas las comillas dobles tanto para definir la cadena de consulta SELECT como para encerrar variables entrecomilladas dentro de la consulta.
    "SELECT AVG(WindDirection), AVG(WindSpeedAverage), AVG(WindSpeedMax), AVG(WindSpeedMax), AVG(Temperature), AVG(RainfallOneHour), AVG(BarPressure), AVG(Humidity) FROM valores WHERE fecha BETWEEN "fechaMin" AND "fechaMax"" <--- Dos comillas dobles "

    Fijate como las he usado en Ejemplo consulta SQL con variables.

    Y no he seguido analizando tu codigo para hallar más errores.

    No he usado mysqli_query asi que tuve que ponerme a investigar.

    Te dejo un codigo básico y funcional como para que pruebes e investigues.
    Claro esta que deberás adaptarlo a tus necesidades, pero asi como estas el codigo si lo ejecutas te hace el promedio de las columnas BarPressure y WindSpeedAverage de los registros con fecha[/b ]actual.

    SIN usar ALIAS en los promedios.

    <?php    
            $enlace = mysqli_connect("127.0.0.1","root","", "sensores");
    if (!$enlace) {
        echo "Error: No se pudo conectar a MySQL." . PHP_EOL;
        echo "errno de depuración: " . mysqli_connect_errno() . PHP_EOL;
        exit;
    } else {
    // SIN USAR ALIAS en las columnas de los promedios
        $consultaSQL = "SELECT AVG(BarPressure), AVG(WindSpeedAverage) FROM valores WHERE fecha BETWEEN CONCAT(CURRENT_DATE(), ' 00:00:00') AND CONCAT(CURRENT_DATE(), ' 23:59:59');";
    if ($resultado = mysqli_query($enlace, $consultaSQL)) {
            echo "Resultados: <br/>";
            $columna = mysqli_fetch_assoc($resultado);
            echo  'BarPressure: '.$columna["AVG(BarPressure)"] . '<br/>';
            echo  'WindSpeedAverage: '.$columna["AVG(WindSpeedAverage)"] . '<br/>';
            mysqli_close($enlace);
        } else {
            echo 'No hay resultados';
        }
    }
    


    USANDO ALIAS en los promedios (Recomendable)
    <?php    
            $enlace = mysqli_connect("127.0.0.1","root","", "sensores");
    if (!$enlace) {
        echo "Error: No se pudo conectar a MySQL." . PHP_EOL;
        echo "errno de depuración: " . mysqli_connect_errno() . PHP_EOL;
        exit;
    } else {
    //USANDO ALIAS en las columnas de los promedios
        $consultaSQL = "SELECT AVG(BarPressure) AS Promedio_BarPressure, AVG(WindSpeedAverage) AS Promedio_WindSpeedAverage FROM valores WHERE fecha BETWEEN CONCAT(CURRENT_DATE(), ' 00:00:00') AND CONCAT(CURRENT_DATE(), ' 23:59:59');";
    
        if ($resultado = mysqli_query($enlace, $consultaSQL)) {
            echo "Resultados: <br/>";
            $columna = mysqli_fetch_assoc($resultado);
            echo  'BarPressure: '.$columna["Promedio_BarPressure"] . '<br/>';
            echo  'WindSpeedAverage: '.$columna["Promedio_WindSpeedAverage"] . '<br/>';
    
            mysqli_close($enlace);
        } else {
            echo 'No hay resultados';
        }
    }
    


    Usando variables en la consulta SQL como lo he explicado anteriormente.

    <?php    
            $enlace = mysqli_connect("127.0.0.1","root","", "sensores");
    if (!$enlace) {
        echo "Error: No se pudo conectar a MySQL." . PHP_EOL;
        echo "errno de depuración: " . mysqli_connect_errno() . PHP_EOL;
        exit;
    } else {
    // CON VARIABLES Y ALIAS EN LAS COLUMNAS de promedios
        $fechaMin = '2016-11-06 00:00:00';
        $fechaMax = '2016-11-06 23:59:59';
        $consultaSQL = "SELECT AVG(BarPressure) AS Promedio_BarPressure, AVG(WindSpeedAverage) AS Promedio_WindSpeedAverage FROM valores WHERE fecha BETWEEN '$fechaMin' AND '$fechaMax'";
    
    
        if ($resultado = mysqli_query($enlace, $consultaSQL)) {
            echo "Resultados: <br/>";
            $columna = mysqli_fetch_assoc($resultado);
            echo 'BarPressure: '.$columna["Promedio_BarPressure"] . '<br/>';
            echo 'WindSpeedAverage: '.$columna["Promedio_WindSpeedAverage"] . '<br/>';
    
            mysqli_close($enlace);
        } else {
            echo 'No hay resultados';
        }
    }
    


    Los códigos los he probado y funcionan correctamente.
    Enjoy It!


    Creo que deberías comenzar con lo más básicos para ir entendiendo cada uno de los temas y luego ir agregando funcionalidad.

    Reitero deberías comenzar hacer códigos básicos y simples para ir aprendiendo sino te vas a confundir mucho.

    Espero que te sirva mi respuesta.

    Saludos
      Votos: 2 - Link respuesta
     
  • Fecha: 07-11-2016 05:32:25 muchas gracias por las respuestas,
    Lo que no se es como tomar los datos del textbox.... y que me haga la busqueda por fecha... teniendo en cuenta que tengo timestamp definida la fecha en mysql

    voy a poner en practica...se supone tengo un titulo de analista, pero hace años no toco codigo porque me he dedicado solo a la docencia.... este es un desarrollo para el cole... y me ha tomado por sorpresa.. se agredece!!
      Votos: 1 - Link respuesta
     
  • Fecha: 07-11-2016 17:19:31 ¿En vez de usar TIMESTAMP por qué no utilizas DATETIME?

    Todos los script que he usado estan en base a una columna (campo) de tipo DATETIME por lo tanto deberás realizarle los cambios necesarios para que se adapte al tipo TIMESTAMP

    TIMESTAMP (marca de tiempo) es la cantidad de SEGUNDOS transcurridos desde el EPOCH (fecha 1970-01-01 00:00:00 GMT). En el gestor de Base de Datos MySQL, existe la función UNIX_TIMESTAMP() que devuelve la cantidad en SEGUNDOS.

    Ejemplo de una consulta en MySQL para obtener el TIMESTAMP para la fecha 2016-11-06 18:15:54
    utilizando dicha función UNIX_TIMESTAMP('2016-11-06 18:15:54') la cual devuelve 1031713200 que es la cantidad de segundos.

    Se ejecuta SELECT UNIX_TIMESTAMP('2016-11-06 18:15:54')

    Resumen:
    En la documentación de MySQL expone algo así (link inglés):
    Tipo TIMESTAMP tiene un rango de '1970-01-01 00:00:01' GMT a '01/09/2038 03:14:07' GMT.

    Tipo DATETIME se usa cuando se necesita valores que contienen tanto la fecha y la hora. MySQL recupera y muestra los valores DATETIME en 'AAAA-MM-DD HH: MM: SS' formato. El rango admitido es '01/01/1000 00:00:00' a '9999-12-31 23:59:59'.

    En cuanto al obtener el dato desde el input "textbox" del formulario échale un vistazo al link sobre el tratamiento de formularios con php que te he mencionado en un comentario anterior.
    De todas maneras te dejo otro tutorial que es mas fácil de entender y tiene ejemplo funcional para probarlo online.
    Envío de datos de un FORMULARIO (controles text y submit)

    Saludos
      Votos: 3 - Link respuesta
     
  • Fecha: 08-11-2016 01:11:57 Nuevamente muchisimas gracias por la rtas... uso el timestamp para que me ingrese la fecha automaticamente,
    el microconotrolador me levanta los datos del tiempo automaticamente me los guarda en la bd y fue la mejor solucion que encontre para que me ingrese sola la fecha y hora sola (los guarda cada 5 minutos por especificacion del profe que luego la operara)
      Votos: 0 - Link respuesta
     
  • Fecha: 10-11-2016 01:40:17 Gente, el tema de la fecha lo he pasado todo a date time... ahora utilice el formulario que generosamente publicaron y le agregue el get para que me levante los datos del formulario.
    Utillizo dreamweaver y no puedo hacer un debug, el tema es que me muestra los echos pero no me pasa el promedio.... no se si el tema esta en que las fechas con mysql son al reves o que problema hay...
    <?php    
            $enlace = mysqli_connect("127.0.0.1","root","", "sensores");
    if (!$enlace) {
        echo "Error: No se pudo conectar a MySQL." . PHP_EOL;
        echo "errno de depuración: " . mysqli_connect_errno() . PHP_EOL;
        exit;
    } else {
         $fechaMin = (isset($_GET["fechaMin"]));
    	 $fechaMax = (isset($_GET["fechaMax"]));
        $fechaMin = date('y-m-a' , strtotime( $fechaMin));
        $fechaMax =  date('y-m-a' , strtotime( $fechaMax));
        $consultaSQL = "SELECT AVG(BarPressure) AS Promedio_BarPressure, AVG(WindSpeedAverage) AS Promedio_WindSpeedAverage FROM valores WHERE fecha BETWEEN '$fechaMin' AND '$fechaMax'";
    
    
        if ($resultado = mysqli_query($enlace, $consultaSQL)) {
            echo "Resultados: <br/>";
            $columna = mysqli_fetch_assoc($resultado);
            echo 'BarPressure: '.$columna["Promedio_BarPressure"] . '<br/>';
            echo 'WindSpeedAverage: '.$columna["Promedio_WindSpeedAverage"] . '<br/>';
    
            mysqli_close($enlace);
        } else {
            echo 'No hay resultados';
        }
    }


     <form method="post" action="24.php">
    	<input type="datetime" name="fechaMin" id="fechaMin">
    	<input type="datetime" name="fechaMax" id="fechaMax">
    	<input type="submit" value="Enviar" name="enviar"></p>
    </form>
    </body>
    </html>
      Votos: 0 - Link respuesta
     
  • Fecha: 10-11-2016 04:08:14 Hola
    En este momento estoy desde el móvil y mucho no puedo hacer
    A simple vista están mal los métodos en el formulario usas POST en el código PHP para recibir los datos usas GET

    Tenes que usar el mismo método.
    En
    $_GET["fechaMin"]
    Debería ser
    $_POST["fechaMin"]
    Lo mismo con fechaMax
    Saludos
      Votos: 2 - Link respuesta
     
  • Fecha: 10-11-2016 06:23:00 Compartiendo con Walter la discriminación de $_GET["xxx"] y $_POST["xxx"], les recuerdo que existe el método $_REQUEST

    Más allá de la enorme contribución realizada por Walter.

    Saludos
      Votos: 2 - Link respuesta
     
  • Fecha: 10-11-2016 08:33:55 gracias por la respuestas, ya habia probado y tampoco funciona ... ya a lo ultimo lo mezcle solo por pura prueba.... me pone los echo pero no los resultados.... es mas... ponga lo que ponga de fecha no entra al la prueba del condicional   Votos: 1 - Link respuesta
     
  • Fecha: 10-11-2016 10:05:41 Si bien es posible utilizar $_REQUEST, creo que por cuestiones de seguridad es desaconsejado usarlo. Es por ello que no lo he mencionado. De ser posible evitaría utilizar el método GET. Utilizaría POST siempre sea posible.

    Actualmente, En la base de datos la columna fecha de que tipo es? DATETIME o TIMESTAMP?
      Votos: 3 - Link respuesta
     
  • Fecha: 10-11-2016 13:51:57 Hola, gracias por la respuesta. el campo fecha es datetime.   Votos: 1 - Link respuesta
     
  • Fecha: 10-11-2016 14:39:34 Hola
    Dado que en la base de datos la columna fecha es del tipo DATETIME.

    Te dejo los codigo que a mi me estan funcionando correctamente.
    En el formulario hay que ingresar las fechas en el formato ingles AAAA/MM/DD ejemplo 2016-11-06

    La tabla: valores


    Archivo: formulario.php
    <!DOCTYPE html>
    <html lang="es">
    <head>
    	<meta charset="UTF-8">
    	<title>Formulario</title>
    </head>
    <body>
    <P>Escriba las fechas formato AAAA/MM/DD ejemplo 2016-11-06</P>
    	<form method="post" action="24.php">
    	    Fecha Minima: <input type="date" name="fechaMin" placeholder="FechaMin AAAA/MM/DD">
    	    Fecha maxima: <input type="date" name="fechaMax" placeholder="FechaMax AAAA/MM/DD">
    	    <input type="submit" value="Enviar" name="enviar">
    	</form>
    </body>
    </html>


    Archivo: 24.php
    <?php
    if (isset($_POST["fechaMin"], $_POST["fechaMax"] ) && !empty($_POST["fechaMin"]) && !empty($_POST["fechaMax"])) {
    // si Los datos recibidos no son vacios y estan definidos muestro los resulatdos caso contarrio doy un error
    
     $fechaMin = trim($_POST["fechaMin"])." 00:00:00";
     $fechaMax = trim($_POST["fechaMax"])." 23:59:59";;
    
    $enlace = @mysqli_connect("127.0.0.1","root","", "sensores");
    
    if (!$enlace) {
        echo "Error: No se pudo conectar a MySQL." . PHP_EOL;
        echo "errno de depuración: " . mysqli_connect_errno() . PHP_EOL;
        exit;
    } else {
    
     // CON VARIABLES Y ALIAS EN LAS COLUMNAS de promedios
    //   ejemplo de formato $fechaMin = '2016-11-06 00:00:00';
    //    ejemplo de formato  $fechaMax = '2016-11-06 23:59:59';
       $consultaSQL = "SELECT AVG(BarPressure) AS Promedio_BarPressure, AVG(WindSpeedAverage) AS Promedio_WindSpeedAverage FROM valores WHERE fecha BETWEEN '$fechaMin' AND '$fechaMax'";
    
        if ($resultado = mysqli_query($enlace, $consultaSQL)) {
            echo "Resultados: <br/>";
            $columna = mysqli_fetch_assoc($resultado);
    
    
            echo 'BarPressure: '.$columna["Promedio_BarPressure"] . '<br/>';
            echo 'WindSpeedAverage: '.$columna["Promedio_WindSpeedAverage"] . '<br/>';
    
    
            mysqli_close($enlace);
        } else {
            echo 'No hay resultados';
        }
    }
    }else{
        echo "No se ha ingresado las fechas en el formulario";
    }
    

    Pagina en accion:


    Es un codigo de ejemplo el cual se puede mejorar notablemente.
    Solo se valida que fechaMin y fechaMax existan y que no esten vacias.
    Una de las validaciones que faltaria es que las fechas que ingrese el usuario sea realmente una fecha válida y no cualquier cadena de caracteres, como así tambien verificar que la fecha mínima ingresada no sea superior a la máxima sino no funcionaria la consulta SQL.

    Pruebalo y nos cuentas

    saludos
      Votos: 1 - Link respuesta
     
  • Fecha: 10-11-2016 14:52:10 Te dejo otro codigo que es el anterior pero este tiene validaciones, si la fechaMin es mayor a la fechaMax muestra un mensaje de error, si cualquiera de las fecha no es una fecha válida por ejemplo 2016-11-32 muestra un mensaje de error ya que 32 no es un dia valido ya que noviembre tiene 31 dias lo mismo ocurriria con 2017-02-29 ya que en febrero del 2017 no hay dia 29

    El formulario es el mismo que el anterior cambia el archivo 24.php
    <?php
    if (isset($_POST["fechaMin"], $_POST["fechaMax"] ) && !empty($_POST["fechaMin"]) && !empty($_POST["fechaMax"])) {
    // si Los datos recibidos no son vacios y estan definidos muestro los resulatdos caso contarrio doy un error
    
     $fechaMin = trim($_POST["fechaMin"])." 00:00:00";
     $fechaMax = trim($_POST["fechaMax"])." 23:59:59";
    
    // valido que las fechas sean correctos en su formato
    if (!validateDate($fechaMin) || !validateDate($fechaMax)) {
        echo "Las fechas son incorrectas";
        exit();
    }else{
        if ($fechaMin>$fechaMax) {
            echo "La Fecha Minima debe ser menor o igual que la Fecha Maxima.";
            exit();
        }
    }
    
    $enlace = @mysqli_connect("127.0.0.1","root","", "sensores");
    
    if (!$enlace) {
        echo "Error: No se pudo conectar a MySQL." . PHP_EOL;
        echo "errno de depuración: " . mysqli_connect_errno() . PHP_EOL;
        exit;
    } else {
    
     // CON VARIABLES Y ALIAS EN LAS COLUMNAS de promedios
    //    $fechaMin = '2016-11-06 00:00:00';
    //    $fechaMax = '2016-11-06 23:59:59';
       $consultaSQL = "SELECT AVG(BarPressure) AS Promedio_BarPressure, AVG(WindSpeedAverage) AS Promedio_WindSpeedAverage FROM valores WHERE fecha BETWEEN '$fechaMin' AND '$fechaMax'";
    
        if ($resultado = mysqli_query($enlace, $consultaSQL)) {
            echo "Resultados: <br/>";
            $columna = mysqli_fetch_assoc($resultado);
    
    
            echo 'BarPressure: '.$columna["Promedio_BarPressure"] . '<br/>';
            echo 'WindSpeedAverage: '.$columna["Promedio_WindSpeedAverage"] . '<br/>';
    
    
            mysqli_close($enlace);
        } else {
            echo 'No hay resultados';
        }
    }
    }else{
        echo "No se ha ingresado las fechas";
    }
    
    function validateDate($date, $format = 'Y-m-d H:i:s')
    {
        $d = DateTime::createFromFormat($format, $date);
        return $d && $d->format($format) == $date;
    }
    


    En accion:


    Espero que te sirva.

    Saludos
      Votos: 2 - Link respuesta
     
  • Fecha: 10-11-2016 18:06:45 Quiero aprovechar en agradecer a Txema Artzain por su comentario sobre mi contribución
    "Más allá de la enorme contribución realizada por Walter."
    Esas palabras viniendo de él es un noble elogio. Ya que lo considero a él como un integrante que aporta un máximo valor a la comunidad.
      Votos: 2 - Link respuesta
     
  • Fecha: 10-11-2016 22:14:46 Walter, Coincido contigo en "Utilizar POST siempre sea posible"

    La idea con $_REQUEST es comprobar si llega algo en PHP así como hacemos en Javascript con window.alert() o console.log()

    Gracias por tu puntualización.
      Votos: 2 - Link respuesta
     
  • Fecha: 10-11-2016 22:59:38 Primero que nada nobleza obliga el enorme agradecimiento tanto mio que soy la docente que lleva el proyecto, como la escuela, CENS Nº 451 de Monte Hermoso.. realmente es invaluable la ayuda que brindan
    En segundo lugar gracias por el aporte del get y post... voy a modificar el microcontrolador que lo tengo funcionando con get (voy a ver que opcion tiene arduino)
    Y tercero... ingreso las fechas pero me pone que no ingrese fechas... lo probe como lo ha indicado Walter...igualmente no llo he mirado bien, solo lo probe.... pero queria agradecer primero
      Votos: 1 - Link respuesta
     
  • Fecha: 11-11-2016 01:44:10 Anabel:

    Tal vez te sirva sobre HTML5 (diferentes opciones siempre dentro del <form> que te indicaba Walter)
    		<input type="date" name="fecha" id="fecha"> Fecha (aaaa-mm-dd)
    		<br>
    		<input type="week" name="semana" id="semana"> Semana
    		<br>
    		<input type="month" name="mes" id="mes"> Mes
    		<br>
    		<input type="time" name="hora" id="hora"> Hora (hora:minutos:segundos)
    		<br>
    		<input type="datetime" name="fechahora" id="fechahora"> Fecha y Hora (incluyendo la zona horaria)
    		<br>
    		<input type="datetime-local" name="tiempolocal" id="tiempolocal"> Fecha y Hora (sin zona horaria)

    Puedes ver la documentación muy ampliada a otros tipos de entrada en Tipos de entrada HTML5

    w3schools.com está siempre muy actualizado y con páginas de prueba.
      Votos: 3 - Link respuesta
     
  • Fecha: 11-11-2016 05:56:00 Muchas gracias!! funcionando...   Votos: 0 - Link respuesta
     
  • Fecha: 11-11-2016 08:21:18 Que bueno que finalmente hayas conseguido hacerlo funcionar ;)
    Puedes decirnos como lo has solucionado y con que código? es por curiosidad y por no quedarme con la intriga, ademas quedaría para futuras referencias.
    Saludos
      Votos: 0 - Link respuesta
     
  • Fecha: 11-11-2016 11:53:17 Paso los codigos!!
     
    <form method="post" action="24.php">
    <input type="date" name="fechaMin" id="fecha" > Fecha Inicial <br/>
    		<br>
    	<input type="date" name="fechaMax" id="fecha" > Fecha Final<br/><br/>
    	<input type="submit" value="Enviar" name="enviar"></p>
    </form>
    </body>
    </html>


    	
       
     
         <?php
    if (isset($_POST["fechaMin"], $_POST["fechaMax"] ) && !empty($_POST["fechaMin"]) && !empty($_POST["fechaMax"])) {
    // si Los datos recibidos no son vacios y estan definidos muestro los resulatdos caso contarrio doy un error
    
     $fechaMin = trim($_POST["fechaMin"])." 00:00:00";
     $fechaMax = trim($_POST["fechaMax"])." 23:59:59";
    
    // valido que las fechas sean correctos en su formato
    if (!validateDate($fechaMin) || !validateDate($fechaMax)) {
        echo "Las fechas son incorrectas";
        exit();
    }else{
        if ($fechaMin>$fechaMax) {
            echo "La Fecha Minima debe ser menor o igual que la Fecha Maxima.";
            exit();
        }
    }
    
    $enlace = @mysqli_connect("127.0.0.1","root","", "sensores");
    
    if (!$enlace) {
        echo "Error: No se pudo conectar a MySQL." . PHP_EOL;
        echo "errno de depuración: " . mysqli_connect_errno() . PHP_EOL;
        exit;
    } else {
    
    
       $consultaSQL = "SELECT AVG(BarPressure) AS Promedio_BarPressure, AVG(WindSpeedAverage) AS Promedio_WindSpeedAverage , AVG(WindDirection) AS Promedio_WindDirection , AVG(WindSpeedMax) AS Promedio_WindSpeedMax, AVG(Temperature) AS Promedio_Temperature , AVG(RainfallOneHour) AS Promedio_RainfallOneHour, AVG(Humidity) AS Promedio_Humidity FROM valores WHERE fecha BETWEEN '$fechaMin' AND '$fechaMax'";
    
        if ($resultado = mysqli_query($enlace, $consultaSQL)) {
            echo "Resultados: <br/>";
            $columna = mysqli_fetch_assoc($resultado);
    
    
            echo 'Presión: '.$columna["Promedio_BarPressure"] . '<br/>';
            echo 'Velocidad del viento: '.$columna["Promedio_WindSpeedAverage"] . '<br/>';
    		echo 'Direccion del viento: '.$columna["Promedio_WindDirection"] . '<br/>';
    		echo 'Velocidad Max viento: '.$columna["Promedio_WindSpeedMax"] . '<br/>';
    		echo 'Temperatura: '.$columna["Promedio_Temperature"] . '<br/>';
    		echo 'Lluvia: '.$columna["Promedio_RainfallOneHour"] . '<br/>';
    		echo 'Humedad: '.$columna["Promedio_Humidity"] . '<br/>';
    
            mysqli_close($enlace);
        } else {
            echo 'No hay resultados';
        }
    }
    }else{
        echo "No se ha ingresado las fechas";
    }
    
    function validateDate($date, $format = 'Y-m-d H:i:s')
    {
        $d = DateTime::createFromFormat($format, $date);
        return $d && $d->format($format) == $date;
    }
    
    


    Muchas gracias a todos
      Votos: 1 - Link respuesta
     
  • Fecha: 11-11-2016 11:55:18 Si alguno quiere subo el proyecto completo..... aunque aun hay codigo repetido y no le he pulido   Votos: 1 - Link respuesta
     
  • Fecha: 22-11-2016 12:26:22 Anabel muchas gracias por publicar el codigo de solucionado.
    Si deseas compartir tu proyecto es bienvenido.

    Que tengas un buen dia

    Saludos
      Votos: 1 - Link respuesta
     
Para participar activamente de la comunidad primero debes autenticarte, ingresa al sistema.Iniciar Sesión
 
frjcbbae garagebible.com