[mysql] problem mit formularüberprüfung

Kurt Cobain

Erfahrenes Mitglied
hallo

hab mit einem gästebuch script ein problem.
das script:


gb3.php:
PHP:
<!doctype html public "-//W3C//DTD HTML 4.0 //EN">
<html>
<head>
<title></title>
<meta name="author" content="Manuel">
<meta name="generator" content="Ulli Meybohms HTML EDITOR">

</head>
<body text="#FFFFFF" bgcolor="#000000" link="#FF0000" alink="#FF0000" vlink="#FF0000">
Wollen Sie einen Beitrag hinzufügen?<br>
<form action="eintragen.php" Method="post">
Ihr Name:<br>
<input name="name" size="40"><br><br>
Ihr hp:<br>
<input name="hp" size="40"><br><br>
E-Mail:<br>
<input name="email" size="40"><br><br>
Inhalt:<br>
<textarea name="inhalt" cols="40"
 rows="12" wrap="physical"></textarea><br>
<input type="submit" value="Absenden">
</form>
 <hr>
 <?php


//Verbindung zu Datenbank aufbauen

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


$abfrage = "SELECT * FROM gbdatum order by id desc";
$ergebnis = mysql_query($abfrage)  or die (mysql_error());
while($row = mysql_fetch_object($ergebnis))
    {
    $inhalt = $row->inhalt;
    $inhalt = htmlentities($inhalt);
    $inhalt = nl2br($inhalt);
    $datum = date("d.m.Y H:i", $row->datum);

    //Der Besucher hat keine E-Mail Adresse angegeben:
    if($row->email == "")
        {
      echo "
      <table align=\"center\" border=\"1\" cellspacing=\"0\" cellpadding=\"5\" bordercolorlight=\"black\" bordercolordark=\"black\" width=\"50%\">
   <tr>
   <td>
   Von <b>$row->name</b> am $datum
   </td>
   </tr>
   <tr>
   <td>
   $inhalt
   </td>
   </tr>
   </table><br>  ";
      }
    //Der User hat eine Email-Adress angegeben:
    else
        {


    echo "
     <table align=\"center\" border=\"1\" cellspacing=\"0\" cellpadding=\"5\" bordercolorlight=\"black\" bordercolordark=\"black\" width=\"50%\">
   <tr>
   <td>
   Von <a href=\"mailto:$row->email\">$row->name</a> am $datum
   </td>
   </tr>

   <tr>
   <td>
   $inhalt
   </td>
   </tr>
   </table><br>  ";
       }

    }


//Jetzt kommt das "Inhaltsverzeichnis",
//sprich dort steht jetzt: Seite: 1 2 3 4 5


//Wieviele Einträge gibt es überhaupt

//Wichtig! Hier muss die gleiche Abfrage sein, wie bei der Ausgabe der Daten
//also der gleiche Text wie in der Variable $abfrage, blo&szlig; das hier das LIMIT fehlt
//Sonst funktioniert die Blätterfunktion nicht richtig,
//und hier kann nur 1 Feld abgefragt werden, also id

//Errechnen wieviele Seiten es geben wird

//Ausgabe der Seitenlinks:

?>


</body>
</html>



eintragen.php
PHP:
<!doctype html public "-//W3C//DTD HTML 4.0 //EN">
<html>
<head>
<title></title>
<meta name="author" content="Manuel">
<meta name="generator" content="Ulli Meybohms HTML EDITOR">

<meta http-equiv="refresh" content="0; URL=http://localhost/manuel/gbtutorial/mitdatum/gb3.php">

</head>
<body text="#FFFFFF" bgcolor="#000000" link="#FF0000" alink="#FF0000" vlink="#FF0000">
<?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();


//Wurden die benötigten Felder ausgefüllt?
if($name == "" or  $hp =="" or $email  == "" or $inhalt == ""  )
    {
   echo "Bitte die Felder<blink> \"<b>Name</b>\" </blink>ausfüllen<br><a href=\"gb3.php\">Zurück</a>";
   exit; //Script Ablauf wird unterbrochen, Eintrag wird nicht gespeichert
   }







$eintrag = "INSERT INTO gbdatum (name, email, hp, inhalt, datum) VALUES ('$name', '$email', '$hp', '$inhalt', '$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="gb3.php">Zurück</a>
</body>
</html>




das problem ist, dass au eintragen.php die meldung kommt ob ein feld nicht ausgefüllt wurde. kann man es auch machen, das gleich auf gb3.php überprüft wird ob alles ausgefüllt wurde, also dass man dann erst garnicht zu eintragen.php weitergeleitet wird?

danke für jede hilfe
 
Hi, mach doch eine Funktion, die überprüft, ob in jeder Variable, die du benötigst, was drin steht. Wenn alles OK ist, schreibst du es in die DB (aufruf deines zweiten Scriptes), ansonsten gibst du einen Fehler aus. Also genau das, was du schon im zweiten Script machst. Nur die Angelegenheit in das erst Script verschoben. Du kannst das dann nur nicht mehr über den Submit-Button lösen, sondern muss das Klick-Ereignis des Button abfangen und dann die oben beschrieben Funktion aufrufen.

mfg
PS: das hat relativ wenig mit Datenbanken zu tun. Das Thema ist eher was für das HTML oder PHP Forum

PPS: Tip: Nutzt anstatt Tabellen DIVs in HTML. Tabellen haben den Nachteil, dass sie den Seitenaufbau extrem verlangsamen, da sie erst vollständig aufbebaut werden, bevor sie angezeigt werden.
Tip 2: Nutzt Stylesheets. DAnn kannst du dir den Aufwand sparen, bei jeder Tabelle den kompletten Style zu beschreiben

mfg
 
Zurück