Mein Gästebuch

Alles, was PHP betrifft, kann hier besprochen werden.

Mein Gästebuch

Postby 1Euro » 23. September 2005 17:09

Hallo,
ich habe vor einer kürtzeren zeit ein Gästebuch Programmiert. Es lief mit PHP und MySQL, heute wollte ich mal wieder eine Erweiterung einbauen und habe SQLite eingebaut. Anfürsich fungtioniert es auch ganz gut nur beim Ausgeben zeigt er probleme. Das Script sollte so laufen wie ich es hier reinstelle einfach den Code in eine Datei mit dem Namen der in der Überschrift steht (Text über code) speichern.

index.php (problemdatei):
Code: Select all
<?
   session_start();
   IF (!file_exists('db.php')) {
        die('<meta http-equiv="refresh" content="0;URL=setup.php">'); }
   include "db.php";
   IF (file_exists('farbe.htm')) {
        include "farbe.htm"; }
   IF ($sql == "mysql") {
      @mysql_connect($host, $user, $pass) OR   
         die("Bitte Benachrichtigen sie ihren Gästebuchadmin! Irrgendwetwas stimmt mit der Datenbank Verbindung nicht!");   
      mysql_select_db($db) OR       
         die("Bitte benachrichtigen sie ihren Admin, die Datenbank konnte nicht geöfnet werden!");
   } elseif ($sql == "sqlite") {
        if ($db = sqlite_open('gbuch', 0666, $sqliteerror)) {
        } else {
         die("Es konnte kein Kontackt zur SQLite Datenbank erstellt werden!<br />Grund:<br />".$sqliteerror);
      }
   }
   echo '<CENTER><H3>Gaestebuch</H3></CENTER>';
   $sql = "SELECT text, user, email, date, IP FROM text ORDER BY date DESC;";
   IF ($sql == "mysql") {
      $result = mysql_query($sql);
   } elseif ($sql == "sqlite") {
   }
   if($result===false) {
      die("Konnte leider ihre Einträge nicht aus der Datenbank laden!"); }
   $sqlt = "SELECT text, user, email, date FROM text;";
   IF ($sql == "mysql") {   
      $resultt = mysql_query($sqlt);
      $rew = mysql_fetch_assoc($resultt);
      IF ($rew['text'] == "") {
           echo '<CENTER>Es wurde noch kein Eintrag gemacht!!!</CENTER><br />';         
      } else {
          echo '<CENTER>';
           echo '<TABLE BORDER=1>';
           echo '<TR ALIGN=center>';
           echo '<TH>Text</TH>';
           echo '<TH>Von:</TH>';
           echo '<TH>E-mail:</TH>';
           echo '<TH>Datum:</TH>';
           echo '<TH>IP Adresse:</TH>';
           echo '</TR>';
         while($row = mysql_fetch_assoc($result)) {
              echo '<TR ALIGN=center>';
              echo '<TD>'.$row['text'].'</TD>';
              echo '<TD>'.$row['user'].'</TD>';
              echo '<TD><a href="mailto:'.$row['email'].'">'.$row['email'].'</A></TD>';
              echo '<TD>'.$row['date'].'</TD>';
              IF (isset($_COOKIE['user'])) {
                   echo '<TD>'.$row['IP'].'</TD>';
              } else {
                 echo '<TD>gelogt!</TD>';
              }
              echo '</TR>';
         }
         echo '</TABLE>';
         echo '</CENTER>';
      }
   } else {
      $rew = @sqlite_array_query($db, $sqlt);
      IF ($rew['text'] == "") {
          echo $rew['text'];
           echo '<CENTER>Es wurde noch kein Eintrag gemacht!!!</CENTER><br />';         
      } else {
          echo '<CENTER>';
           echo '<TABLE BORDER=1>';
           echo '<TR ALIGN=center>';
           echo '<TH>Text</TH>';
           echo '<TH>Von:</TH>';
           echo '<TH>E-mail:</TH>';
           echo '<TH>Datum:</TH>';
           echo '<TH>IP Adresse:</TH>';
           echo '</TR>';
         while($row = @sqlite_array_query($db, $sql)) {
              echo '<TR ALIGN=center>';
              echo '<TD>'.$row['text'].'</TD>';
              echo '<TD>'.$row['user'].'</TD>';
              echo '<TD><a href="mailto:'.$row['email'].'">'.$row['email'].'</A></TD>';
              echo '<TD>'.$row['date'].'</TD>';
              IF (isset($_COOKIE['user'])) {
                   echo '<TD>'.$row['IP'].'</TD>';
              } else {
                 echo '<TD>gelogt!</TD>';
              }
              echo '</TR>';
         }
         echo '</TABLE>';
         echo '</CENTER>';
      }
   }
   IF ($sql == "mysql") {
      IF ($_POST['step'] == 1) {
           $name = $_POST['username'];
           IF ($name == "") {
              echo '<CENTER>Der Username fehlt!</CENTER>';
            die('<meta http-equiv="refresh" content="3;URL=index.php">');           
           }
           $email = $_POST['email'];
           IF ($email == "") {
              echo '<CENTER>Deine E-mail addresse fehlt!</CENTER>';
            die('<meta http-equiv="refresh" content="3;URL=index.php">');
         }           
           $text = $_POST['text'];
           IF ($text == "") {
            echo '<CENTER>Du hast den Text vergessen!</CENTER>';
            die('<meta http-equiv="refresh" content="3;URL=index.php">');
         }
         $ipadresse ="$REMOTE_ADDR";
           $sql = "INSERT INTO text (text, user, email, date, IP)
                   VALUES ('$text','$name','$email',NOW(),'$ipadresse');";
         $result = mysql_query($sql);
         if($result===false) {
            die("Konnte leider Ihre Registrationsdaten nicht abspeichern: ".mysql_error()); }
         echo '<CENTER>Deine Nachricht wurde erfolgreich eingetragen!</CENTER>';
         echo '<meta http-equiv="refresh" content="3;URL=index.php">';
      } else {
         echo '<CENTER>Möchten sie selber eine Nachricht schreiben?</CENTER><br />';
         echo '<CENTER>Hier:</CENTER><br />';
         echo '<form method="post" action="index.php">';
         echo '<CENTER>Username: <input type="text" name="username"></CENTER>';
         echo '<br /><CENTER>E-mail: <input type="text" name="email"></CENTER>';
         echo '<br /><CENTER>Text:<TEXTAREA NAME="text" ROWS="5" COLS="50" WRAP></TEXTAREA></CENTER>';
         echo '<input type="hidden" name="step" value="1">';
         echo '<br /><CENTER><input type="submit" value="Absenden!"></CENTER>';
      }
   } else {
      IF ($_POST['step'] == 1) {
          echo 't';
           $name = $_POST['username'];
           IF ($name == "") {
              echo '<CENTER>Der Username fehlt!</CENTER>';
            die('<meta http-equiv="refresh" content="3;URL=index.php">');           
           }
           $email = $_POST['email'];
           IF ($email == "") {
              echo '<CENTER>Deine E-mail addresse fehlt!</CENTER>';
            die('<meta http-equiv="refresh" content="3;URL=index.php">');
         }           
           $text = $_POST['text'];
           IF ($text == "") {
            echo '<CENTER>Du hast den Text vergessen!</CENTER>';
            die('<meta http-equiv="refresh" content="3;URL=index.php">');
         }
         $ipadresse ="$REMOTE_ADDR";
           $sql = "INSERT INTO text (text, user, email, date, IP)
                   VALUES ('$text','$name','$email','','$ipadresse');";
         $result = sqlite_query($db, $sql);
         if($result===false) {
            die("Konnte leider Ihre Registrationsdaten nicht abspeichern: ".mysql_error()); }
         echo '<CENTER>Deine Nachricht wurde erfolgreich eingetragen!</CENTER>';
         echo '<meta http-equiv="refresh" content="3;URL=index.php">';
      } else {
         echo '<CENTER>Möchten sie selber eine Nachricht schreiben?</CENTER><br />';
         echo '<CENTER>Hier:</CENTER><br />';
         echo '<form method="post" action="index.php">';
         echo '<CENTER>Username: <input type="text" name="username"></CENTER>';
         echo '<br /><CENTER>E-mail: <input type="text" name="email"></CENTER>';
         echo '<br /><CENTER>Text:<TEXTAREA NAME="text" ROWS="5" COLS="50" WRAP></TEXTAREA></CENTER>';
         echo '<input type="hidden" name="step" value="1">';
         echo '<br /><CENTER><input type="submit" value="Absenden!"></CENTER>';
      }
   }
   IF (isset($_COOKIE['user'])) {
        echo 'Zum Konfigurationstool!<br />';
        echo '<a href="admin.php">Hier!</A>';
   } else {
      echo 'Zum Admin Login!<br />';
      echo '<a href="admin.php">Hier!</A>';
   }
   echo '<br /><CENTER>Version 1.3 Alpha</CENTER><br /><CENTER>Geschrieben von: 1Euro</CENTER>';
?>


setup.php:
Code: Select all
<?
   session_start();
   $step = $_POST['step'];
   IF (file_exists('db.php') AND $step != 3) {
        die('Tut mir leid dieses Gästebuch wurde bereits installiert!'); }
   IF ($step == "") {
        $step = 0;
        echo '<CENTER><H3>Installationsschritt: "'.$step.'."</H3></CENTER><br />';
        echo 'Willkommen bei der Installation dieses Gästebuches!<br />';       
        echo 'Bitte bevolgen sie vollgende Anweisungen um das gästebuch richtig zu installieren!<br />';       
        echo 'Waehlen sie hier bitte aus ob sie als Datenbank MySQL oder SQLite verwenden möchten.<br />';
        echo 'Wenn sie SQLite verwenden, und es nicht fungtioniert (fehlermeldungen kommen) muessen sie das Gaestebuch loeschen und neu machen!<br />';
        echo '<form method="post" action="setup.php">';
        echo '<input type="checkbox" name="sql" value="sqlite">SQLite';
        echo '<input type="checkbox" name="sql" value="mysql">MySQL';
      echo '<input type="hidden" name="step" value="1">';
      echo '<br /><input type="submit" value="Absenden!">';
   } elseif ($step == 1 AND $_POST['sql'] == "sqlite") {
        echo '<CENTER><H3>Installationsschritt: "'.$step.'."</H3></CENTER>';
       echo 'Im volgenden Formular müssen sie Adminusername und Passwort fuer den Kofigurationsbereich eingeben.<br />';
        echo '<form method="post" action="setup.php">';
        echo '<br />Adminusername: <input type="text" name="user">';
      echo '<br />Adminpasswort: <input type="password" name="passwd">';
      echo '<br />Adminpasswortwiederhollung: <input type="password" name="passwdw">';
      echo '<input type="hidden" name="step" value="2">';
      echo '<input type="hidden" name="sql" value="sqlite"';
      echo '<br /><input type="submit" value="Absenden!">';
   } elseif ($step == 2 AND $_POST['sql'] == "sqlite") {
        IF ($_POST['passwd'] == $_POST['passwdw']) {
           echo '<CENTER><H3>Installationsschritt: "'.$step.'."</H3></CENTER>';
           $datei = fopen('db.php','w+');
           fwrite($datei,'
                  <?
                  $sql = "'.$_POST['sql'].'";
                  ?>');
           fclose($datei);
           $nextdatei = fopen('farbe.htm','w+');
           fwrite($nextdatei,'
                  <?
                  IF ($titel == "")
                    { echo \'<HTML><HEAD><TITLE>Gaestebuch.</TITLE>\';
                  } elseif ($titel == "admin") {
                       echo \'<HTML><HEAD><TITLE>Gaestebuch Admintool.</TITLE>\';
                  }
                  echo \'</HTML>\';
                  ?>');
         if ($db = sqlite_open('gbuch', 0666, $sqliteerror)) {
            $sql = "CREATE TABLE text (
                       text TEXT,
                       user TEXT,
                       email TEXT,
                       date DATETIME,
                       IP VARBINARY(12));";
            $result = sqlite_query($db, $sql);
            if($result===false) {
               die("Konnte Tabelle text nicht Abspeichern!<br />Grund:<br />".$sqliteerror); }
            $sql = "CREATE TABLE user (
                       user TEXT,
                       passwd TEXT);";
            $result = sqlite_query($db, $sql);
            if($result===false) {
               die("Konnte Tabelle user nicht Abspeichern!<br />Grund:<br />".$sqliteerror); }
            $sql = "CREATE TABLE extra (
                       hfarbe VARCHAR(20),
                       tfarbe VARCHAR(20));";
            $result = sqlite_query($db, $sql);
            if($result===false) {
               die("Konnte Tabelle extra nicht Abspeichern!<br />Grund:<br />".$sqliteerror); }
            $user = $_POST['user'];
            $passwd = $_POST['passwd'];
            $sql = "INSERT INTO user (user, passwd)
                    VALUES ('$user','$passwd');";
            $result = sqlite_query($db, $sql);
            if($result===false) {
               die("Konnte Tabelle user nicht beschreiben!<br />Grund:<br />".$sqliteerror); }
            $sql = "INSERT INTO extra (hfarbe, tfarbe)
                    VALUES ('white','black');";
            $result = sqlite_query($db, $sql);
            if($result===false) {
               die("Konnte Tabelle extra nicht beschreiben!<br />Grund:<br />".$sqliteerror); }
            echo 'Die Installation wurde erfolgreich abgeschlossen!';
         } else {
            die("Es konnte kein Kontackt zur SQLite Datenbank erstellt werden!<br />Grund:<br />".$sqliteerror);
         }
      } else {
          die("Das Passwort und das bestaetigungs Passwort stimmen nicht miteinander ueberein.");
      }         
   } elseif ($step == 1 AND $_POST['sql'] == "mysql") {
        echo '<CENTER><H3>Installationsschritt: "'.$step.'."</H3></CENTER><br />';
        echo '<form method="post" action="setup.php">';
      echo 'Datenbankhost: <input type="text" name="host">';
      echo '<br />Datenbankusername: <input type="text" name="user">';
      echo '<br />Datenbankuserpasswort: <input type="passwort" name="passwd">';
      echo '<br />Datenbankname: <input type="text" name="db">'; 
      echo '<input type="hidden" name="step" value="2">';
      echo '<input type="hidden" name="sql" value="mysql"';
      echo '<br /><input type="submit" value="Absenden!">';
   } elseif ($step == 2 AND $_POST['sql'] == "mysql") {
        echo '<CENTER><H3>Installationsschritt: "'.$step.'."</H3></CENTER>';
        $datei = fopen('db.php','w+');
        fwrite($datei,'
               <?
               $sql = "'.$_POST['sql'].'";
               $host = "'.$_POST['host'].'";
               $user = "'.$_POST['user'].'";
               $pass = "'.$_POST['passwd'].'";
               $db = "'.$_POST['db'].'";
               ?>');
        fclose($datei);
        $nextdatei = fopen('farbe.htm','w+');
        fwrite($nextdatei,'
               <?
               IF ($titel == "")
                  { echo \'<HTML><HEAD><TITLE>Gaestebuch.</TITLE>\';
               } elseif ($titel == "admin") {
                    echo \'<HTML><HEAD><TITLE>Gaestebuch Admintool.</TITLE>\';
               }
               echo \'</HTML>\';
               ?>');
        include "db.php";
      @mysql_connect($host, $user, $pass) OR
         unlink('db.php') AND 
         die('Bitte geben sie richtige Datenbank informationen an!');   
      mysql_select_db($db) OR
         unlink('db.php') AND       
         die("Bitte geben sie eine existierende Datenbank an!");
        echo 'Die Daten wurden erfolgreich gespeichert!<br />';
        echo 'Bitte geben sie nun Daten zu ihrem Admin Account ein!<br />';
        echo '<form method="post" action="setup.php">';
      echo '<br />Adminusername: <input type="text" name="user">';
      echo '<br />Adminpasswort: <input type="password" name="passwd">';
      echo '<br />Adminpasswortwiederhollung: <input type="password" name="passwdw">';
      echo '<input type="hidden" name="step" value="2">';
      echo '<input type="hidden" name="sql" value="mysql"';
      echo '<br /><input type="submit" value="Absenden!">';
   } elseif ($step == 3 AND $_POST['sql'] == "mysql") {
        IF ($_POST['passwd'] == $_POST['passwdw']) {
           echo '<CENTER><H3>Installationsschritt: "'.$step.'."</H3></CENTER>';
           include "db.php";
         @mysql_connect($host, $user, $pass) OR   
            die("Es konnte keine Verbindung aufgebaut werden");   
         mysql_select_db($db) OR       
            die("Konnte Datenbank nicht benutzen, Fehlermeldung: ".mysql_error());
         $sql = "CREATE TABLE text (
                    text TEXT,
                    user TEXT,
                    email TEXT,
                    date DATETIME,
                    IP VARBINARY(12));";
         $result = mysql_query($sql);
         if($result===false) {
            die("Konnte leider Ihre Registrationsdaten nicht abspeichern: ".mysql_error()); }
         $sql = "CREATE TABLE user (
                    user TEXT,
                    passwd TEXT);";
         $result = mysql_query($sql);
         if($result===false) {
            die("Konnte leider Ihre Registrationsdaten nicht abspeichern: ".mysql_error()); }
         $sql = "CREATE TABLE extra (
                    hfarbe VARCHAR(20),
                    tfarbe VARCHAR(20));";
         $result = mysql_query($sql);
         if($result===false) {
            die("Konnte leider Ihre Registrationsdaten nicht abspeichern: ".mysql_error()); }
         $user = $_POST['user'];
         $passwd = $_POST['passwd'];
         $sql = "INSERT INTO user (user, passwd)
                 VALUES ('$user','$passwd');";
         $result = mysql_query($sql);
         if($result===false) {
            die("Konnte leider Ihre Registrationsdaten nicht abspeichern: ".mysql_error()); }
         $sql = "INSERT INTO extra (hfarbe, tfarbe)
                 VALUES ('white','black');";
         $result = mysql_query($sql);
         if($result===false) {
            die("Konnte leider Ihre Registrationsdaten nicht abspeichern: ".mysql_error()); }
         echo 'Die Installation wurde erfolgreich abgeschlossen!';
      } else {
          echo 'Tut mir leid, aber ihre beiden Passwörter stimmen nicht mit einander über ein!';
      }
   }
?>


Die admin.php (Konfigurationstool) ist noch nicht fertig mit umstellen (MySQL auf SQLite) Deshalb hab ich sie hier nicht gepostet. Ich hoffe ihr könnt mir helfen.

Euer Verzweifelter 1Euro
Dies ist meine Welt!!!
1Euro
 
Posts: 188
Joined: 11. September 2004 17:50

Postby jakimo72 » 24. September 2005 11:29

In der index.php steht
Code: Select all
$sql = "SELECT text, user, email, date, IP FROM text ORDER BY date DESC;";
   IF ($sql == "mysql") {
      $result = mysql_query($sql);
   } elseif ($sql == "sqlite") {
   }

Die Variable $sql wird niemals den wert mysql oder sqlite annehmen,
da sie bereits auf "SELECT ..." steht.

Ich weiss, dass Du mit der Objektorientierten Programmierung auf dem
Kriegsfuss stehst, aber wie wäre es mit strukturierter Programmierung?
Das Bedeutet, man kann Programmteile, die ähnliches machen, in
Funktionen auslagern, die mit Hilfe von Parametern an die aktuelle
Situation angepasst werden.
Also jedesmal bevor Du ein Copy-and-Paste machst, denk
nocheinmal darüber nach, ob man nicht eine Funktion daraus machen kann. Wenn die Funktion dann noch einen beschreibenden Namen
hat (keine Angst for langen Namen!) wird er Code sehr viel
übersichtlicher.

Und kannst Du die Anweisungen /* ... */ und die Anweisung // ?
Die sind sehr nützlich, mit denen kann man eine Beschreibung
was welcher Programmteil macht, direkt in den Code mit einbauen.
Solche Kommentare helfen nicht nur anderen Lauten, die Deinen
Code begreifen sollen, sondern ganz besondern Dir. Schau Dir mal eine
Programm an, welches Du vor einem Jahr programmiert hast...

Leerzeilen haben zwar den Nachteil, dass der Code länger wird,
aber mit denen kann man wunderbar Absätze schaffen, die
helfen den Code besser lesbar zu machen.
User avatar
jakimo72
 
Posts: 151
Joined: 07. February 2005 13:25
Location: Hamburg-Barmbek

Postby 1Euro » 24. September 2005 12:56

hi,
wi so oft hast du mir wieder aus der klämme geholfen und dafür danke ich dir! Ich habe anfürsich nicht's gegen das objektorientirte Programmieren (fängt gerade mit Java an). Nut ich blick da noch nicht so ganz durch, deshalb mach ich das erstmal über den anderen weg.

PS: Es fungtioniert leider immernoch nicht mit dem anzeigen :/.

1Euro
Dies ist meine Welt!!!
1Euro
 
Posts: 188
Joined: 11. September 2004 17:50


Return to PHP

Who is online

Users browsing this forum: No registered users and 7 guests