wahsaga: Gästebuchscript überarbeitet.

Beitrag lesen

hi,

Ist mir scheinbar auch gelungen, allerdings würde ich mich freuen, wenn ein paar von euch Cracks drüberschauen könnten, um mir vielleicht die eine oder andere syntaktische Ungereimtheit aufzuzeigen, da ich noch nicht allzu fit bin in Sachen PHP.

ohne mich als crack bezeichnen zu wollen, ein paar kleine anmerkungen von mir:

  • zu oberst hast du das formular stehen, ausserhalb des php-bereiches, als reinen HTML-code.
    dann eröffnest du den php-bereich wieder, setzt display_errors und error_reporting - und gibst dann einen weiteren HTML-abschnitt per echo aus. dieser enthält nicht eine einzige php-variable, also warum überhaupt ausgabe mit echo? das würde ich umdrehen, also die ausgabe noch oben in den html-bereich mit reinpacken, und ini_set/error_reporting danach aufrufen. ist aber eher eine strukturelle angelegenheit, vermutlich sogar "ansichtssache".

  • if ((isset($_POST['name']) && $_POST['name'] == "") || (isset($_POST['nachricht']) && $_POST['nachricht'] == ""))

das lässt sich eigentlich gleich mit einer anweisung erschlagen, nämlich empty(). diese liefert false, wenn die als argument übergebene variable gar nicht existent, false oder leer ist.
btw, warum prüfst du überhaupt diesen beiden felder, nur um zu schauen, ob du die bisherigen einträge ausgeben solltest?
ich würde dabei einfach nur abfragen, ob der name des submit-buttons _nicht_ übermittelt wurde.

  • for ($i=0; $i<2; $i++) {
    sleep(1);
    flush();
    }
    was bezweckt das?

  • ähnlicher fall wie oben, beim abprüfen, ob das formular abgesendet wurde:
    isset($_POST['send_status']) && $_POST['send_status'] == "ok"
    $_POST['send_status'] wird nur übermittelt, wenn auf den button geklickt wurde. ob dabei jetzt der wert "ok" übermittelt wurde, wäre _mir persönlich_ an dieser stelle vollkommen wurscht.
    klar _könnte_ jemand das formular manipuliert und statt "ok" den wert "kuckuck" übermittelt haben - aber welche auswirkungen sollte dies auf mein script haben, so lange $_POST['send_status'] überhaupt existiert?

-  $filesize = filesize("guestbook/speicher.txt");
 $file = fopen("guestbook/speicher.txt","r");
 $buffer = fread($file,$filesize);
 echo "$buffer";
 fclose($file);
dieser teil steht _fast_ gleich sowohl im if- als auch im else-zweig drin, ist also grösstenteils redundant. lediglich das echo "$buffer"; fehlt im else-zweig.
warum packst du also öffnen der datei und einlesen in $buffer nicht _vor_ die if-abfrage, und nur noch das echo $buffer in den if-zweig?

  • $heute = getdate();
     $month = $heute['month'];
     $mday = $heute['mday'];
     $year = $heute['year'];
     $datum = "$mday. $month $year";
    verwendung von date() mit entsprechender formatierung des datums würde ich hier vorziehen.

-  if (!empty($_POST['url'])) {
  if(substr($url, 0, 7) == "http://") {
   $homepage = "<a href="$url">$url</a>";
  } else {
   $homepage = "<a href="http://$url">http://$url</a>";
das mache ich immer leicht anders:
zuerst ersetze ich mit str_replace "http://" durch nichts - _wenn_ es drin stand, ist es jetzt weg, wenn's nicht drin stand, ist der string so wie vorher. danach brauche ich nur noch _ein_ echo ohne jegliche abfragen, bei dem "http://" automatisch davorgesetzt wird.

  • $text = stripslashes($text);
    das sollte nicht einfach auf verdacht gemacht werden, sondern nur dann, wenn formulareingaben auch mit slashes versehen werden. wenn dies - auf anderem webspace, oder nach einem update der php-version nämlich mal nicht mehr der fall ist, werden "normale" \ ebenfalls rausgekegelt - aus der eingabe 3/4 wird 34.
    deshalb besser vorher mit get_magic_quotes_gpc() überprüfen, ob diese option überhaupt aktiviert ist.

  • und unten $_POST['view_guestbook'] schon wieder das einlesen der datei in $buffer - wie gesagt, redundant, pack's ganz nach vorne.

  • was ein wenig unangenehm auffällt, ist die fehlende fehlerbehandlung bei den dateioperationen. wenn das öffnen oder schreiben mal schief geht, wie reagierst du darauf? wenn du es gar nicht tust, werden dem nutzer dann wieder die unschönen fehlermeldungen von PHP präsentiert.

gruss,
wahsaga