Daten Neuladen

  • Moin,


    ich wollte gerne mit einem Script dafür sorgen das meine Daten aus der Datenbank Neugeladen werden ohne die Seite zu aktualisieren.

    Das ganze klappt soweit auch, aber nur mit einem Wert. Ich bräuchte das genau 4x.


    Mein Aktueller Code:

    <head> Teil mit dem Script:


    Wo das ganze aufgerufen wird:


    Meine laden.php:


    Weiß jemand wie ich jetzt auch noch über die "laden.php" zum Beispiel die "Aktuelle Wassertemperatur", "Höchster Wert / 7 Tage" und "Niedrigster Wert / 7 Tage" updaten kann?



    Schon einmal Danke im voraus.



    Lieben Gruß

  • Alles klar,


    Habe tatsächlich es geschafft meinen Projektleiter zu überreden das ich MySQL nutzen darf.
    Deswegen bräuchte ich die Unterstützung wie ich am besten die 4 Werte mit Javascript aktualisieren kann.

  • JSON ist nur ein Format, um Strukturen wie Arrays in einem String zu kodieren um sie übertragen zu können. Für die Aktualisierung ohne Neuladen der Seite bist Du mit Ajax und setInterval schon auf dem richtigen Wege. Du brauchst dann nur auf jQuery.JSON umzustellen.

  • Eine Einführung findest Du z. B. hier:

    https://webdeasy.de/json-in-javascript-und-php-benutzen/


    Dann die Werte etwa so einpacken und ausgeben in laden.php:

    Code
    $values = ['current' => $sensor1, 'min' => $row['low_temp'], 'max' => $row['high_temp']];
    echo json_encode($values);

    Und dann die Werte laden entspr.

    https://api.jquery.com/jquery.getjson/

    Code
    $.getJSON('laden.php', function(response) {
        // hier steht die Antwort vom Server als Objekt bzw. ass. Array in response zur Verfügung
        $('#current-value').text(response.current);
        $('#min-value').text(response.min);
        $('#max-value').text(response.max);
    });

    Wobei Du den Containern, wo die Werte hin sollen, jeweils die passende ID geben musst, z. B. so:

    Code
                       <div class="col-md-3 col-sm-3 col-xs-6">
                            <div class="alert alert-danger back-widget-set text-center">
                                    <h3><span id="max-value"></span> &#x00B0;C</h3>
                                Höchster Wert / 7 Tage
                            </div>
                        </div>

    Man könnte auch mit einem Template arbeiten aber weil das HTML etwas lang ist würde das die Sache unnötig aufblähen.


    BTW: Ich sehe da in deiner Basisversion von laden.php zwei Sensoren. Verstehe ich das richtig, dass es dann für jeden min., max, und aktuell geben wird, d. h. 6 Werte?

  • Hey, erstmal Danke für den Einblick.


    Ich habe mal den Code ausprobiert. Muss ich da jetzt noch dann ein Intervall einbauen? Weil automatisch aktualisiert er das ja nicht. Sondern erst wenn ich die Seite neulade.

    Werde mich nach der Projekt Arbeit aber auch nochmal Intensiver damit beschäftigen. Bin aktuell leider unter Zeitdruck, weshalb ich das fertig bekommen muss bis Dienstag.

    Und zu deiner Frage mit den Werten.
    Also ja, es gibt 2 Sensoren. Aber nur 4 Werte.


    Sensor1 zeigt die Aktuelle Wasser Temperatur an.

    Sensor2 zeigt an, mit welcher Temperatur das Wasser in den Pool läuft


    Und der Min und Max Wert basiert auf den sensor1.

  • Verstehe, dann müsste es in etwa so aussehen:

    Code
    $values = [
        'current' => $sensor1,
        'min' => $row['low_temp'], 
        'max' => $row['high_temp'],
        'zulauf' => $sensor2
    ];
    echo json_encode($values);

    Und der Rest entsprechend.

  • Ja, genau. Das habe ich bereits gemacht. Konnte mir das ja schon denken ^^
    Geht nur noch darum das er die Werte automatisch jede Sekunde aktualisiert.

    Hab das mal so versucht:


    Leider zeigt er bei dem Code dann überhaupt nichts mehr an.

  • Hey, ich bin es nochmal ^^

    Ich habe grad etwas weiter gemacht und festgestellt das das mit "max." und "min." leider nicht funktioniert.
    Vermutlich weil das "foreach" fehlt. Weil er hier wohl die "$row" nicht erkennt.


    Code
    $values = [
        'current' => $sensor1, 
        'einlass' => $sensor2, 
        'max' => $row['high_temp'],
        'max' => $row['min_temp']
    ];


    Ich kann glaube ich schlecht eine "foreach" schleife um den Code legen oder?.

  • Auf die Datenbanksachen habe ich mich jetzt nicht fokussiert. Aber wenn es nur zwei Sensoren bzw. nur einen mit min/max gibt, ist zunächst nicht plausibel, warum es einen foreach braucht. Vermutlich gibt es nur einen Datensatz in der DB und es müsste ausreichen, diesen z. B. mit fetch_row aus dem Resultset zu lesen.

  • Also ich habe eine Datenbank mit 1x "high_temperatur" und 1x "low_temperatur".


    Vorher habe ich es so gemacht:


    PHP
    $sql = "SELECT high_temp FROM high_temperatur";
    
    <?php foreach ($dbv->query($sql) as $row) { ?>
        <h3><?php echo $row['high_temp'] ?></span>&#x00B0;C</h3>
    <?php } ?>


    Jetzt ist ja aber mein $row['high_temp'] in der $valuesVariable die in der laden.php ist.
    Und das erkennt der wohl nicht.

  • Dann kannst Du mit fetch die Zeile aus dem Resultset auslesen:

    Code
    $result = $dbv->query($sql);
    $row = $result->fetch();

    Und die Variable $row steht zur Verfügung. (ungetestet)

    Allerdings würde ich eher empfehlen, beide Werte in eine Zeile einzutragen, dann würdest Du nur ein Mal auslesen müssen.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!