# Formularfelder auf Eingabe überprüfen



## Schniko (28. Juni 2010)

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 
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!


----------



## timestamp (28. Juni 2010)

Du könntest in die Inputfelder folgendes machen:


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


----------



## tombe (28. Juni 2010)

Also für die Prüfung der Felder teile ich das immer auf:


```
$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:


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

Gruß Thomas


----------



## Crawler Skiline (28. Juni 2010)

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.


----------



## Schniko (28. Juni 2010)

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:


```
<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... :-(


----------



## tombe (28. Juni 2010)

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.


----------



## timestamp (28. Juni 2010)

Hupps
da hab ich wohl eine Klammer vergessen 

```
<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


----------



## Schniko (28. Juni 2010)

ah ok...das "@" habe ich übersehen...

Hier ist mein Code:


```
<!-- 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;
?>
```


----------



## tombe (28. Juni 2010)

@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.


----------



## timestamp (28. Juni 2010)

tombe hat gesagt.:


> 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


----------



## tombe (28. Juni 2010)

So müsste es gehen:


```
<!-- 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="<?php echo @$_POST['Email']; ?>" size="50" maxlength="150" type="text"> 
</p> 
<p>Beitrag:<br> 
<textarea name="Beitrag" rows="10" cols="50"><?php echo @$_POST['Beitrag']; ?></textarea> 
</p> 
<input name="" value="speichern" type="submit"> 
</form> 

<!-- Daten speichern, wenn alle Felder ausgefüllt wurden--> 
<?php  
$fehler = 0; 
$fehlertext = ""; 
If (isset[$_POST["Speichern"])) {

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; 
}
?>
```

Übrigens: Dein Formular und der Button selber haben keinen Namen. Das kann auch zu Problemen führen !


----------



## Schniko (28. Juni 2010)

Ich habe dem Formular jetzt einen Namen gegeben und den Quellcode so wie oben eingefügt.

Es treten aber folgende Probleme auf:
- wenn nichts in die Felder engetragen wurde und ich auf speichern klicke, passiert nichts, ausser dass der link "Gästebuch anzeigen" unter dem Formular erscheint
=> es wird keine Fehlermeldung ausgegeben
- wenn in alle Felder etwas eingetragen wurde und ich auf speichern klicke, kommt nicht mehr die Ausgabe "Vielen Dank für ihren EIntrag" und die Daten werden auch nicht im Gästebuch gespeichert..

Jetzt bin ich total verwirrt...wieso geht das auf ein mal nicht mehr^


----------



## timestamp (28. Juni 2010)

Dazu bleibt nur zu sagen, dass die Verwendung von $_SERVER["PHP_SELF"] ziemlich unsicher ist und vermieden werden sollte. Wer möchte, kann ja mal folgendes bei sich lokal ausprobieren.


```
<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
<input type="submit" />
</form>
```

und das dann mit folgender URL aufrufen:

```
http://localhost/pfadZurDatei/index.php/"></form><script type="text/javascript">alert("you got XSS'ed");</script><form>
```


----------



## timestamp (28. Juni 2010)

So funktioniert das bei mir. Ich hab den Code mal nebenbei etwas formatiert, damit er besser lesbar ist 


```
<?php
error_reporting(E_ALL);
?>
<!-- Formular Darstellung -->
<form action="./" method="post">
<p>Name:<br>
<input name="Name" value="" 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="speichern" value="speichern" type="submit">
</form>

<!-- Daten speichern, wenn alle Felder ausgefüllt wurden-->
<?php
$fehler = 0;
$fehlertext = "";
if (isset($_POST["speichern"])) {

  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>
      <p><a href="gaestebuch.php">G&auml;stebuch anzeigen</a></p>
      <?php
    }
    ?>
    </p>
    <p>Beim Eintragen ist ein Fehler aufgetreten.<br>
    <?php
  }
  else
    echo $fehlertext;
}
?>
```


----------



## Schniko (28. Juni 2010)

Also bei mir funktioniert das nicht.....
Jetzt werde ich beim Klick auf speichern immer auf die Index Seite zurückgeleitet....


----------



## tombe (28. Juni 2010)

timestamp hat nur deine "bedenkliche" Schreibweise wie folgt geändert:


```
<form action="./" method="post">
```

Ändere du es nun so das du bei action ="" den Namen deiner Datei einträgst.

Er hat dir ja auch dazugeschrieben warum er das gemacht hat ! ! !


----------



## Schniko (28. Juni 2010)

Ok, danke! Jetzt funktioniert das mit den Fehlermeldungen schon mal 
Allerdings gibt es noch das Problem, dass die schon getätigten Eingaben gelöscht werden, wenn man nicht alle Felder ausgefüllt hat und auf speichern klickt...


----------



## tombe (28. Juni 2010)

Kann es sein das du dir immer nur den Code kopierst und bei dir wieder einfügst?


```
<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="<?php echo @$_POST['Email']; ?>" size="50" maxlength="150" type="text">
</p>
<p>Beitrag:<br>
<textarea name="Beitrag" rows="10" cols="50"><?php echo @$_POST['Beitrag']; ?></textarea>
</p>
```


----------



## timestamp (28. Juni 2010)

Wenn du nicht die index als Formular benutzt, musst du im action attribut den Dateinamen hineinschreiben. Zum Beispiel

```
<form action="./meineDatei.php">
```


----------



## Schniko (28. Juni 2010)

> Kann es sein das du dir immer nur den Code kopierst und bei dir wieder einfügst?



äähm...sorry, aber wenn ich es selbst könnte, hätte ich mich nicht an ein Forum gewandt...


----------



## timestamp (28. Juni 2010)

Schniko hat gesagt.:


> äähm...sorry, aber wenn ich es selbst könnte, hätte ich mich nicht an ein Forum gewandt...



Naja, den betreffenden Code um es wieder anzeigen zulassen findest du in diesem Thread schon... Ein bisschen Eigeninitiative ist wünschenswert da zumindest ich keine Lust habe alles vorzukauen.


----------



## sheeba1507 (28. Juni 2010)

Hi,

hier mal meine Version einer Formular-Verarbeitung :

```
<?php
if (isset($_POST['submit']))
  {
  $name = $_POST['name']; // vereinfachte Verarbeitung
  if ($name == "") { $message = "Keinen Namen angegeben"; }
  else
    {
    // weitere Verarbeitung
    $message = "Verarbeitung erfolgreich";
    }
  }
?>
<form action="deine_datei.php" method="post">
  <?php echo $message; ?><br />
  <input type="text" name="name" value="<?php echo $name; ?>" /><br />
  <input type="submit" name="submit" value="absenden" />
</form>
```

Gruß, Mike


----------



## Schniko (28. Juni 2010)

Also, jetzt funktioniert alles  
Habe die Fehlermeldung noch in eine Box umgewandelt, damit es ein bisschen schöner aussieht (und natürlich um noch ein bisschen Eigeninitiative mit einzubringen, lieber timestamp  )

Hier noch mal ein Code-Beispiel:

```
<?php
  if (!isset($_POST['Beitrag']) Or Trim($_POST['Beitrag']) == "") {
    $fehler = 1;
    $fehlertext = "Bitte geben Sie einen Beitrag ein.";
    
    ?>
    <script type="text/javascript">
    alert("<?php echo $fehlertext; ?>");
    </script>
    <?php
```

Vielen Dank an alle Helfer!
Liebe Grüße

Ich hätte da doch noch mal eine Frage...
Nach der Prüfung und erfolgreichem Speichern des Formulars werden in den Formularfeldern trotzdem noch die eingegebenen Daten angezeigt. Das soll aber eigentlich nicht so sein, da direkt unter dem Formular das Gästebuch inklusive dem neuen Eintrag angezeigt wird.
Ich weiß, dass ich die Variablen einfach über 
	
	
	



```
$Variable= " ";
```
 wieder zurücksetzen kann, allerdings klappt es an keiner Stelle des Scriptes, egal, wo ich es einfüge.
Logisch wäre natürlich direkt nach dem Speichern:

```
<?php
 //Wenn kein Fehler: Speichern
  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'] ."' ";
   
    ?>   
    <script type="text/javascript">
    alert("<?php echo "Eintrag gespeichert. Vielen Dank!" ?>");
    </script>
    <?php
    
    $_POST['Name'] = "";
    $_POST['Email'] = "";
    $_POST['Beitrag'] = "";
    
    //Zugriff auf die MySQL Datenbank:
    $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());
    }
```

Das funktioniert aber leider nicht 
Kann mir jemand helfen?


----------



## Schniko (6. Juli 2010)

Kann mir wirklich niemand weiterhelfen?


----------



## rd4eva (6. Juli 2010)

Falls die Reihenfolge immernoch so ist wie in den oberen Beiträgen ( erst Formular , dann PHP ) dann ist das doch völlig logisch das das nicht funktionieren kann.
Immerhin schreibst du die Variablen demnach erst in dein Formular und "löschst" sie erst danach.


----------



## Schniko (6. Juli 2010)

Wenn ich Sie VOR der Ausgabe des Formulars lösche, klappt die Fehlerüberprüfung aber leider nicht mehr und die Variablen werden sofort nach dem Klick auf Speichern gelöscht.


----------



## aGeNET (7. Juli 2010)

Hallo, da noch ein Anfänger bist, wie es schein, noch ein wichtiger Hinweis:
du musst vor der Speicherung der Daten in der Datenbank noch die zu speichernden Daten filtern, da deine Datenbank sonst ein offenes Scheunentor ist.
siehe http://de.wikipedia.org/wiki/SQL-Injection

Das geht mit mysql_real_escape_string(). Kleines Beispiel:

```
$sql = "INSERT INTO tabelle (feld1, feld2) VALUES ('".mysql_real_escape_string('wert1')."', '".mysql_real_escape_string('wert2')."');";
```

mfg


----------



## rd4eva (7. Juli 2010)

> Wenn ich Sie VOR der Ausgabe des Formulars lösche, klappt die Fehlerüberprüfung aber leider nicht mehr und die Variablen werden sofort nach dem Klick auf Speichern gelöscht.



Ich meinte auch eigentlich das du die komplette Reihenfolge eventuell umdrehen solltest.


```
if (Formular abgeschickt){
	Formular prüfen
	if(!fehler){
		Formular verarbeiten
		Formularwerte löschen
	}
}

Formular anzeigen
```


----------



## AHBL (6. Januar 2014)

Hallo Leute, 
ich habe ein kleines Problem mit meinem Formular oder mehr gesgat mit meiner Fehlermeldung den ich glaube ich sehe den Wald vor lauter Bäumen nicht mehr.

Ich habe folgendes Formular (habe es für hier gekürzt)

```
<?php
if(isset($_POST['submit'])) {

###### vereinfachte Verarbeitung ######
	$vor = trim($_POST['vor']);
	
###### Überprüfung der Felder ######	
   if(empty($vor)) { 
        $hinweis = "Keinen Namen angegeben"; 
	} else {
        $hinweis = "";
      } 
	  
}      
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
	<head>
		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
		<title>Verarbeitung von Formularen</title>
		<link type = "text/css" rel = "stylesheet" href = "style.css" />
	</head>
	
	<body>
		<h1>Registrierung</h1>
			<div id="content">
			<form action="ausgabe.php" method="post">
				 <h3><?php echo $hinweis; ?></h3> 
            <label for="vor">Vorname*</label><br />
			<input name="vor" type="text" value="<?php echo $vor; ?>" /><br />

			<input type="submit" name="submit" value="absenden" /> 
			</form>
</body>
</html>
```

Wenn ich jetzt das Feld Vorname leer lasse dann sollte man mir eine Fehlermeldung ausgeben aber man leitet mich weiter auf die Datei ausgabe.php wo dann auch nichts angezeigt wird, weil dass Feld ja leer ist. Das ganze läuft erstmal ohne eine Datenbank da ich das ganze erstmal so auf XAMPP laufen habe zum testen (und ich bis jetzt zu faul war mir da eine Datenbank anzulegen). Ist das Feld ausgefüllt werde ich auch auf due ausgabe.php geleitet und der Inhalt wird ausgegeben. In der ausgabe.php steht nur 


```
echo "<p>" . $_POST["vor"] . "</p>";
```

Und dann hätte ich noch eine Frage und zwar ist es egal, ob ich mit empty oder isset abfrage ob etwas in dem Feld steht? Ist eins der beiden besser geeignet oder ist es egal?

Eine schöne Woche wünsche ich euch allen mit freundlichen grüßen
AHBL


----------



## alxy (6. Januar 2014)

Benutz empty, isset würde prüfen ob das Feld überhaupt im POST array existiert, du willst aber das es existiert UND nicht leer ist.

Dein Problem ist ja wohl logisch, wenn in deiner Form volgender action-Tag steht: action="ausgabe.php". Dadurch wirst du automatisch auf diese Seite weitergeleitet, wenn du auf Abesenden drückst. Lösung: Ersetze das ausgabe.php durch den namen der Datei, auf der das Formular ist. zB form.php oder index.php, je nach dem wie die Datei halt heißt


----------



## Igäl (14. Januar 2014)

Edit2:
Gerade habe ich gemerkt, dass das ursprüngliche Problem, welches ich beantworten wollte schon vor langer Zeit abgehandelt wurde. Ich lass den Post aber mal so, sollte jemand über die Suchfunktion über den Thread stolpern.

Für dieses Problem habe ich mir zwei Funktionen zurechtgelegt:


```
public function post_default($key, $def = false) {
	$val = array_key_exists($key,$_POST) ? $_POST[$key] : $def;
	return $val;
}
```

In jedem Fall wird den Formularfeldern beim Laden der Seite ein Wert zugewiesen. Wenn der Key (Wert des Attributes 'name' des Formularfeldes) in der Superglobalen $_POST vorhanden ist (üblicherweise dann, wenn das Formular vorgängig bereits abgeschickt wurde und aufgrund von Fehlerbehandlungsroutinen auf die selbe Seite gelinkt wurde), wird der entsprechende Wert von $_POST[$key] in das Formularfeld gefüllt, was dann im Normalfall dem entspricht, was der User vorgängig des Ausfüllens des Formulares eingefüllt hat. Wurde das Formularfeld nicht ausgefüllt oder aber das Formular erstmalig geladen, wird als $default-Wert ein Leerschlag mitgegeben. Kannst dann aber mitgeben was du willst.



```
<input type="text" name="postTitle" value="<?php post_default('postTitle', ' '); ?>" />
<input type="text" name="postEMail" value="<?php post_default('postEMail', ' '); ?>" /> 
<textarea name="postBody"><?php echo post_default('postBody', ' '); ?></textarea>
```

Da ich auf der Arbeit bin, ist das Snippet kurz aus dem Kopf hingeschrieben und ich bin somit keineswegs sicher, dass mir kein Fehler unterlaufen ist, da es so nicht getestet ist ;o) 

So long...

Igäl

Edit: Tadelabschnitt rausgenommen. Der Kaffee war ja schon längst kalt ;o)


----------



## bofh1337 (14. Januar 2014)

timestamp hat gesagt.:


> Du könntest in die Inputfelder folgendes machen:
> 
> 
> ```
> ...



Ich würde die Variable aber noch escapen, falls sie gültig und nicht leer ist, sonst sieht es immer so komisch aus, wenn da JS/HTML-Code eingeschleust werden soll


----------

