Container mit PHP - MYSQL abfrage dynamisch aktualisieren

SebiPuck

Erfahrenes Mitglied
Hallo,
Ich habe eine kleine Seite geschrieben, welche eine Timeline wie auf Facebook besitzt. Ganz simpel werden hier Texte per INSERT in die MySQl Datenbank eingetragen und zum darstellen auch ausgelesen.

Ein "Beitrag" / Datensatz ist in einem class container (.timeline-element). Das ganze script ist in nem id container (#content-site).

Content-Site sitzt in ner anderen php Datei, welche mit insert in timeline.php geladen wird (timeline-posts.php)

Ich möchte, dass die Posts dynamisch aktualisiert werden. D.h., dass alle 5 Sekunden geguckt wird, ob neue Datensätze da sind, damit man nicht immer mit F5 alles aktualisieren muss...

Mit diesem Script gehts leider nicht (alle posts verschwinden nach 5sec.), da das anscheinend mit dem php nciht ganz funktioniert ...

Code:
function reloadChat () {
    $('#content-site').load('timeline-posts.php #content-site',function () {
         timeout = setTimeout(reloadChat, 5000);
    });
}

Ich bin in AJAX wirklich ein Anfänger, also wäre es sehr nett, wenn ihr nicht einfach sagt, was ich für funktionen dafür brauche, sondern mir ein Beispiel schreiben könnt (dann verstehe ich es wesentlich schneller).

Vielen Dank im Voraus,
LG
 
Versuch es mal bei der setTimeout-Methode in Verbindung mit dem zugehörigen window-Objekt:
Javascript:
function reloadChat () {
    $('#content-site').load('timeline-posts.php #content-site', function () {
         window.setTimeout(reloadChat, 5000);
    });
}
 
Zuletzt bearbeitet:
@SpiceLab Das ist zu 100% derselbe Code. Alle Eigenschaften und Methoden des window-Objekts sind global.

Kannst du den HTML-Quellcode der timeline-posts.php zeigen?
Ständig ein komplettes HTML-Dokument zu laden, um nur ein div#content-site zu extrahieren, ist höchst ineffizient. Besser wäre ein Skript, das nur die Timeline-Posts ausgibt. Eine andere Möglichkeit in Bezug auf deine AJAX-Lösung wäre Long Polling oder Websockets.
 
Code:
<div id="content-site">
                <form id="post" action="timeline.php?page=finish" method="post">
                   
                    <textarea id="text" name="text" onfocus="document.getElementById('submit').style.visibility ='visible', clearContents(this); changeHeight(); changeTextarea();">Schreibe etwas...</textarea>

                   
                    <input class="user-edit-submit" type="submit" id="submit" value="Post" style="visibility: hidden;">
                </form>
               
                <?php
                   
                    $name = $_SESSION["username"];
                   
                    $date = date("j.n.Y");
                    $time = date("H:i");
                   

                   
                    if (isset($_POST["text"])) { //wenn text-area leer, wird nichts eingetragen !
                       
                        $text = $_POST["text"];
                        include 'functions.php';
                        $text = url2link($text);
                       
                        include 'new-content-mail.php'; //sends a mail to all users
                       
                        $eintrag = "INSERT INTO timeline
                            (user, text, date, time)

                            VALUES
                                ('$name', '$text', '$date', '$time')";

                        $eintragen = mysql_query($eintrag);
                       
                        $user = $_SESSION["username"];
                        $query = "SELECT post_count FROM login WHERE user='$user' "; //brings the current post_count from mysql       
                        $result = mysql_query($query);
                                   
                        while ($row = mysql_fetch_array($result))
                        {
                            $count = "$row[post_count]";
                        }
                       
                        $count ++;
                        $eintrag = "UPDATE login SET post_count='$count' WHERE user='$user'";

                        $eintrag = mysql_query($eintrag);
                           
                    }
                   
                    $table = mysql_query("SELECT * FROM timeline ORDER BY id DESC LIMIT 0,15");
                   
                    while($row = mysql_fetch_assoc($table))
                    {
                        ?>
                            <div class="timeline-element">
                                <div class="meta">
                                    <div class="timeline-post-username">
                                           
                                        <?php                                               
                                            echo $row["user"]; //gibt den Inhalt der Spalte user aus.
                                        ?>
                                    </div>
                                           
                                    <div class="timeline-post-date">
                                        <?php
                                            echo " ". $row ["date"] . " um ". $row ["time"]
                                        ?>
                                    </div>
                                </div>
                                <div class="text-base">
                                    <p>
                                    <?php
                                        echo $row["text"];   
                                    ?>
                                    </p>
                                </div>
                            </div>
                            <?php
                            }
                            ?>
</div>

Hier ^^ Ich weiß, mysql_ .. wird noch geändert, bitte fügt mal in dem code ein, was ich für einen gewünschten dynamischen effekt ändern müsste :)
Danke im Voraus,
LG
 
@SpiceLab Das ist zu 100% derselbe Code. Alle Eigenschaften und Methoden des window-Objekts sind global.

Kannst du den HTML-Quellcode der timeline-posts.php zeigen?
Ständig ein komplettes HTML-Dokument zu laden, um nur ein div#content-site zu extrahieren, ist höchst ineffizient. Besser wäre ein Skript, das nur die Timeline-Posts ausgibt. Eine andere Möglichkeit in Bezug auf deine AJAX-Lösung wäre Long Polling oder Websockets.

Achja, der Code hier is nur da, um mitzuzählen, wie viele Beiträge man schon verfasst hat:

Code:
 $user = $_SESSION["username"];
                        $query = "SELECT post_count FROM login WHERE user='$user' "; //brings the current post_count from mysql     
                        $result = mysql_query($query);
                                  
                        while ($row = mysql_fetch_array($result))
                        {
                            $count = "$row[post_count]";
                        }
                      
                        $count ++;
                        $eintrag = "UPDATE login SET post_count='$count' WHERE user='$user'";
                        $eintrag = mysql_query($eintrag);
Also für das hier nich relevant :)
 
Zumindest dein letzter Codeabschnitt ist unnötig ineffizient. Du kannst innerhalb eines UPDATE-Queries die Anzahl der Beiträge inkrementieren. Und wozu eine while-Schleife? Und wozu die Anführungszeichen um $row[post_count]?
Irgendwie schaut alles so zusammengebastelt aus, da würde ich dir lieber ein Grundlagentutorial über PHP in Zusammenhang mit MySQL empfehlen.
 
Zumindest dein letzter Codeabschnitt ist unnötig ineffizient. Du kannst innerhalb eines UPDATE-Queries die Anzahl der Beiträge inkrementieren. Und wozu eine while-Schleife? Und wozu die Anführungszeichen um $row[post_count]?
Irgendwie schaut alles so zusammengebastelt aus, da würde ich dir lieber ein Grundlagentutorial über PHP in Zusammenhang mit MySQL empfehlen.

Da bin ich gerade auch dabei. Es geht auch nicht darum, die Anzahl der Zeilen zu zählen, sondern jedem User zu sagen, wie viele dieser schon verfasst hat.

Jedenfalls back 2 topic. Wie kann ich nun dynamisch aktualisieren ?
Danke im Voraus,
LG
 

Neue Beiträge

Zurück