Lorenzo: Gästebuch funktioniert nicht?!

Hallo Leute, ich habe da ein Gästebuch geschrieben (nach einem Buch, fange gerade erst an PHP zu schreiben), das funktioniert aber leider nicht. Kann mal jemand drüber schauen, warum es nicht funzt ? Hier der Code:

<html>
<head>
<title>Gaestebuch</title>
</head>
<body>
<h1>Unser Gästebuch</h1>
<?php

//$flag==1, wenn das Formular abgeschickt wurde

if($flag==1)
{
//Leerstellen entfernen
$absender=trim($absender);
$betreff=trim($betreff);
$message=trim($message);
//evtl. vorhandenen HTML-Code entfernen
$absender=strip_tags($absender);
$betreff=strip_tags($betreff);
$message=strip_tags($message);

//testen, ob Felder ausgefüllt sind
if(!$absender){$fehler="Bitte geben sie eine Absenderinformation ein. <br>";}
if(!$betreff){$fehler="Bitte geben sie eine Betreffinformation ein. <br>";}
if(!$message){$fehler="Bitte geben sie eine Nachricht ein. <br>";}

// Wenn Fehler vorhanden, die Textausgabe bla bla bla

if($fehler)
{
$meldung="<h2><font color=red>".$fehler."</font></h2>";
unset($flag);
               }
else
{

// sql-String zusammenbauen
$tabellenname="gastbuch"  ;
$sql="INSERT INTO $tabellenname (absender, betreff, message, datum) values ('$absender', '$betreff', '$message', now())";

$link = mysql_connect("localhost", "gehtniemanden", "wasan");
mysql_select_db("istdochegal", $link);
mysql_query($sql, $link);
$meldung="<h2><font color=red>Ihre Angaben wurden aufgenommen und werden in kürze in unserem Gästebuch eingetragen.</font></h2><a
href='www.openclosed.de/test.php'>Weiter</a>";
}

echo $meldung;
}// Ende $flag==1
if(!$flag)
{
?>

<form action='<?php echo $_SERVER['PHP_SELF']?>' method=post>
<input type=hidden name=flag value=1>
<p>Ihr Name:<br>
<input type=text name=absender value='<?php echo $absender; ?>'>
<p>Betreff: <br>
<input type=text name=betreff value='<?php echo$betreff; ?>'>
<p>Ihre Nachricht:<br>
<textarea name=message>
<?php echo $message; ?>
</textarea>
<br>
<input type=submit>
</form>

<?php
}
?>

</body></html>

  1. Hallo,

    if($flag==1)

    du solltest dir mal folgendes anschauen

    $sql="INSERT INTO $tabellenname (absender, betreff, message, datum) values ('$absender', '$betreff', '$message', now())";

    und dann noch mal folgendes

    mfg
    Twilo

    1. Danke schonmal für die Antwort...

      Gut zu wissen, dass was falsch ist, aber ich lerne besser am Beispiel :). Kannst du mir eventuell verraten (wenn es nicht viel Aufwand ist), wie ich da etwas korrigieren kann ?

      Ach ja, wie finde ich denn heraus, ob mein Server mit Register Globals off oder on arbeitet ?

      Danke !

      MfG, Lore

      1. Hallo,

        Gut zu wissen, dass was falsch ist, aber ich lerne besser am Beispiel :). Kannst du mir eventuell verraten (wenn es nicht viel Aufwand ist), wie ich da etwas korrigieren kann ?

        dafür gibt es mysql_escape_string bzw mysql_real_escape_string

        Ach ja, wie finde ich denn heraus, ob mein Server mit Register Globals off oder on arbeitet ?

        erstelle eine Datei und rufe phpinfo(); auf

        mfg
        Twilo

      2. Ach ja, wie finde ich denn heraus, ob mein Server mit Register Globals off oder on arbeitet ?

        Du solltest immer von register_globals = off ausgehen. Zum einen ist es sicherer und zum anderen weißt du nie, unter welcher Umgebung deine Scripte "irgendwann einmal" laufen sollen. Für register_globals = off geschriebene Scripte laufen auch auf Servern, wo register_globals eingeschaltet ist - umgekehrt geht es nicht.

        Gruß

        Krueger

      3. Moin!

        Gut zu wissen, dass was falsch ist, aber ich lerne besser am Beispiel :). Kannst du mir eventuell verraten (wenn es nicht viel Aufwand ist), wie ich da etwas korrigieren kann ?

        Ich habe mir deinen Code nicht genau angeschaut, aber vielleicht hilft dir ein Blick in meine Dokumentation „Sicherheit“ mit PHP/CGI, MySQL weiter.

        Viele Grüße,
        Robert

  2. Lieber Lorenzo,

    $meldung="<h2><font color=red>Ihre Angaben wurden aufgenommen und werden in kürze in unserem Gästebuch eingetragen.</font></h2><a
    href='www.openclosed.de/test.php'>Weiter</a>";

    wohin soll der Link denn führen? Da fehlt das Protokoll, also wird er in ein Unterverzeichnis "www.openclosed.de" und dort auf die Datei "test.php" verweisen...

    Wenn Dein GB dann einmal einsatzbereit ist, dann wird dich sicherlich das erst neulich hier diskutierte Thema "SPAM im Gästebuch" interessieren.

    Liebe Grüße aus Ellwangen,

    Felix Riesterer.

  3. Moin!

    […] ich habe da ein Gästebuch geschrieben (nach einem Buch, fange gerade erst an PHP zu schreiben), das funktioniert aber leider nicht. Kann mal jemand drüber schauen, warum es nicht funzt ?

    Ohne den ganzen Code mit all seinen Fehlern und Schwachstellen zu zitieren: So etwas steht tatsächlich in Büchern? Das finde ich erschreckend! Dein Beispiel erzieht den unerfahrenen PHP-Programmierer zum Sonnenscheinprogrammieren ohne Rücksicht auf Sicherheitslücken. Den Buchautor müsste man wegen grober Fahrlässigkeit belangen.

    Viele Grüße,
    Robert