Timbugtu: Datenbank für GB

Beitrag lesen

Hallo,
hab versucht so viel wie möglich umzusetzten, ist mir aber nicht alles gelungen.

Also als erstes wird guestbook.php aufgerufen:

<div id="inhalte">

<h1>Gästebuch</h1><br>

<a href="eintragen.php" class="linknormal">Ins Gästebuch eintragen</a><br>

  
<?php  
  
$Eintraege = file("gaestebuch.txt");  
 // Rückwärts durchlaufen:  
  
 for ($i=count($Eintraege)-1; $i>=0; $i--)  
  { $data = explode(" | ", $Eintraege[$i], 4); // Zeile am " | " aufsplitten  
  
    echo htmlspecialchars($data[1]),",";  // erstes Feld  
    echo " E-Mail: ", htmlspecialchars($data[2]);  // zweites Feld  
    echo " ", date("d-m-Y, H:i", $data[0]), ":<br>"; // drittes Feld  
    echo htmlspecialchars(str_replace('\n', '<br>', $data[3])); // Rest des Eintrags  
    echo "<br><br>";  
  }  
  
  
?>  

</div>

Das klappt auch alles wunderbar :-)

Wenn man einen Eintrag machen möchte wird dann eintragen.php aufgerufen:

<!-- Inhalt -->

<div id="inhalte">

<form method="post" action="gb.php">

Ihr Name: <BLOCKQUOTE><input type="text" name="name"><br></BLOCKQUOTE>

E-Mail Adresse: <BLOCKQUOTE><input type="text" name="email"><br></BLOCKQUOTE>

Ihr Eintrag: <BLOCKQUOTE><textarea name="eintrag"></textarea><br></BLOCKQUOTE>

<input type="submit" name="Button" value="Absenden">

</form>

</div>

Und dann das eigentlich gb.php:

<div id="inhalte">

<?php

error_reporting(E_ALL);

$name = (isset($_POST['name']) ? $_POST['name'] : "");
$email = (isset($_POST['email']) ? $_POST['email'] : "");
$eintrag = (isset($_POST['eintrag']) ? $_POST['eintrag'] : "");
$nachricht = " ";
$NeuerEintrag = '%u %s %s %s';
$zeit = time();

if ($name =="" || $email =="" || $eintrag =="") {

echo "Bitte alle Felder korrekt ausfüllen ausfüllen!";

// an der Stelle hatte ich vorher das formular inculded, aber das sollte //ich ändern, aber wie?

} else {

$eintrag = str_replace("\n", '\n', $eintrag);

$NeuerEintrag = sprintf("%u | %s | %s | %s\n",$zeit, $name, $email, $eintrag);

$handle = fopen("gaestebuch.txt", "a");
fwrite($handle, $NeuerEintrag);
fclose($handle);

echo "Eintrag erfolgreich!";

}
?>
</div>
Und da stellen sich mir dann noch ein paar Fragen:

  1. Prüfe, ob das Formular abgesendet wurde oder das Script direkt per URL aufgerufen wurde. Tipp: Wenn das Formular abgesendet wurde, enthält der Request das Name-Value-Pärchen des Submit-Buttons.

Weiß nicht wie das gehn soll...

  1. Wenn das Formular abgesendet wurde:
    3a. Prüfe die eingegebenen Daten auf Richtigkeit nach deinen Kriterien. Überlege dabei, welche Eingaben du als falsch oder nicht erlaubt abweisen musst. Denke auch daran, dass die Eingaben nicht zwangsläufig aus deinem Formular stammen müssen; man kann den Request auch beliebig manipuliert haben.

Da hab ich jetzt das Problem dass ich nciht weiß nach was ich die denn überhaupt prüfen soll.

  1. Gib die HTML-Seite mit dem Formular aus. Trage dabei die in Schritt 1 ermittelten Werte in die Formularfelder ein. Falls du in Schritt 3a festgestellt hast, dass die Daten nicht deinen Kriterien entsprechen, gib an geeigneter Stelle einen Hinweis aus.

Was is damit gemeint?

// Annahme: $name und $email enthalten weder Zeilenumbrüche noch "|"  

>  // Das wurde in der Prüfung (Schritt 3a) sichergestellt.  
>  // $nachricht darf Zeilenumbrüche und "|" enthalten.  
>  // Zeilenumbrüche werden entfernt (maskiert):  
>  $nachricht = str_replace("\n", '\n', $nachricht);  
>  sprintf($NeuerEintrag, "%u | %s | %s | %s\n", time(), $name, $email, $nachricht);  
  
// das hat bei mir nur so geklappt:  
//$NeuerEintrag = sprintf("%u | %s | %s | %s\n",$zeit, $name, $email, //$eintrag);  
  

>  $handle = fopen("gaestebuch.txt", "a");  
>  fwrite($handle, $NeuerEintrag);  
>  fclose($handle);

Das Auslesen hat auf Anhieb direkt geklappt.
Vielen Dank nochmal für die ausführlichen Antworten und für die, die da villeicht noch kommen.

mfg markus