KD-one: Gästebuchscript überarbeitet.

Beitrag lesen

Hi wahsaga,
Öhm ja, wie gesagt, das Script stammt nicht von mir, ich habe zur Zeit nur versucht, die Notices wegzubringen.

  • 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".

Nuja, standardmässig setze ich ja Error-reporting auf E_NONE. Das ist jetzt nur zum debuggen so gemacht.

  • 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.

Uups, das wusste ich nicht. Also genügt hier
if (empty($_POST['name'] || $_POST['nachricht')

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.

Nein, diese beiden Felder sind Pflichtfelder, bei nichtausfüllen wird  nachfolgende Anweisung ausgeführt.

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

Dieser Teil stammt nicht von mir, aber imho sollte damit $buffer eingelesen und angezeigt werden. Im ursprünglichen Gästebuch wurden ja die bestehenden Einträge sofort angezeigt und sollten wohl mit diesen Zeilen bei einem Fehlposting wieder eingelesen und angezeigt werden.
Dieser Teil wird wahrscheinlich in weiterer Folge durch eine Fehlermeldung ersetzt werden.

  • ä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?

Ja, ist eine Überlegung, die nicht von der Hand zu weisen ist.

-  $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.

Dieser Teil stammt ebenfalls nicht von mir, ich habe ihn nur Überarbeitet, um die, diesen Teil betreffenden; Notices wegzubekommen.
In diesem Zusammenhang gibt es sowieso noch weiter unten eine Redundanz bzw. offensichtlich nicht gebrauchte Anweisung, deshalb werde ich mir diesen Teil auch gesondert vornehmen, sobald ich mich in date() eingelesen habe.

-  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.

Stimmt, das würde das Script deutlich verkürzen.

  • $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.

Stimmt. Da diese Option bei mir aktiviert ist, habe ich diesen Teil eingefügt und nicht bedacht, das es besser wäre, das Ganze mit einer Abfrage zu koppeln.

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

Ja, werde ich machen. ;-)

  • 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.

Mit error_reporting (E_NONE) ?
Aber prinzipiell gebe ich dir recht, da sollte man  wohl mit or die was machen.
*grmpf* ich hätte mich doch wohl nicht dazu hinreissen lassen sollen, das Script zu reparieren, sondern besser gleich ein neues schreiben...
Danke dir für deine Tips.

Gruß

Kurt

--
Nein, ich beantworte keine Anfragen per e-mail.
ss:( zu:) ls:[ fo:) de:] va:| ch:| sh:( n4:° rl:( br:? js:| ie:% fl:( mo:?
"Tadele nicht den Fluss, wenn du ins Wasser faellst."  (ind. Sprichwort)
http://elektro-dunzinger.at
http://shop.elektro-dunzinger.at