waterpolo-nico: Gästebuch-Fehler

Hallo zusammen,

ich habe ein "Gästebuch" geschreiben. Und nun noch einen Fehler, den ich nicht herausbekomme.

<html>
<head>
<title>
Angst
</title>
<script type="text/javascript">
function click (e) {
  if (!e)
    e = window.event;
  if ((e.type && e.type == "contextmenu") || (e.button && e.button == 2) || (e.which && e.which == 3)) {
    if (window.opera)
      window.alert("Sorry: Diese Funktion ist deaktiviert.");
    return false;
  }
}
if (document.layers)
  document.captureEvents(Event.MOUSEDOWN);
document.onmousedown = click;
document.oncontextmenu = click;
</script>
</head>

<body bgcolor="#B4DAFF">
<div style="text-align:center;">
<br><br>

</p>
<?php
define("USER","schwarzwaldelche");
define("HOST","localhost");
define("PW","");
define("DB","schwarzwaldelche");
$tabellenname="angst";
$abgeschickt=$_POST['abgeschickt'];
if($abgeschickt==1) {
   $nickname=$_POST['nickname'];
   $text=$_POST['text'];

if(strlen($text)<10) {
      $error="Der Text muss mindestens 10 Zeichen lang sein.<br>";
   }
   if(strlen($nickname)<4) {
      $error.="Der Nickname muss mindestens 4 Zeichen lang sein.<br>";
   }
   if(strlen($text)>10 && strlen($nickname)>4) {
      $abgeschickt=2;
      mysql_connect(HOST,USER,PW);
      mysql_select_db(DB);
      $ip = getenv("REMOTE_ADDR");
      $sql="INSERT INTO ".$tabellenname."(nickname,text,ip) VALUES('$nickname','$text','$ip')";
      mysql_query($sql);
      unset($sql);

}
    else {
         echo $error;
         echo '<form action="#" method="POST">';
         echo 'Nickname<br><input type="text" value="'.$nickname.'" name="nickname"><br>';
         echo 'Kommentar:<br><textarea name="text">'.$text.'</textarea><br>';
         echo '<input type="hidden" name="abgeschickt" value="1"><input type="submit"></form>';
    }
}
if($abgeschickt!=1 && $abgeschickt!=2) {
   echo '<form action="#" method="POST">';
   echo 'Nickname<br><input type="text"name="nickname"><br>';
   echo 'Kommentar:<br><textarea name="text"></textarea><br>';
   echo '<input type="hidden" name="abgeschickt" value="1"><input type="submit"></form>';
mysql_connect(HOST,USER,PW);
      mysql_select_db(DB);
   $sql="SELECT * FROM ".$tabellenname." ORDER BY ID DESC";
   $ausgabe=mysql_query($sql);
   while($row=mysql_fetch_assoc($ausgabe)) {
      echo '<div style="text-align:center;"><table border="0" text="#DD6622"><tr><td><u><b><font face color="#DD6622">Geschrieben von:</td></b></u><td><font face color="#DD6622">'.$row['nickname'].'</td></tr>';
         echo '<br><u><b><tr><td><font face color="#DD6622"><u><b>Kommentar:</td></b></u><td><font face color="#DD6622">'.$row['text'].'</td></tr></table><br>';
   }
}
if($abgeschickt==2) {
   echo "<br>Danke f&uuml;r deinen Kommentar!<br>";
   mysql_connect(HOST,USER,PW);
      mysql_select_db(DB);
     $sql="SELECT * FROM ".$tabellenname." ORDER BY ID DESC";
   $ausgabe=mysql_query($sql);
   while($row=mysql_fetch_assoc($ausgabe)) {
        echo '<div style="text-align:center;"><table border="0" text="#DD6622"><tr><td><u><b><font face color="#DD6622">Geschrieben von:</td></b></u><td><font face color="#DD6622">'.$row['nickname'].'</td></tr>';
         echo '<br><u><b><tr><td><font face color="#DD6622"><u><b>Kommentar:</td></b></u><td><font face color="#DD6622">'.$row['text'].'</td></tr></table><br>';
   }
}
?>
</div>
</font>
</body>
</html>

Zeile 75 ist ein Fehler.
hier ist es hochgeladen: http://schwarzwaldelche.sc.funpic.de/
Der Fehler wird nicht daran liegen, dass ich das Passwort nicht eingetragen habe, den das habe ich nachträglich rausgemacht, damit es geheim bleibt...

Ich bitte um eure Hilfe...

lg
waterpolo-nico

  1. Laut Fehlermeldung liegt ein MySQL- Fehler vor...
    d.h., dass irgendwas mit der MySQL- Verbindung oder Abfrage nicht stimmt...
    Überprüfe mal alle MySQL- Abfragen oder ändere mal Zeile 74
    durch:

    $ausgabe=mysql_query($sql) or die(mysql_error());

    Poste dann mal, welcher Fehler ausgegeben wird.

    MFG,
    RazR 1993

    1. Hallo,

      es kommt:

      Table 'schwarzwaldelche.angst' doesn't exist

      aber vielleicht liegt es daran, dass ich bei dmeinem Anbieter funpic.de  noch das falsche eingestellt habe. Ich schaue gerade mal.....

      1. Das bedeutet, dass die Tabelle, die du abrufst nicht existiert... geh in dein phpmyadmin und lege Sie an

        1. habe ich gerade gemerkt, danke.... dadruch,d ass das mein erstes gästebuch ist, das ich selbe rgeschreiben habe, habe ich nun Probleme auch noch die tabelle zu machen.

          Ich muss eintragen:

          Feld:
          Typ: zur auswahl stehen mehrere Möglichkeiten
          Länge/Set:
          Kollation:zur auswahl stehen mehrere Möglichkeiten
          Attribute: -unsigned / -unsigned zerofill / - on update current timestamp
          Null not : -null / -not null
          Standart:
          Extra: -auto increment

          5 Felder zum auswählen:
          -Primärschlüssel
          -Index
          -Unique

          • : ---
            -Volltext

          Sind das allgemine Angaben für die Tabelle, sodass es mir jemand erklären kann, für was die felder sind?

          1. Hallo nochmal,

            so, jetzt habe ich es geschafft, dass die ganzen Fehlermeldungen weg sind: http://schwarzwaldelche.sc.funpic.de/index51.php . Ich habe jetzt jedoch das Problem, dass es trotzdem noch nicht eght. Wenn ich was eintragen möchte und dann abschicke, passiert nichts - nur die Seite wird neu geladen, jedoch ohne veränderung danach.

            Was habe ich falsch gemacht? Hier nochmal der Code - indem das Passwort rausgemacht worden ist...

            <html>
            <head>
            <title>
            Angst
            </title>
            <script type="text/javascript">
            function click (e) {
              if (!e)
                e = window.event;
              if ((e.type && e.type == "contextmenu") || (e.button && e.button == 2) || (e.which && e.which == 3)) {
                if (window.opera)
                  window.alert("Sorry: Diese Funktion ist deaktiviert.");
                return false;
              }
            }
            if (document.layers)
              document.captureEvents(Event.MOUSEDOWN);
            document.onmousedown = click;
            document.oncontextmenu = click;
            </script>
            </head>

            <body bgcolor="#B4DAFF">
            <div style="text-align:center;">
            <br><br>

            </p>
            <?php
            define("USER","schwarzwaldelche");
            define("HOST","localhost");
            define("PW","");
            define("DB","schwarzwaldelche");
            $tabellenname="ssvf";
            $abgeschickt=$_POST['abgeschickt'];
            if($abgeschickt==1) {
               $nickname=$_POST['nickname'];
               $text=$_POST['text'];

            if(strlen($text)<10) {
                  $error="Der Text muss mindestens 10 Zeichen lang sein.<br>";
               }
               if(strlen($nickname)<4) {
                  $error.="Der Nickname muss mindestens 4 Zeichen lang sein.<br>";
               }
               if(strlen($text)>10 && strlen($nickname)>4) {
                  $abgeschickt=2;
                  mysql_connect(HOST,USER,PW);
                  mysql_select_db(DB);
                  $ip = getenv("REMOTE_ADDR");
                  $sql="INSERT INTO ".$tabellenname."(nickname,text,ip) VALUES('$nickname','$text','$ip')";
                  mysql_query($sql);
                  unset($sql);

            }
                else {
                     echo $error;
                     echo '<form action="#" method="POST">';
                     echo 'Nickname<br><input type="text" value="'.$nickname.'" name="nickname"><br>';
                     echo 'Kommentar:<br><textarea name="text">'.$text.'</textarea><br>';
                     echo '<input type="hidden" name="abgeschickt" value="1"><input type="submit"></form>';
                }
            }
            if($abgeschickt!=1 && $abgeschickt!=2) {
               echo '<form action="#" method="POST">';
               echo 'Nickname<br><input type="text"name="nickname"><br>';
               echo 'Kommentar:<br><textarea name="text"></textarea><br>';
               echo '<input type="hidden" name="abgeschickt" value="1"><input type="submit"></form>';
            mysql_connect(HOST,USER,PW);
                  mysql_select_db(DB);
               $sql="SELECT * FROM ".$tabellenname." ORDER BY ID DESC";
               $ausgabe=mysql_query($sql) or die(mysql_error());
               while($row=mysql_fetch_assoc($ausgabe)) {
                  echo '<div style="text-align:center;"><table border="0" text="#DD6622"><tr><td><u><b><font face color="#DD6622">Geschrieben von:</td></b></u><td><font face color="#DD6622">'.$row['nickname'].'</td></tr>';
                     echo '<br><u><b><tr><td><font face color="#DD6622"><u><b>Kommentar:</td></b></u><td><font face color="#DD6622">'.$row['text'].'</td></tr></table><br>';
               }
            }
            if($abgeschickt==2) {
               echo "<br>Danke f&uuml;r deinen Kommentar!<br>";
               mysql_connect(HOST,USER,PW);
                  mysql_select_db(DB);
                 $sql="SELECT * FROM ".$tabellenname." ORDER BY ID DESC";
               $ausgabe=mysql_query($sql);
               while($row=mysql_fetch_assoc($ausgabe)) {
                    echo '<div style="text-align:center;"><table border="0" text="#DD6622"><tr><td><u><b><font face color="#DD6622">Geschrieben von:</td></b></u><td><font face color="#DD6622">'.$row['nickname'].'</td></tr>';
                     echo '<br><u><b><tr><td><font face color="#DD6622"><u><b>Kommentar:</td></b></u><td><font face color="#DD6622">'.$row['text'].'</td></tr></table><br>';
               }
            }
            ?>

            </div>
            </font>
            </body>
            </html>

  2. Hello,

    $con = mysql_connect(HOST,USER,PW);

    if ($con)
       {
          if (mysql_select_db(DB))
          {
              $sql = "SELECT * FROM ".$tabellenname." ORDER BY ID DESC";
              $ausgabe = mysql_query($sql, $con);

    if ($ausgabe)
              {
                  while($row = mysql_fetch_assoc($ausgabe))
                  {
                      ## Daten abholen
                  }
              }
              else
              {
                  # keine Ergebnismenge erhalten
                  # mysql_error($con) auswerten
              }
          }
          else
          {
              # Datenbank konnte nicht angesprochen werden
              # mysql_error($con) auswerten
          }

    mysql_close($con);

    }
       else
       {
           # keine Verbindung zum Datenbankserver möglich
       }

    So, oder so ähnlich, sollte dieser Abschnitt aussehen.

    Am besten baust Du Dir eine Funktion daraus, die bei Auftreten eines Fehlers nach dem Schließen der DB-Connection mit einem Fehlerwert abbricht.

    Liebe Grüße aus dem Cyberspace

    Tom vom Berg

    --
    Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
    1. Hello,

      Nachtrag: Die Auswertung des Datenbankstatus solltest Du nicht unbedingt auf dem User-Bildschirm ausgeben, sondern in Log-File schreiben. Der User braucht nur zu wissen, dass eine datenabfrage im Moment nicht möglich ist.

      Und dann solltest Du die Datenbeschaffung und -verarbeitung von der Ausgabeaufbereitung und der Ausgabe trennen. Code, der in dieser "embedded-Methode" geschrieben weird, lässt sich ganz schwer überschauen, warten und erweitern.

      Liebe Grüße aus dem Cyberspace

      Tom vom Berg

      --
      Nur selber lernen macht schlau
      http://bergpost.annerschbarrich.de
  3. Hallo nochmal,

    so, jetzt habe ich es geschafft, dass die ganzen Fehlermeldungen weg sind: http://schwarzwaldelche.sc.funpic.de/index51.php . Ich habe jetzt jedoch das Problem, dass es trotzdem noch nicht eght. Wenn ich was eintragen möchte und dann abschicke, passiert nichts - nur die Seite wird neu geladen, jedoch ohne veränderung danach.

    Was habe ich falsch gemacht? Hier nochmal der Code - indem das Passwort rausgemacht worden ist...

    <html>
    <head>
    <title>
    Angst
    </title>
    <script type="text/javascript">
    function click (e) {
      if (!e)
        e = window.event;
      if ((e.type && e.type == "contextmenu") || (e.button && e.button == 2) || (e.which && e.which == 3)) {
        if (window.opera)
          window.alert("Sorry: Diese Funktion ist deaktiviert.");
        return false;
      }
    }
    if (document.layers)
      document.captureEvents(Event.MOUSEDOWN);
    document.onmousedown = click;
    document.oncontextmenu = click;
    </script>
    </head>

    <body bgcolor="#B4DAFF">
    <div style="text-align:center;">
    <br><br>

    </p>
    <?php
    define("USER","schwarzwaldelche");
    define("HOST","localhost");
    define("PW","");
    define("DB","schwarzwaldelche");
    $tabellenname="ssvf";
    $abgeschickt=$_POST['abgeschickt'];
    if($abgeschickt==1) {
       $nickname=$_POST['nickname'];
       $text=$_POST['text'];

    if(strlen($text)<10) {
          $error="Der Text muss mindestens 10 Zeichen lang sein.<br>";
       }
       if(strlen($nickname)<4) {
          $error.="Der Nickname muss mindestens 4 Zeichen lang sein.<br>";
       }
       if(strlen($text)>10 && strlen($nickname)>4) {
          $abgeschickt=2;
          mysql_connect(HOST,USER,PW);
          mysql_select_db(DB);
          $ip = getenv("REMOTE_ADDR");
          $sql="INSERT INTO ".$tabellenname."(nickname,text,ip) VALUES('$nickname','$text','$ip')";
          mysql_query($sql);
          unset($sql);

    }
        else {
             echo $error;
             echo '<form action="#" method="POST">';
             echo 'Nickname<br><input type="text" value="'.$nickname.'" name="nickname"><br>';
             echo 'Kommentar:<br><textarea name="text">'.$text.'</textarea><br>';
             echo '<input type="hidden" name="abgeschickt" value="1"><input type="submit"></form>';
        }
    }
    if($abgeschickt!=1 && $abgeschickt!=2) {
       echo '<form action="#" method="POST">';
       echo 'Nickname<br><input type="text"name="nickname"><br>';
       echo 'Kommentar:<br><textarea name="text"></textarea><br>';
       echo '<input type="hidden" name="abgeschickt" value="1"><input type="submit"></form>';
    mysql_connect(HOST,USER,PW);
          mysql_select_db(DB);
       $sql="SELECT * FROM ".$tabellenname." ORDER BY ID DESC";
       $ausgabe=mysql_query($sql) or die(mysql_error());
       while($row=mysql_fetch_assoc($ausgabe)) {
          echo '<div style="text-align:center;"><table border="0" text="#DD6622"><tr><td><u><b><font face color="#DD6622">Geschrieben von:</td></b></u><td><font face color="#DD6622">'.$row['nickname'].'</td></tr>';
             echo '<br><u><b><tr><td><font face color="#DD6622"><u><b>Kommentar:</td></b></u><td><font face color="#DD6622">'.$row['text'].'</td></tr></table><br>';
       }
    }
    if($abgeschickt==2) {
       echo "<br>Danke f&uuml;r deinen Kommentar!<br>";
       mysql_connect(HOST,USER,PW);
          mysql_select_db(DB);
         $sql="SELECT * FROM ".$tabellenname." ORDER BY ID DESC";
       $ausgabe=mysql_query($sql);
       while($row=mysql_fetch_assoc($ausgabe)) {
            echo '<div style="text-align:center;"><table border="0" text="#DD6622"><tr><td><u><b><font face color="#DD6622">Geschrieben von:</td></b></u><td><font face color="#DD6622">'.$row['nickname'].'</td></tr>';
             echo '<br><u><b><tr><td><font face color="#DD6622"><u><b>Kommentar:</td></b></u><td><font face color="#DD6622">'.$row['text'].'</td></tr></table><br>';
       }
    }
    ?>

    </div>
    </font>
    </body>
    </html>

    1. Hello,

      so, jetzt habe ich es geschafft, dass die ganzen Fehlermeldungen weg sind:

      http://schwarzwaldelche.sc.funpic.de/index51.php

      Ich habe jetzt jedoch das Problem, dass es trotzdem noch nicht geht.

      Du hast vor allem das Problem, dass Du die Hinweise nicht berücksichtigt hast und den Code rund um die Datenbankzugriffe immer noch nicht angepasst hast.

      versuche,

      • etwas Struktur in Deinen Code zu bringen
      • Funktionen zu benutzen für wiederkehrende Dinge
      • Datenberechnung, -beschaffung und -speicherung von der HTML-Ausgabe zu trennen
      • alle Statusmeldungen ( = "Fehlermeldungen"), die das DBMS die anbietet, auch
          auszuwerten. Nur wenn ein Schritt erfolgreich war, darfst Du den nächsten
          veranlassen

      Liebe Grüße aus dem Cyberspace

      Tom vom Berg

      --
      Nur selber lernen macht schlau
      http://bergpost.annerschbarrich.de
      1. hi,

        als ich gerade dabei war, deine tipps umzusetzen, ist mir aufgefallen - dass das "gästebuch" bei einigen funktioniert - bei anderen nicht. Weißt du an was das liegen könnte?

  4. Hi,

    $nickname=$_POST['nickname'];
       $text=$_POST['text'];

    mysql_connect(HOST,USER,PW);
          mysql_select_db(DB);
          $ip = getenv("REMOTE_ADDR");
          $sql="INSERT INTO ".$tabellenname."(nickname,text,ip) VALUES('$nickname','$text','$ip')";
          mysql_query($sql);
          unset($sql);

    Du schreibst User-Eingaben ohne sie zu überprüfen in das Sql-Query und lässt dieses dann ausführen. Das ist grob fahrlässig. Informiere dich zum Thema SQL-Injection.

    Ich würde dieses Script lieber schnell wieder von deiner Webseite nehmen, solange du das nicht ausgebessert hast, sonst zerschießt dir noch jemand deine Datenbank.

    mfG,
    steckl