PHP aktuelle Nachrichten updaten

  • Hallo,


    ich habe mir ein Control Panel geschrieben. Ich habe folgende Dateien die bei jeden Seitenaufruf aufgerufen werden


    Header.php

    Seite.php

    Footer.php


    Nun befindet sich im Header ein Dropdown Menü mit einem Icon für die Anzeige offener Nachrichten. Nun soll aus der Datenbank alle aktuellen Nachrichten Daten ausgelesen werden. Das auslesen an sich funktioniert super, allerdings nicht die aktualisierung. Denn wenn ich die Nachricht selbst aufrufe wird zuerst abgefragt wie viele Nachrichten offen sind über die Header Datei und dann wird erst der Datenbank über die Seite.php mitgeteilt dass die Nachricht geöffnet wurde.


    Welche Möglichkeiten habe ich nun der Header.php mitzuteilen eine aktualisierung durchzuführen ohne dass meine Seite.php im Hintergrund neu geladen wird ?


    Versucht habe ich es schon mit folgenden JavaScript. Allerdings wird hierbei der gesamte Code von der Seite.php ebenfalls mit im Hintergrund geladen und somit der Datenbank mitgeteilt dass alle Nachrichten gelesen wurden.


    Hat da jemand eine Idee wie ich dass ganze umsetzen kann ?


    PHP
    <div id="nav_message">
        <?php echo nl2br(e(getOpenMessage($id)));?>
    </div>
    Code
    function getOpenMessage($userID)
        {
            include("./config/config.php");
            $query      =   $connect->prepare('SELECT distinct(message_id) FROM `nachrichten` WHERE `an` = :id and gelesen = 0');
            $query->execute(array('id'    =>  $userID));
            $rowCount   =   $query->rowCount();
            return $rowCount;
                
                
        }



    Mein Template ist wie folgt für den Aufruf aufgebaut


    PHP
    <?php include("template/navigation.php"); 
    if(isset($_GET["page"])) $page = $_GET["page"];
    else $page = "home";
    if(file_exists('pages/'.$page.'.php'))
    include('pages/'.$page.'.php');
    else include("pages/home.php");
    
    include("footer.php"); 
    ?>



    Ich hoffe ich konnte mich in diesem Fall ausreichend ausdrücken. Bei Fragen gerne stellen. Freue mich über jeden Ratschlag.

  • Eventuell wäre da eine Methode mit Ajax bzw. fetch in Js von Vorteil. Dazu baust du dir eine PHP Datei wo du diese Funktion dann drinne hast, und führst die über ein GET mit JavaScript aus.


    Aber generell würde ich dir abraten den PHP Code direkt ins Template zu machen, schau dir da lieber mal Sachen wie Smarty oder Laravel / Symfony an.

    Ich lese hier nur mit und schreibe ab und zu was zu den Themen rund um Woltlab, PHP, JavaScript, Windows- / Linux Server und Webspaces

  • Eventuell wäre da eine Methode mit Ajax bzw. fetch in Js von Vorteil. Dazu baust du dir eine PHP Datei wo du diese Funktion dann drinne hast, und führst die über ein GET mit JavaScript aus.


    Aber generell würde ich dir abraten den PHP Code direkt ins Template zu machen, schau dir da lieber mal Sachen wie Smarty oder Laravel / Symfony an.

    Aus welchen Grund würdest du mir davon abraten abgesehen von der Übersichtlichkeit her?


    //Edit


    Ich habe nun mal angefangen dass ganze in Smarty umzusetzen. Gewünscht ist damit, dass alle PHP Abfragen wie SQL ect über einen Ordner laufen und der ganze HTML kram dann auch über einen eigenen Ordner. Wie muss ich dass ganze nun tatsächlich umsetzen ?


    Folgenden Code habe ich bisher in meine index.php.


    In diesem Fall liest er ja bisher nur die $page.tpl aus. Wie kann ich nun sagen dass er dann eben aus einem anderen Ordner die PHP Dateien für die Datenbankabfrage mit anspricht und diese dann natürlich auch an die tpl weiter gibt ?

  • Da würde ich dir ambesten die Smarty Documentation ans Herz legen. Natürlich sollte aber auch PHP Grundverständnis gerade auch was OOP und so angeht da sein.

    Aber trotzdessen würde ich den Anwendungsfall den du hast, trotzdem über Js machen.


    Und ja, vorallem wegen der Übersichtlichkeit.

    Ich lese hier nur mit und schreibe ab und zu was zu den Themen rund um Woltlab, PHP, JavaScript, Windows- / Linux Server und Webspaces

  • Einfacher als du denkst! :)



    PHP
    <?php
    include("./config/config.php");
    $query = $connect->prepare('SELECT distinct(message_id) FROM `nachrichten` WHERE `an` = :id and gelesen = 0');
    $query->execute(array('id' => $userID));
    $rowCount = $query->rowCount();
    echo $rowCount;
    ?>
  • Einfacher als du denkst! :)



    PHP
    <?php
    include("./config/config.php");
    $query = $connect->prepare('SELECT distinct(message_id) FROM `nachrichten` WHERE `an` = :id and gelesen = 0');
    $query->execute(array('id' => $userID));
    $rowCount = $query->rowCount();
    echo $rowCount;
    ?>

    Ich würde in den PHP Code noch eine Abfrage reinmachen dass es nur Anfragen erlaubt die auch autorisiert sind (mittels Key in GET, Abfrage von welchem Server das kommt oder dergleichen). Auch wenn es eventuell keine vertraulichen Daten sind, sollte man doch immer auf Nummer sicher gehen.

    Ich lese hier nur mit und schreibe ab und zu was zu den Themen rund um Woltlab, PHP, JavaScript, Windows- / Linux Server und Webspaces

  • Einfacher als du denkst! :)



    PHP
    <?php
    include("./config/config.php");
    $query = $connect->prepare('SELECT distinct(message_id) FROM `nachrichten` WHERE `an` = :id and gelesen = 0');
    $query->execute(array('id' => $userID));
    $rowCount = $query->rowCount();
    echo $rowCount;
    ?>

    Wie kann ich in diesem Fall die $userID noch übergeben ? Ich habe eine Funktion in der die Userdaten ausgelesen werden bei jeden aufruf einer Seite.


    in diesem Fall ist die id in der Regel immer $id.

  • Wie kann ich in diesem Fall die $userID noch übergeben ? Ich habe eine Funktion in der die Userdaten ausgelesen werden bei jeden aufruf einer Seite.


    in diesem Fall ist die id in der Regel immer $id.

    Z.B als URL parameter via Get.

    Ich würde an deiner Stelle entweder das ganze verschlüsseln und dann wieder entschlüsseln… oder abfragen einbauen von welchem Skript der Aufruf kam.

  • Wie kann ich in diesem Fall die $userID noch übergeben ? Ich habe eine Funktion in der die Userdaten ausgelesen werden bei jeden aufruf einer Seite

    PHP
    <?php
    include("./config/config.php");
    $userID = $_GET['id'];
    $query = $connect->prepare('SELECT distinct(message_id) FROM `nachrichten` WHERE `an` = :id and gelesen = 0');
    $query->execute(array('id' => $userID));
    $rowCount = $query->rowCount();
    echo $rowCount;
    ?>

    Hier ist sie übergeben, solltest du weitere fragen bzw. ausführlichere Antworten erwarten schreib mir eine PN.