Formularfelder auf Eingabe überprüfen

Schniko

Grünschnabel
Hallo zusammen,

da ich nun schon unzählbare Foren durchkämmt und viel an meinem Quellcode rumprobiert habe, poste ich mein Problem nun einfach mal selbst und hoffe, dass ich so eine Lösung finde... :)

Aktueller Stand:
Es geht darum, dass ich für eine Website ein Gästebuch erstellt habe. Dazu gibt es ein Formular mit den Feldern Name, Email und Beitrag. Unter dem Formular gibt es noch den Button "speichern".
Wenn ich in alle Felder etwas eintrage, klappt das mit dem Speichern auch alles einwandfrei.

Das Problem:
Das Problem ist jetzt aber, dass die Eingabe nicht gespeichert wird, sobald ein Feld leer bleibt. Das Formular wird nach dem Klicken auf "speichern" ohne die vorher getätigten Einträge erneut angezeigt.
Deshalb möchte ich gerne beim Klick auf "speichern" überprüfen, ob in alle Felder etwas eingetragen wurde. Falls ein Feld leer ist, soll eine Fehlerausgabe erscheinen, welche z.B. ausgibt "Bitte geben Sie Ihren Namen ein.".
Der evtl. schon eingegebene Text in den anderen Feldern soll dabei nicht gelöscht, sondern weiter angezeigt werden, damit der User nicht noch ein mal von vorne anfangen muss.

Ein Auszug vom Quellcode:
Um das Ganze kurz zu verdeutlichen...

PHP:
<?php 
if ( $_POST['Name'] != "" && $_POST['Email'] != "" && $_POST['Beitrag'] != "")
{

$sql .= " INSERT INTO gbuch ";
$sql .= " SET ";
$sql .= " Name ='". $_POST['Name'] ."', ";
$sql .= " Email ='". $_POST['Email'] ."', ";
// UTC Zeit festlegen:
date_default_timezone_set('Europe/Berlin'); 
$sql .= " Datum ='". date("Y-m-d H:i:s") ."', "; 
$sql .= " Beitrag='". $_POST['Beitrag'] ."' "; 

echo "<h2>Eintrag gespeichert</h2>";

//Zugriff auf die MySQL Datenbank:
//...

// ausführen des mysql-Befehls/Speichern der Daten
//...
} // if-Bedingung zu Ende

//Falls ein Feld leer ist und vorher schon mal auf speichern gedrückt wurde, Fehlerausgabe...
else

{
if ($_POST['schon_mal_gespeichert'] == "submit" )
{


if ( $_POST['Name'] == "" )
{
echo "Bitte geben Sie Ihren Namen ein!";
}

if ( $_POST['Email'] == "" )
{
echo "Bitte geben Sie Ihre Email-Adresse ein!";
}

if ( $_POST['Beitrag'] == "" )
{
echo "Bitte geben Sie einen Text ein!";
}
}

Da ich ein blutiger Anfänger bin und noch nicht so wirklich durchblicke, weiß ich nicht, ob der letzte Teil (das was nach dem else kommt) überhaupt richtig ist... Ich habe einfach mal versucht, es irgendwie logisch anzugehen... ;)

Ich würde mich sehr freuen, wenn mir jemand weiterhelfen könnte!
Vielen Dank schon mal im voraus für eure Mühe!

Liebe Grüße!
 
Du könntest in die Inputfelder folgendes machen:

HTML:
<input type="text" name="feld" value="<?php echo (isset($_POST['feld'])?$_POST['feld']:''; ?> />
 
Also für die Prüfung der Felder teile ich das immer auf:

PHP:
$fehler = 0;
$fehlertext = "";

If (!isset($_POST['Name']) Or Trim($_POST['Name']) == "") {
  $fehler = 1;
  $fehlertext = "Bitte geben Sie Ihren Namen an.<br>";
}

If (!isset($_POST['Email']) Or Trim($_POST['EMail']) == "") {
  $fehler = 1;
  $fehlertext = ."Bitte geben Sie Ihre EMail Adresse an.<br>";
}

If (!isset($_POST['Beitrag']) Or Trim($_POST['Beitrag']) == "") {
  $fehler = 1;
  $fehlertext = ."Bitte geben Sie einen Beitrag ein.<br>";
}

If ($fehler == 0) {
  $sql .= " INSERT INTO gbuch ";
  $sql .= " SET ";
  $sql .= " Name ='". $_POST['Name'] ."', ";
  $sql .= " Email ='". $_POST['Email'] ."', ";
// UTC Zeit festlegen:
  date_default_timezone_set('Europe/Berlin');
  $sql .= " Datum ='". date("Y-m-d H:i:s") ."', ";
  $sql .= " Beitrag='". $_POST['Beitrag'] ."' ";
}

Wobei dieser Code natürlich nur ausgeführt wird, wenn vorher der Submit Button gedrückt wurde.

<input type="text" name="feld" value="<?php echo (isset($_POST['feld'])?$_POST['feld']:''; ?> />

Zum Prüfen bin ich immer "zu faul". Ich schreib einfach immer nur:

HTML:
<input type="text" name="feld" value="<?php echo @$_POST['feld'];" ?> />

Gruß Thomas
 
Zuletzt bearbeitet:
Nach dem submit einfach vor dem einspeichern in die Datenbank mit
einem if überprüfen ob die variablen übergeben wurden bzw ob etwas
reingeschrieben wurde.

Wenn nicht Fehlermeldung ausgeben, wenn alles ausgeführt wurde
weiter fortfahren wie geplant.

Normalerweise ist das die einfachste (vll. nicht schönste) Methode.
 
Hallo!

Erst ein mal vielen Dank für die schnelle Hilfe und vor allem den Quellcode! :)

Ich habe jetzt mal probiert, alles einzufügen, aber ich bekomme bzgl. des Inputs noch eine Fehlermeldung...
Diese HTML Zeile habe ich auf das jeweilige Feld angepasst:

HTML:
 <input name="Name" value="<?php echo (isset($_POST['Name'])?$_POST['Name']:' ' ;?>" size="50" maxlength="150" type="text">

Aber es kommt die Fehlermeldung:
Parse error: syntax error, unexpected ';' in /Applications/XAMPP/xamppfiles/htdocs/gaestebuch-eintrag2.php on line 30

Irgendwas in der Syntax muss da glaube ich falsch sein, oder ich hab das einfach falsch eingefügt

LG

Ich habe es noch mal so ausprobiert:
<input name="Name" value="<?php echo @$_POST['Name']; ?>" size="50" maxlength="150" type="text">

Dann wird das Formular zwar wieder angezeigt, aber es kommt keine Fehlermeldung, wenn ich nichts eintrage und auf speichern klicke...

Könnte mir jemand vielleicht den kompletten Code geben?
Ich blicke irgendwie nicht, wo ich was eintragen muss... :-(
 
Das vorangestellte "@" verhindert die Fehlermeldung wenn es die Variable $_POST["xyz"] nicht gibt.

Sie verhindert nicht das eine "selbsterstellte" Fehlermeldung wie z.B. "Bitte geben Sie Ihren Namen ein" ausgegeben wird.

Zeig du mal deinen kompletten Code dann findet sich der Fehler sicher schnell.
 
Hupps
da hab ich wohl eine Klammer vergessen ;)
HTML:
 <input name="Name" value="<?php echo (isset($_POST['Name']))?$_POST['Name']:'Bitte etwas eingeben' ;?>" />

Den Wert zu prüfen find ich allerdings schöner als einfach nur die Fehler zu überdecken bzw gar nicht anzeigen zu lassen. Das ist für mich faul programmiert ;)
 
ah ok...das "@" habe ich übersehen...

Hier ist mein Code:

PHP:
<!-- Formular Darstellung -->
<form name="" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" enctype="text/html">
<p>Name:<br>
<input name="Name" value="<?php echo $_POST['Name']; ?>" size="50" maxlength="150" type="text">
</p>
<p>E-Mail-Adresse:<br>
<input name="Email" value="" size="50" maxlength="150" type="text">
</p>
<p>Beitrag:<br>
<textarea name="Beitrag" rows="10" cols="50"></textarea>
</p>
<input name="" value="speichern" type="submit">
</form>

<!-- Daten speichern, wenn alle Felder ausgefüllt wurden-->
<?php 
$fehler = 0;
$fehlertext = "";

If (!isset($_POST['Name']) Or Trim($_POST['Name']) == "") {
  $fehler = 1;
  $fehlertext = "Bitte geben Sie Ihren Namen an.<br>";
}

If (!isset($_POST['Email']) Or Trim($_POST['EMail']) == "") {
  $fehler = 1;
  $fehlertext = "Bitte geben Sie Ihre EMail Adresse an.<br>";
}

If (!isset($_POST['Beitrag']) Or Trim($_POST['Beitrag']) == "") {
  $fehler = 1;
  $fehlertext = "Bitte geben Sie einen Beitrag ein.<br>";
}

If ($fehler == 0) { 

$sql .= " INSERT INTO gbuch ";
$sql .= " SET ";
$sql .= " Name ='". $_POST['Name'] ."', ";
$sql .= " Email ='". $_POST['Email'] ."', ";
// UTC Zeit festlegen:
date_default_timezone_set('Europe/Berlin'); 
$sql .= " Datum ='". date("Y-m-d H:i:s") ."', "; 
$sql .= " Beitrag='". $_POST['Beitrag'] ."' "; 

echo "<h2>Eintrag gespeichert</h2>";

//Zugriff auf die MySQL Datenbank:
define ( 'MYSQL_HOST', 'localhost' );
define ( 'MYSQL_BENUTZER', 'root' );
define ( 'MYSQL_KENNWORT', '' );
define ( 'MYSQL_DATENBANK', 'gaestebuch' );

$db_link = @mysql_connect (MYSQL_HOST, MYSQL_BENUTZER, MYSQL_KENNWORT);
if ( ! $db_link )
{
die('keine Verbindung zur Zeit m&ouml;glich - sp&auml;ter probieren ');
}
$db_sel = mysql_select_db( MYSQL_DATENBANK )
or die("Auswahl der Datenbank fehlgeschlagen");

// ausführen des mysql-Befehls/Speichern der Daten
$db_erg = mysql_query( $sql );
if ( ! $db_erg )
{
die('Ung&uuml;ltige Abfrage: ' . mysql_error());
}
if($sql && mysql_affected_rows() > 0)
{
?>
<p>Vielen Dank f&uuml;r Ihren Eintrag!<br>
<?php 
}

?>
</p>
<p>Beim Eintragen ist ein Fehler aufgetreten.<br>
<?php }
echo '<p><a href="gaestebuch.php">G&auml;stebuch anzeigen</a></p>';
exit;
exit;
?>
 
@timestamp:
Das ist nicht faul programmiert sondern es ist notwendig.
Mit dem vorangestellten "@" vor der POST-Variablen wird nur verhindert das ein Fehler angezeigt wird weil die Variable nicht gesetzt ist. Dies ist immer dann der Fall wenn das Formular zum erstem Mal aufgerufen wird.

Es wäre ziemlich blöd wenn man die Meldung "Bitte geben Sie Ihren Namen ein!" anzeigt nur weil die Seite erstmals angezeigt wird.
 
Es wäre ziemlich blöd wenn man die Meldung "Bitte geben Sie Ihren Namen ein!" anzeigt nur weil die Seite erstmals angezeigt wird.

Die Meldung lässt sich auch ganz einfach entfernen.... Warum das jetzt "blöd" sein soll weiß ich nicht, aber ein netter Umgangston sieht für mich anders aus (!)
Und was das @-Zeichen macht weiß ich wohl, steht eigentlich auch in meinem vorherigen Post ;)
 

Neue Beiträge

Zurück