Tom: Einträge im Formular werden nicht gelöscht!

Beitrag lesen

Hello,

<?php

error_reporting(E_ALL)  ### zum Testen immer (meistens) alles einschalten! ^ E_NOTICE);

include("global.inc.php");

was ist mit get_magic_quotes_gpc() ?

sind die Magic Quotes bei Dir ausgeschaltet?

$GBname       = trim( $_POST["GBname"] );
$GBemail      = trim( $_POST["GBemail"] );
$GBwebadresse = trim( $_POST["GBwebadresse"] );
$GBtext       = trim( $_POST["GBtext"] );

$dblink = mysql_connect($datahost,$datauser,$datapass);
mysql_select_db($database, $dblink);

$query = 'INSERT INTO gastbuch
      (
      name,
      email,
      www,
      text
      )
     VALUES
     (
     "'.mysql_real_escape_string ($GBname).'",
     "'.mysql_real_escape_string ($GBemail).'",
     "'.mysql_real_escape_string($GBwebadresse).'",
     "'.mysql_real_escape_string ($GBtext).'"
     )';

Gut! Richtiges Escapen ist wichtig für das Überleben Deiner DB

mysql_query($query, $dblink);

$sql = "SELECT *
            FROM
     gastbuch
    ORDER BY
                 zeitstempel DESC;";

Wozu _alle_ Datensätze auslesen? reichen nicht z.B. 10 auf einmal ?

$result = mysql_query($sql) OR die(mysql_error());

echo mysql_error();
?>
*********************************
<form action="137.php" method="POST">

was passiert denn wohl beim Erstaufruf des Scriptes, wenn das Formular noch nicht aufgebaut

war, also auch noch keine $_POST vorhanden waren? Der Fehler (Notice) tritt dann aber schon

oben auf

<input  name="GBname" value="<?php echo $GBname; ?>"
<input type="text" name="GBemail" value="<?php echo $GBemail; ?>"
<input type="text" name="GBwebadresse" value="<?php echo $GBwebadresse; ?>" size="40">
<textarea name="GBtext" value="<?php echo $GBtext; ?>"  cols="39" rows="5"></textarea>
<input type="submit" value="Senden!"> <input type="reset" value="Zur&uuml;cksetzen">

</form>
*******************************
  <?php

echo "<h2>EINTRÄGE IM GÄSTEBUCH</h2><br />\n";
     while($row = mysql_fetch_assoc($result)) {
  echo '<table width="350" align="center" border="1"><tr><td bgcolor="#898989">';
        echo $row['name']. "&nbsp;schrieb am &nbsp;". $row['zeitstempel']." &nbsp; ".$row['www']."</td></tr><tr><td>".$row['text']."</td></tr></table><br>\n";

}

?>
########################################

Du hast bisher keine Fehlerkontrolle bei den SQL-Statements
Du hast keine Steuerflußkontrolle
Du lässt es auf Notices ankommen (siehe $_POST)
Beim Erstaufruf des Scriptes (über die Adresszeile) wird ein leerer Datensatz eingetragen

Abhilfe:

übertrag aus dem Formular einen Button oder ein Hidden-Field.
  Deklariere ein Array mit allen erwarteten Datenfeldern

$_data = array();
  $_data['GBname']['value'] = '';
  $_data['GBname']['regexp'] = '[0-9a-zA-Z]{2,}';
  $_data['GBname']['required'] = 1;  # 0 für optionale Eingabe,
                                     # 1 für Pflichteingabe,
                                     # 2 für Pflichteingabe nach Muster
  $_data['GBname']['default'] = '';  # default z.B. für Radio, Select und Ckeckboxen

$_data['GBemail']['value'] = '';
  $_data['GBemail']['regexp'] = '[0-9a-zA-Z]{2,}@[0-9a-zA-Z]{3,}'; ## die musst Du natürlich
  $_data['GBemail']['required'] = 1;                                ## selber aufbauen ;-)
  $_data['GBemail']['default'] = '';

...

Dann kannst Du auf diese Werte zugreifen im Formular.
Wenn nun das Script aufgerufen wird, kannst Du nachfragen

if(isset($_POST['btn']['insert']))
  {
    $_error = array();
    foreach($_data as $name => $specs)
    {
      if ($specs['required'] > 0 and !isset($_POST[$name])
      {
        $_error[] = "Feld $name muss ausgefüllt werden";
      }
      elseif($specs['required'] > 0 and isset($_POST[$name] and !check($_POST['data'],$name,$_data)
      {
        $_error[] = "Feld $name enthält falsche Werte";
      }
      ....

}

}

und so weiter.

Und  die funktion check(Postdaten, Name des Paramters, Kontrollarray ) schreibst Du Dir dann einmal. Die überprüft nur noch den Feldwert mittels der RegExp und gibt false oder true zurück.

Auf diese Weise bekommst Du Deine Applikation auch relativ wasserdicht

Harzliche Grüße vom Berg
esst mehr http://www.harte-harzer.de

Tom

--
Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
Nur selber lernen macht schlau