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ücksetzen"></form>
*******************************
<?phpecho "<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']. " schrieb am ". $row['zeitstempel']." ".$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