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
