• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Daten aus mysql-db von Heute/Gestern in Array schreiben?

Schau doch mal im Manual nach was current_date() macht:
MySQL :: MySQL 5.5 Reference Manual :: 12.7 Date and Time Functions

Dann sollte dir bewusst werden, dass Du hier Äpfel mit Birnen vergleichst wenn deine Spalte vom Typ DATETIME ist. Denn

Code:
2013-05-30 22:59:01 ist nicht gleich 2013-05-30

auch

Code:
2013-05-30 22:59:01 ist nicht größer als 2013-05-30

Wenn Du damit einen Vergleich machen willst, musst Du deine Zeitangabe in ein mit current_date() kompatibles Format bringen. Z.B. per DATE_FORMAT():

Code:
SELECT ... WHERE DATE_FORMAT(Datum,'%Y-%m-%d') > current_date()

Da ich den MySQL-Vergleichen mit Datums- und Zeitangaben nie wirklich traue wechsle ich für solche Vergleiche auch gerne zu reinen Zahlen. Man kann entweder das Datum mal ohne jegliche Zeichen dazwischen schreiben, also

Code:
20130530225901

oder auch einen UNIX-Zeitstempel dafür nutzen. Dann würde es für dich vlt. auch etwas verständlicher werden:

Code:
SELECT ... WHERE UNIX_TIMESTAMP(Datum > UNIX_TIMESTAMP()

Dabei werden nun 2 reine Zahlenwerde verglichen, z.B. (einfach ausgedrückt):

Code:
2 > 1

Merke: Achte immer auf die Formate die Du miteinander vergleichst.
 
Werbung:
um mir daten von gestern anzeigen zu lassen, habe ich nun so

PHP:
$tag_auswertung = date('Y-m-d', time() - 86400);

PHP:
mysql_query("SELECT Aussentemperatur,Datum FROM meteohub_1 WHERE DATE_FORMAT(Datum,'%Y-%m-%d') = '$tag_auswertung' ORDER BY Datum DESC");

Das geht auch ohne Probleme. Nun würde ich gerne ein Auswahlnmenü auf der Seite hinzufügen, um zb Daten von Heute oder Daten
von gestern anzeigen zu lassen, ohne dafür jeweils eigene php-Seiten zu gestalten.

Die habe ich erstmal so gestaltet:

Code:
<body>

<center>

<select>
<option value="0">Heute</option>
<option value="86400">Gestern</option>
</select>

<input type="button" name="reset" value="aktualisieren" style="width:100px;" onclick="PHPFunktion()"/>

   <div>
      <div id="chart" style="height: 400px; width: 700px"></div>
   </div>

<br>
   
      <div>
      <div id="chart2" style="height: 400px; width: 700px"></div>
   </div>
</center>   
</body>

Glaube aber irgendwie nicht, das das so richtig ist. googlen und Forum hat mich
bisher nicht schlauer werden lassen. Nach drücken des Buttons müssten ja die
Daten neu eingelesen werden und das javascript von jqplot neu durchlaufen werden.

Die Seite sieht bisher so aus:
Wettersation Pewsum - Notice: Undefined variable: tag in /var/www/web86/html/jqplot_0.php on line 91

Evtl kann mir einer sagen wie es geht oder mir einen Link geben, wäre nett. Danke

Gruss
 
Wenn Du Daten von gestern abrufen willst, kannst Du auf PHP verzichten. Das geht auch mit MySQL alleine. Siehe Manual (wiedermal):
MySQL :: MySQL 5.5 Reference Manual :: 12.7 Date and Time Functions

Beispiel:
Code:
SELECT Aussentemperatur,Datum FROM meteohub_1 WHERE DATE_FORMAT(Datum,'%Y-%m-%d') = DATE_SUB(NOW(), INTERVAL 1 DAY) ORDER BY Datum DESC

Wenn Du nun diese Tagesangabe individuell angaben willst, brauchst Du per PHP nur die "1" im Statement austauschen. Also z.B.:
PHP:
$sql = "SELECT Aussentemperatur,Datum FROM meteohub_1 WHERE DATE_FORMAT(Datum,'%Y-%m-%d') = DATE_SUB(NOW(), INTERVAL ".$tagauswahl." DAY) ORDER BY Datum DESC";

Was in $tagauswahl steht könnte z.B. über eine <select>-Auswahl kommen, wie Du sie ja schon vorbereitet hast. Aber eben nur mit den value-Wert 1, 2, 3 etc.pp.
 
Werbung:
danke. aber ich habe eher schwierigkeiten mit dem Button 'aktualisieren'. Wie bringe ich dem
bei, das die mysql abfrage neu durchgeführt wird und das java script nochmal ausführt werden
soll?

die Seite über den Button neu zu laden bringt ja nichts
 
Umgib die Formularfelder mit einem Formular und verzichte auf JavaScript zur Verarbeitung der Felder. Dann würdest Du beim Klick auf den Absendenbutton die Seite neuladen und hättest dann die Angaben aus dem Formularfeld zur Verfügung.
 
habs mal versucht (noch ohne Interval Days etc), aber auch so will er noch nicht.
Das habe ich:

HTML:
<form action="<?=$_SERVER['PHP_SELF'] ?>" method="post">
  <select name="wetter[]" multiple size="4">
    <option value="0">Heute</option>
    <option value="86400">Gestern</option>
    <option value="172800">Vor 2 Tagen</option>
    <option value="259200">Vor 3 Tagen</option>
  </select>
  <br>
  <input type="submit" value="Senden" />
</form>

PHP:
if(isset($_POST['wetter'])
{
  $formular = $_POST['wetter'];
}

Hoffe der Ansatz ist zumindest richtig....
 
Zuletzt bearbeitet:
Werbung:
Deine Auswahl ist aus meiner Sicht nicht richtig - oder Du willst mehrere Tage kombinieren. Mach es erstmal einfach damit Du es verstehst. Also:

HTML:
<select name="wetter">

Dadurch steht die Auswahl dann nach Abschicken des Formulars in $_POST["wetter"], so wie Du es geschrieben hast, zur Verfügung.
 
eigentlich dachte ich das es gut aussieht, aber es läuft nicht




PHP:
<!DOCTYPE html>
<?php
include_once("/var/www/webxx/files/mysql.php"); // Zugangsdaten für mySQL

$formular = 0; // 0 für Tag Heute

if(isset($_POST['wetter']))
{
$formular = $_POST['wetter'];
}  

$tag_auswertung = date('Y-m-d', time() - $formular);


$con = mysql_connect($databasehost,$databaseusername,$databasepassword) or
      die(mysql_error());mysql_select_db($databasename) or die(mysql_error());
// Sollte Dir alle Datensätze von heute und gestern liefern
$result = mysql_query("SELECT Aussentemperatur,Datum FROM meteohub_1 WHERE DATE_FORMAT(Datum,'%Y-%m-%d') = '$tag_auswertung' ORDER BY Datum DESC");
if (!$result) {
    echo 'Konnte Abfrage nicht ausführen: ' . mysql_error();
    exit;
}
// ---------------------------------------------------------------
  
   while($row = mysql_fetch_row($result))
   {    // Auslesen der Temperatur und Luftfeuchtigkeit

   .... Code zur besseren Übersicht gelöscht
   
    } 
// ---------------------------------------------------------------
    
mysql_close($con);

?>

<html>
   <head>
      <meta http-equiv="content-type" content="text/html; charset=utf-8" />
      
      <title>Wettersation/title>

   </head>
</html>

<script type="text/javascript">
   $(document).ready(function()
   {
      $.jqplot('chart', [[<?php echo $ausgabe_temperatur;?>],[<?php echo $ausgabe_feuchtigkeit;?>]],
      .... Code zur besseren Übersicht gelöscht
   });
</script>

<script type="text/javascript">
   $(document).ready(function()
   {
      $.jqplot('chart2', [[<?php echo $ausgabe_windgeschwindigkeit;?>],[<?php echo $ausgabe_windboehe;?>]],
      {
    .... Code zur besseren Übersicht gelöscht
   });
</script>

<body>

<center>

<form action="<?=$_SERVER['PHP_SELF'] ?>" method="post">
  <select name="wetter">
    <option value="0">Heute</option>
    <option value="86400">Gestern</option>
    <option value="172800">Vor 2 Tagen</option>
    <option value="259200">Vor 3 Tagen</option>
  </select>
  <br>
  <input type="submit" value="Senden" />
</form

    <div>
        <div id="chart" style="height: 400px; width: 700px"></div>
    </div>

<br>
   
    <div>
        <div id="chart2" style="height: 400px; width: 700px"></div>
    </div>
   
</center>   
</body>


Edit

Scheint doch zu gehen, Klammer vergessen.

Da ganze läuft, wenn ich allerdrings im Menü auf "vor 3 Tage" einstelle und absende, werden zwar die Daten für "vor 3 Tagen" angezeigt, aber das Auswahlmenü springt immer wieder auf HEUTE zurück.

Wieso bleibt der nach dem senden nicht auf dem Auswahlpunkt?

Gruss
 
Zuletzt bearbeitet:
Werbung:
ich hatte das gelesen, aber das half mir nicht weiter. wie dort beschrieben kann ich zwar in
dem Menü beim ersten aufruf vorselektieren mit
Code:
<option selected>Tom Waits</option>

Aber nach dem "senden", muss sollte ja jedesmal der Wert angezeigt werden,
den ich zuvor ausgewählt habe.
 
Und was hindert dich daran, das mit Hilfe von PHP und einem einfachen if einzubauen?
 
Zuletzt bearbeitet von einem Moderator:
PHP:
<option value="0" <?php if($_POST['wetter'] == 0) echo "selected"; ?>>Heute</option>

danke
 
Werbung:
Du musst überprüfen ob die Option gesetzt wurde, wenn ja, bekommt diese ein selected. Wenn keine gesetzt wurde bekommt ein Standardfeld selected.

/edit zu langsam.
 
PHP:
<option value="0" <?php if($_POST['wetter'] == 0) echo "selected"; ?>>Heute</option>
Das gibt bei hochgedrehtem Error-Reporting eine schöne Notice-Meldung in Sachen "Undefined index" beim ersten Seitenaufruf.
Ganz ehrlich, ich verstehe echt nicht, warum manche das Error-Reporting während der Entwicklung eines Scriptes nicht aktivieren, das hilft so manchen Fehler zu finden.

Und dann solltes du mal google mit "xss php_self" füttern
 
ich brauche mal ne Idee. Bisher klappt alles. Nun würde ich gerne grafisch auch meine Regendaten darstellen, mir
fehlt da aber komplett eine Idee wie man das am besten anstellt.

Anbei ein Bild der mysql Tabelle. Ich würde gerne ein Balkendiagramm habe, das die Gesamtmenge einer Stunde zusammenfasst,
so das ich sehen kann, zb zwischen 00:00-01:00 hats 2mm geregnet, zwischen 01:00-02:00 hats 1mm geregnet usw.

In der Tabelle sind leider immer nur die Werte für den ganzen Tag aufgezeichnet, also 12:10:00 zeigt mir an, wieviel hats
zwischen 00:00:00 und 12:10:00 geregnet.

Müsste als um auf die Menge von 01:00-02:00 zu kommen, die Regenmenge von 01:00:00 dem Wert von 02:00:00 anziehen.

Meine Frage, kann man das direkt in mSQL machen, oder gehts nur über php?

Gruss


 
Werbung:
ich habe mich durch die mysql hilfe (quer)gelesen, komme aber nicht weiter

das wäre nun meine idee:
PHP:
SELECT Max(Regenmenge),Min(Regenmenge) FROM $Tabelle WHERE DATUM > $Datum_Gestern GROUP BY HOUR(Datum)
...
while($row = mysql_fetch_row($result))
{   

$regenmenge[] = $row[0]-$row[1];
   
}

Ich müsste auf den Max und Min Wert jeder vollen Stunde komme

Max/Min zwischen 00:00 und 00:59
Max/Min zwischen 01:00 und 01:59
....
Max/Min zwischen 23:00 und 23:59
 
Zurück
Oben