Tom: Nur den letzten Eintrag anzeigen

Beitrag lesen

Hello,

Ich habe auf

http://tipps.project-smooth.com/programmieren/php-gaestebuch-textdatei

einen recht praktischen Script für ein primitives Gästebuch gefunden.

Das ist aber wirklich sehr primitiv gehalten.

<?php
    $timestamp = time();
    if($_POST["xyz"] == "senden")
    {
        $web = $_POST["web"];
        $email = $_POST["email"];
##      Das Umkopieren der Array-Elemeten in "lose" Variablen ist unnötig und sogar
##      kontraproduktiv, weil man dann nicht mehr sofort sehen kann, woher die Werte stammen

if(ereg("http://", $web) == FALSE)
        {
            $web = "http://" . $web;
        }

if(ereg(".", $web) == FALSE)
        {
            $web = "";
        }

if(ereg("@", $email) == FALSE)
        {
            $email = "";
        }

$temp = "\n".date("Y-m-d - H:i",$timestamp). " :: " .$_POST["name"]. " :: "
              . $email . " :: " .$web. " :: "
              . str_replace("\r\n", "", nl2br(stripslashes($_POST["message"]))) . "";

##      Der Trenner für die Felder wird in den übersandten Daten nicht
##      nicht aufgeprüft und ggf. entfern/ersetzt.
##      stripslashes() muss nur benutzt werden, wenn magic_quotes_gpc eingeschaltet
##      war. http://de.php.net/manual/en/function.get-magic-quotes-gpc.php und
##      sollte dann auch auf alle Elemente des Post-Arrays angewandt werden.
##      Das Entfernen von nur "\r\n" kann bei gammeligen Browsern oder gefakten
##      Posts zu Problemen führen. Du solltest "\r\n", "\r", "\n" entfernen lassen,
##      oder aber anders speichern (serialisiertes Array oder CSV-Datei)

##      Die Post-Parameter können HTML, JavaScript enthalten -> siehe Ausgabe

$fh = fopen('guestbook.txt',"a");

##      es fehlt die Abfrage, ob fopen() erfolgreich war

fputs($fh,$temp);
        fclose($fh);
    }
?>

#--- Ausgabe

<?php
    // Dateiformat: date :: name :: email :: website :: nachricht

$daten = file('guestbook.txt');
    $daten = array_reverse($daten);

foreach($daten as $temp)
    {
        $temp = split(' :: ', $temp);
##      die Trenner können z.Zt. auch noch im Text/den Feldinhalten  enthalten sein
##      Du prüfst überhaupt nicht, wieviele Elemente das Array enthält.

echo '<p>';

if($temp[2] == "")
        {
            echo '<h3 class="gbheading">'.$temp[1].'</h3>';
        }
        else
        {
            echo '<h3 class="gbheading"><a href="'.$temp[2].'">'.$temp[1].'</a></h3>';
        }

echo $temp[4].'</p>';

if($temp[3] != "")
        {
            echo '<p><span class="web">website: <strong><a href="'.$temp[3].'" rel="nofollow">'
                . str_replace("http://", "", $temp[3]).'</a></strong></span></p>';
        }
}
?>

Es werden ggf. auch HTML-Inhalte und JavaScript mit ausgegeben.
Das ist nicht sicher, weil die Seite dadurch für Cross-Site-Scripting Attacken missbraucht werden kann.

Zu Deiner Frage:
Da die Datensätze bei ordnungsgemäßer Bentutzung jeweils in einem eignen Element des Arrays $temp liegen, kannst Du jeden einzeln erreichen, also auch nur den ersten, nur den letzten oder wie auch immer.

Dies geht mit den Funktionen
letzter Datensatz: array_pop()   http://de.php.net/manual/en/function.array-pop.php,
erster Datensatz:   array_shift() http://de.php.net/manual/en/function.array-shift.php,
durch direkten Zugriff über den Index

erster Datensatz:
    if (isset($temp[0]))
    {
        ## verarbeite ersten Datensatz
        $_rec = explode('::',$temp[0]);
        print_r($_rec);
    }

letzter Datensatz:

if (isset($temp[count($temp)-1]))
    {
        ## verarbeite letzten Datensatz
        $_rec = explode('::',$temp[count($temp)-1]);
        print_r($_rec);
    }

und weitere Array-Funktionen
http://de.php.net/manual/en/ref.array.php

Liebe Grüße aus dem schönen Oberharz

Tom vom Berg

--
 ☻_
/▌
/ \ Nur selber lernen macht schlau
http://bergpost.annerschbarrich.de