formularüberprüfung für gb

Kurt Cobain

Erfahrenes Mitglied
hallo

ich hab ein gästebuch gemacht und muss noch ein paar kleinigkeiten verbessern.
erstmal das skript:

gb.php
Code:
<html>
<head>
<title></title>
</head>
<body>
<form action="eintragen.php" Method="post">
Ihr Name:      <br>
<input name="name" size="40" maxlength="14"><br><br>
Ihr homepage:    <br>
<input name="hp" size="40" value="http://" maxlength="30"><br><br>
E-Mail:<br>
<input name="email" size="40" maxlength="30"><br><br>
Inhalt:<br>
<textarea name="inhalt" cols="40" rows="12" wrap="physical"></textarea><br><br>
<input type="submit" value="&gt;&gt; eintragen &gt;&gt;" class="textarea">
</form>
<hr>
<?
//hier ist die ausgabe
?>
</body>
</html>
sieht so aus:http://www.directupload.net/show_image.php?d=336&n=ylE3a2h8.jpg


eintragen.php
Code:
<html>
<head>
<title></title>
</head>
<body>
<?php
$link = mysql_connect() or die ("Keine Verbindung moeglich");
mysql_select_db("manuel") or die ("Die Datenbank existiert nicht");

$name = $_POST["name"];
$email = $_POST["email"];
$hp = $_POST["hp"];
$inhalt = $_POST["inhalt"];
$datum = time();
$text = nl2br($inhalt);

if($name == ""  )
   {
 echo "<br><br><br>";
   echo "Bitte <blink> Namen </blink>eintragen<br><a href=\"javascript:history.back()\">zurück</a>";
  exit; //Script Ablauf wird unterbrochen, Eintrag wird nicht gespeichert 
   }

 if($inhalt == ""  )
    {
   echo "bitte<blink> inhalt </blink>ausfüllen<br><a href=\"javascript:history.back()\">zurück</a>";
    exit; //Script Ablauf wird unterbrochen, Eintrag wird nicht gespeichert
   }

$eintrag = "INSERT INTO gb (name, email, hp, inhalt, datum) VALUES ('$name', '$email', '$hp', '$text', '$datum')";
$eintragen = mysql_query($eintrag);

//Wurde der Eintrag erfolgreich gespeichert?
if($eintragen == true)
   {
   echo "Beitrag hinzugefügt";
   }
else
   {
   echo "Fehler versuchs nochmal";
   }


?>
 <br><a href="gb.php">zurück</a>
</body>
</html>


probleme
1. wenn ein feld nicht ausgefüllt wurde wird es in eintragen.php angezeigt.
>>>ich möchte, dass es gleich in gb.php angezeigt wird und dann erst garnicht zum eintragen in die tabelle kommt.
>>>sollte ungefähr so aussehen: http://www.directupload.net/show_image.php?d=336&n=enIgqsDB.jpg

2. wenn man eintragen.php neu lädt wird ein leeres feld in die datenbank eingetragen.
>>>wie kann man das ändern?



danke für eure hilfe
 
1. Schreibe in der eintragen.php bei jeder Feldprüfung
header("LOCATION:gb.php?error=ZU_PRÜFENDES_FELD");
also, z.B.:
PHP:
  if($name == ""  )
   {
   header("Location:gb.php?error=name");
   exit; //Script Ablauf wird unterbrochen, Eintrag wird nicht gespeichert 
   }

in der gb.php schreibst du dann am Anfang vom Script:
PHP:
if(isset($_GET['error']))
{
   if($_GET['error'] == "name")
   {
       $err = "name eingeben";
   }
   elseif(...)
      //weitere Abfragen
   }
   else
   {
      $err = "";
   }
}

Da wo die Meldung erscheinen soll:

echo $err;

2. Was passiert, wenn du am Ende vom Script einfach mal
unset($_POST);
schreibst?

mb fanste

Da
 
Entweder machst du es so, das dein Formular auf sich selbst verweist ( action="<? $PHP_SELF?>"(...)) und lässt dann alles überprüfen und bei Erfolg leitest du dann alles auf die eintragen.php weiter.
Andere Möglichkeit wäre (in meinen Augen die bessere Möglichkeit), dass du in der eintragen.php alles überprüfst und wenn Fehler auftreten garnicht erst was in die DB schreibst sondern die Fehler dem User mitteilst und auf das Formular zurückleitest.

greetz
daddz
 
tag

ich bins nochmal

hab noch n paar problemchen:
1.dieser error erscheint bei eintragen.php wenn ich keinen namen eingetragen hab:
Warning: Cannot modify header information - headers already sent by (output started at d:\WebData\htdocs\manuel\gaestebuch\eintragen.php:7) in d:\WebData\htdocs\manuel\gaestebuch\eintragen.php on line 69

2. unset($_POST); das nicht

so sieht eintragen.php jetzt aus
Code:
<!doctype html public "-//W3C//DTD HTML 4.0 //EN">
<html>
<head>
<title></title>


</head>
<body>


<?php
$link = mysql_connect() or die ("Keine Verbindung moeglich");
mysql_select_db("manuel") or die ("Die Datenbank existiert nicht");

$name = $_POST["name"];
$email = $_POST["email"];
$hp = $_POST["hp"];
$inhalt = $_POST["inhalt"];
$datum = time();
$text = nl2br($inhalt);


/

if($name == ""  )
   {
   header("Location: http://localhost/manuel/gaestebuch/gb.php?error=name");//zeile 69
   exit; //Script Ablauf wird unterbrochen, Eintrag wird nicht gespeichert
   }
 





$eintrag = "INSERT INTO gbdatum (name, email, hp, inhalt, datum) VALUES ('$name', '$email', '$hp', '$text', '$datum')";
$eintragen = mysql_query($eintrag);

//Wurde der Eintrag erfolgreich gespeichert?
if($eintragen == true)
   {
   echo "Beitrag hinzugefügt";
   }
else
   {
   echo "Fehler versuchs nochmal";
   }

 unset($_POST);
?>
 <br><a href="hp2.php">zurück</a>
</body>
</html>


danke nochmal
 
2 Möglichkeiten.

1. Tausche den header() durch ein meta refresh
2. Schreibe ganz am Anfang ob_start() und ganz am Ende ob_end_flush()
 
http://de.php.net/ob_start:

de.php.net/ob_start hat gesagt.:
Diese Funktion schaltet die Pufferung von Ausgaben ein. Solange die Ausgabe-Pufferung aktiv ist, erfolgt keine Ausgabe bei der Skript-Ausführung. Statt dessen werden alle Ausgaben in einem internen Puffer gespeichert.

Der Inhalt diese internen Puffers kann in eine String-Variable kopiert werden (per ob_get_contents()). Die Ausgabe erfolgt erst bei Aufruf von ob_end_flush() und sobald der Puffer-Inhalt per ob_end_clean() verworfen wird.
 
Zurück