Pow3rus3r: PHP Gästebuch => Problem :-(

Hi,

ich habe ein PHP Gästebuch geschrieben. leider habe ich jetzt ein kleines Problem:

Warning: Supplied resource is not a valid File-Handle resource in /home/www/htdocs/pow3rus3r.de/gbook//gbook.php on line 27

und

Warning: fopen("book.php","a") - Permission denied in /home/www/htdocs/pow3rus3r.de/gbook/gbook.php on line 23

Das 2. hab ich gelöst, glöaub ich. Da war was mit den Berechtigungen im argen. Aber zum ersten Fehler weiß ich keine Lösung :(

Hier ist der Code der "gbook.php", vieleicht könnt ihr ja was damit anfangen. Vielen Dank im Vorraus :)

Code:

<HTML>   <HEAD>     <TITLE>Gästebuch</TITLE>   </HEAD> <BODY> <? // ACHTUNG!!! Damit das Gästebuch funktionieren kann, // müssen Sie das Verzeichnis in dem das Gästebuch liegt // mit "chmod 777" für jeden les- und schreibbar machen. // Sonst kann nicht auf das zugegriffen werden.

$datum = date("d.m.Y");     $uhr = date("H:i:s");

// Wo das Gästebuch abgelegt ist     $pfad = "http://www.pow3rus3r.de/gbook/book.php";

// Was ausgegeben wird, wenn es zu einem Fehler kommt     $fehler = ("Feld darf nicht leer sein!");

if ($name && $kommentar && $email) {     // Einträge okay, kann ins Gästebuch schreiben         if (!($fp = fopen($pfad, "a"))) {             echo ("Fehler beim Öffnen des Gästebuches!");             exit;         }         if (!($pos = ftell($fp))) {         // $pos==0: erster Eintrag ins Gästebuch - Überschrift etc. erzeugen!

$titel = " <html> <head> <title>Gästebuch</title> <link rel="StyleSheet" href="http://www.pow3rus3r.de//ubbthreads/stylesheets/theblues.css" type="text/css" media="all"> </head> <html>

<div align="center"> <body bgcolor="#72A9E7">             ";

if (!($ok = fwrite($fp, $titel, strlen($titel)))) {                 echo "Fehler beim Schreiben ins Gästebuch!";             exit;             }         }

$eintrag = ("   <center>

<table border="1" cellspacing="0" style="border-collapse: collapse; border-style: solid" bordercolor="#2D71FF" width="95%" height="13" cellpadding="0">         <tr>           <td width="616" height="3" bgcolor="#5A8EE4">           <b><font face="Microsoft Sans Serif"> ..:: <A HREF="mailto:$email">$name</A> ( <a href="http://$home">Homepage</a> ) schrieb:</font></b></td>           <td width="126" height="3" bordercolor="#5A8EE4" bgcolor="#5A8EE4"><p align="right">           <b><font face="Arial" size="1">$datum $uhr Uhr</font></b></td>         </tr>         <tr>           <td width="100%" height="10" align="left" valign="top" colspan="2"><p>           <font face="Microsoft Sans Serif" size="2">$kommentar</font></p> <p>           <font face="Microsoft Sans Serif" size="2">IP: $REMOTE_ADDR</font></p>                     </td>         </tr>         <tr>           <td width="100%" height="10" align="left" valign="top" colspan="2"><p>           <img border="0" src="http://www.pow3rus3r.de/images/posting/blau-orange.jpg" width="100%" height="100%"></td>         </tr>       </table> <br>

</center> ");

if (!($ok = fwrite($fp, $eintrag, strlen($eintrag)))) {             echo ("<B>Fehler beim Beschreiben des Gästebuchs!</B>");             exit;         }         fclose($fp);         // Nachricht an den User nach         // Abschicken des Formulars: echo ("<html><head><title>Gästebuch</title></head><body bgcolor="#72A9E7" font face="Arial" size="3" onload="window.location.href='gbook.php';"><center>");         echo ("Danke für deinen Eintrag.<br>");         echo ("Du wirst nun automatisch zum Gästebuch weitergeleitet.<br>");         echo ("Solltest du nicht weitergeleitet werden, klicke bitte hier:<br>");         echo ("<A HREF="$pfad">Zurück zum Gästebuch.</center></A>");         exit;     }

if ($ausgefuellt) {         // Wenn der Name nicht ausgefüllt wurde:         if (! $name) {             $name_fehlt = $fehler;         }         // Wenn die E-mail-Adresse fehlt:         if (! $email) {             $email_fehlt = $fehler;         }         // Wenn das Kommentarfeld nicht ausgefüllt wurde:         if (! $kommentar) {             $kommentar_fehlt = $fehler;         }     }       ?>   <!-- das Formular mit den Eingabefelden --> <html>

<head>

<title>Gästebuch</title> <link rel="StyleSheet" href="http://www.pow3rus3r.de//ubbthreads/stylesheets/theblues.css" type="text/css" media="all"> </head>

<body bgcolor="#72A9E7"> <p align="center"><b><font face="Microsoft Sans Serif" size="6" color="#FFFFFF"> ..:: Gästebuch ::..</font></b></p>   <P> <FORM ACTION="gbook.php" METHOD="post">     <INPUT TYPE="hidden" NAME="ausgefuellt" VALUE="1">   <center>     <table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="30%" id="AutoNumber3" height="384">       <tr>         <td width="100%" height="384">         <p align="center"><b><font face="Arial">Name</font></b><BR>     <INPUT TYPE="text" NAME="name" SIZE="40" VALUE="<? echo ("$name"); ?>">     <? echo ("$name_fehlt"); ?>         </p>     <P align="center">     <!-- Texteingabefeld für die Email-Adresse -->     <font face="Arial">     <B>E-mail</B></font><BR>     <INPUT TYPE="text" NAME="email" SIZE="40" VALUE="<? echo ("$email"); ?>">     <? echo ("$email_fehlt"); ?>     <P align="center">     <!-- Texteingabefeld die Homepage -->     <font face="Arial">     <B>Homepage (ohne http://)</B></font><BR>     <INPUT TYPE="text" NAME="home" SIZE="40" VALUE="<? echo ("$home"); ?>">     <P align="center">     <font face="Arial">     <!-- Textarea für Kommentare -->     <B>Kommentar</B></font><BR>     <TEXTAREA ROWS=8 COLS=37 NAME="kommentar" WRAP="SOFT"><? echo ("$kommentar"); ?></TEXTAREA>     <? echo ("$kommentar_fehlt"); ?>     <P align="center">     <INPUT TYPE="submit" VALUE="Abschicken">     <INPUT TYPE="reset" VALUE="Zurücksetzen">         <p> </td>       </tr>     </table>     </center>

<br> <?   include "$pfad"; ?> </BODY> </HTML>

  1. Hi,

    könntest du vielleicht die entsprechende Zeile mal hervorheben? Habe echt keine Lust und keine Zeit mich durch das ganze Script zu arbeiten. ;-)

    Viele Grüße
    Ben

  2. Kein Problem:

    <HTML>
      <HEAD>
        <TITLE>Gästebuch</TITLE>
      </HEAD>
    <BODY>
    <?
    // ACHTUNG!!! Damit das Gästebuch funktionieren kann,
    // müssen Sie das Verzeichnis in dem das Gästebuch liegt
    // mit "chmod 777" für jeden les- und schreibbar machen.
    // Sonst kann nicht auf das zugegriffen werden.

    $datum = date("d.m.Y");
        $uhr = date("H:i:s");

    // Wo das Gästebuch abgelegt ist
        $pfad = "http://www.pow3rus3r.de/gbook/book.php";

    // Was ausgegeben wird, wenn es zu einem Fehler kommt
        $fehler = ("Feld darf nicht leer sein!");

    if ($name && $kommentar && $email) {
        // Einträge okay, kann ins Gästebuch schreiben
            if (!($fp = fopen($pfad, "a"))) {
                echo ("Fehler beim Öffnen des Gästebuches!");
                exit;
            }
            if (!($pos = ftell($fp))) {               <<<<~~~~~~~~~~~~~~~ ZEILE 27
            // $pos==0: erster Eintrag ins Gästebuch - Überschrift etc. erzeugen!

    $titel = "
    <html>
    <head>
    <title>Gästebuch</title>
    <link rel="StyleSheet" href="http://www.pow3rus3r.de//ubbthreads/stylesheets/theblues.css" type="text/css" media="all">
    </head>
    <html>

    <div align="center">
    <body bgcolor="#72A9E7">
                ";

    if (!($ok = fwrite($fp, $titel, strlen($titel)))) {
                    echo "Fehler beim Schreiben ins Gästebuch!";
                exit;
                }
            }

    $eintrag = ("
      <center>

    <table border="1" cellspacing="0" style="border-collapse: collapse; border-style: solid" bordercolor="#2D71FF" width="95%" height="13" cellpadding="0">
            <tr>
              <td width="616" height="3" bgcolor="#5A8EE4">
              <b><font face="Microsoft Sans Serif"> ..:: <A HREF="mailto:$email">$name</A> ( <a href="http://$home">Homepage</a> ) schrieb:</font></b></td>
              <td width="126" height="3" bordercolor="#5A8EE4" bgcolor="#5A8EE4"><p align="right">
              <b><font face="Arial" size="1">$datum $uhr Uhr</font></b></td>
            </tr>
            <tr>
              <td width="100%" height="10" align="left" valign="top" colspan="2"><p>
              <font face="Microsoft Sans Serif" size="2">$kommentar</font></p>
    <p>
              <font face="Microsoft Sans Serif" size="2">IP: $REMOTE_ADDR</font></p>
                        </td>
            </tr>
            <tr>
              <td width="100%" height="10" align="left" valign="top" colspan="2"><p>
              <img border="0" src="http://www.pow3rus3r.de/images/posting/blau-orange.jpg" width="100%" height="100%"></td>
            </tr>
          </table>
    <br>

    </center>
    ");

    if (!($ok = fwrite($fp, $eintrag, strlen($eintrag)))) {
                echo ("<B>Fehler beim Beschreiben des Gästebuchs!</B>");
                exit;
            }
            fclose($fp);
            // Nachricht an den User nach
            // Abschicken des Formulars:
    echo ("<html><head><title>Gästebuch</title></head><body bgcolor="#72A9E7" font face="Arial" size="3" onload="window.location.href='gbook.php';"><center>");
            echo ("Danke für deinen Eintrag.<br>");
            echo ("Du wirst nun automatisch zum Gästebuch weitergeleitet.<br>");
            echo ("Solltest du nicht weitergeleitet werden, klicke bitte hier:<br>");
            echo ("<A HREF="$pfad">Zurück zum Gästebuch.</center></A>");
            exit;
        }

    if ($ausgefuellt) {
            // Wenn der Name nicht ausgefüllt wurde:
            if (! $name) {
                $name_fehlt = $fehler;
            }
            // Wenn die E-mail-Adresse fehlt:
            if (! $email) {
                $email_fehlt = $fehler;
            }
            // Wenn das Kommentarfeld nicht ausgefüllt wurde:
            if (! $kommentar) {
                $kommentar_fehlt = $fehler;
            }
        }
          ?>
      <!-- das Formular mit den Eingabefelden -->
    <html>

    <head>

    <title>Gästebuch</title>
    <link rel="StyleSheet" href="http://www.pow3rus3r.de//ubbthreads/stylesheets/theblues.css" type="text/css" media="all">
    </head>

    <body bgcolor="#72A9E7">
    <p align="center"><b><font face="Microsoft Sans Serif" size="6" color="#FFFFFF">
    ..:: Gästebuch ::..</font></b></p>
      <P>
    <FORM ACTION="gbook.php" METHOD="post">
        <INPUT TYPE="hidden" NAME="ausgefuellt" VALUE="1">
      <center>
        <table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="30%" id="AutoNumber3" height="384">
          <tr>
            <td width="100%" height="384">
            <p align="center"><b><font face="Arial">Name</font></b><BR>
        <INPUT TYPE="text" NAME="name" SIZE="40" VALUE="<? echo ("$name"); ?>">
        <? echo ("$name_fehlt"); ?>
            </p>
        <P align="center">
        <!-- Texteingabefeld für die Email-Adresse -->
        <font face="Arial">
        <B>E-mail</B></font><BR>
        <INPUT TYPE="text" NAME="email" SIZE="40" VALUE="<? echo ("$email"); ?>">
        <? echo ("$email_fehlt"); ?>
        <P align="center">
        <!-- Texteingabefeld die Homepage -->
        <font face="Arial">
        <B>Homepage (ohne http://)</B></font><BR>
        <INPUT TYPE="text" NAME="home" SIZE="40" VALUE="<? echo ("$home"); ?>">
        <P align="center">
        <font face="Arial">
        <!-- Textarea für Kommentare -->
        <B>Kommentar</B></font><BR>
        <TEXTAREA ROWS=8 COLS=37 NAME="kommentar" WRAP="SOFT"><? echo ("$kommentar"); ?></TEXTAREA>
        <? echo ("$kommentar_fehlt"); ?>
        <P align="center">
        <INPUT TYPE="submit" VALUE="Abschicken">
        <INPUT TYPE="reset" VALUE="Zurücksetzen">
            <p> </td>
          </tr>
        </table>
        </center>

    <br>
    <?   include "$pfad"; ?>
    </BODY>
    </HTML>

    1. Hi,

      schon gemerkt, dass du den kompletten HEAD-Bereich doppelt ausgibst?

      Bin aber nicht sicher, ob es daran liegen könnte.

      Viele Grüße
      Ben

      1. Hi,

        schon gemerkt, dass du den kompletten HEAD-Bereich doppelt ausgibst?

        Bin aber nicht sicher, ob es daran liegen könnte.

        Viele Grüße
        Ben

        hm? Wo wird der doppelt ausgegeben?

        Du meinst in der gbook.php, weil die book.php per include eingefügt wird?

        1. Hi,

          oh, sorry, hab mich da verguckt... *schäm*

          Muss mal genauer gucken, wo der Fehler liegen könnte...

          Viele Grüße
          Ben

    2. Hallo.

      // Wo das Gästebuch abgelegt ist
          $pfad = "http://www.pow3rus3r.de/gbook/book.php";

      (...)

      if (!($fp = fopen($pfad, "a"))) {

      Also über http die Datei zu öffnen ist vermutlich nicht der leichteste Weg (Doku zu fopen() http://www.php3.de/manual/de/function.fopen.php). Setz doch mal die absolute Adresse am Server ein (/home/www/htdocs/pow3rus3r.de/gbook/gbook.php).

      Grüße aus Würzburg
      Julian

  3. ich habe ein PHP Gästebuch geschrieben. leider habe ich jetzt ein kleines Problem:

    <font face="Microsoft Sans Serif" size="2">$kommentar</font></p>

    Du hast nicht nur ein kleines Problem, sondern drei ganz große, die Du besser bis zu meinem nächsten Besuch beseitigst :)

    Schönen Tag,
    Der Gästebuchterminator.

    PS: Dein Problem mit ftell() hängt wahrscheinlich damit zusammen, daß Du versuchst, eine Datei über den Webserver (http://) mit Schreibzugriff zu öffnen - in Webseiten kann man nicht reinschreiben.
    Öffne die Datei direkt mittels "book.php". Da in book.php kein PHP-Code zu sein scheint, wäre book.html besser geeignet. Du ersparst dem Server die unnötige Suche nach PHP-Code in einer Datei, in der kein PHP-Code vorhanden ist.