Formular serverseitig kontrollieren und abschicken

chuvak

Erfahrenes Mitglied
Ich habe ein Formular, welches serverseitig auf Richtigkeit kontrolliert wird.
Wie stell ich es an, dass es NUR dann geschickt wird, wenn alles korrekt ist, sonst kommt eine Fehlermeldung?
Ich könnte das mit JavaScript machen, möchte aber gerne PHP verwenden.

Danke!
 
Hi,
möglich wäre etwas in dieser Art:

Code:
<?php
// name auf dem Formular prüfen
if( $_REQUEST['name'] == "")
{
    $meldung = "Es muss ein Name angegeben werde!";
}
else if( strlen( $_REQUEST['name'] ) > 5 )
{
    $meldung = "Es sollte ein richtiger Name angegeben werden!";
}
// prüfen ob eine plz eingegeben wurde
else if( $_REQUEST['plz'] == "" )
{
    $meldung = "Die Postleitzahl brauchen wir!";
}
// wenn alles richtig eingegeben wurde
else
{
    // SQL um es einzutragen
    $meldung = "Alle angaben waren korekt, Auftrag wird verarbeitet!";
}
echo $meldung;
?>
Das ist nun nur der Teil der kommt, wenn das Formular abgeschickt wurde.

mfg.Fide
 
Zuletzt bearbeitet:
Naja, ich hätte eher daran gedacht, dass an eine andere Seite rüberzuschicken.
In Deinem Beispiel wird das Formular auf einer Seite ausgewertet und verarbeitet.

Ich möchte gerne erreichen, dass es auf einer Seite ausgewertet wird, wenn alles in Ordnung ist, soll es an eine andere Seite verschickt werden.
Dieses "Verschicken" ist ja kein Problem (action="verarbeiten.php"), nur soll genau das Verschicken bei fehlerhaften Formulareingaben verhindert werden.


Ich hoffe, das war verständlich genug von mir... :confused:
 
Das geht soweit ich weiss nicht, da php ja erst wieder zuständig ist in dem Moment wo die Aktion ausgeführt wird.
Wenn du vor der Aktion prüfen willst bleibt nur Javascript, wobei du da ja auch Javascript zusammen mit php verwenden könntest, also Ajax.
Nur solltest du dir da gut überlegen ob es denn Aufwand wert ist.
 
Du könntest die Daten auch mit deinem PHP Script auf Richtigkeit prüfen und im Erfolgsfall die ausgefüllte Seite an den Benutzer zurückschicken, nur dass du jetzt als Zieladresse die andere Seite angibst.
Die Seite kannst du dann noch mit dem Befehl
Code:
onLoad='meineForm.submit();'
automatisch (dieses mal an die andere Seite) abschicken lassen.

Warum du die Prüfung aber nicht gleich mit JavaScript vornehmen willst, verstehe ich nicht so recht.
 
Wenn Du dein Formular an eine andere Seite schickst zur Auswertung, kannst du überprüfen ob die Felder ausgefüllt sind und dann falls alles richtig ist mit header() an die Seite mt dem Formular eine antwort zurückschicken:

formularseite zb. formular.php:
PHP:
if($_GET['korrekt'] ==1])
{
     echo "<script>alert('Das Formular wurde erfolgreich abgeschickt')</script>";
}
elseif($_GET['fehler'] ==1)
{
     echo "<script>alert('Sie müssen alle Felder ausfüllen!)</script>";
}
echo '
<form action="form_auswertung.php?action=formmail" method="post" name="mailform">
..........
</form>';

und die auswertung:

PHP:
if(isset(butten geklickt) && $_GET['action'] == "formmail")
{
     //überprüfen ob die Felder ausgefüllt
     if($_POST['feld1'] !="" && $_POST['feld2'] !=""])
     {
          //mail abschicken.....
          header("Location: formular.php?korrekt=1");
     }
     else
     {
     header("Location: formular.php?fehler=1");
     }
}
 
Zuletzt bearbeitet:
Sorry, wenn ich mich auch noch einmische...

So, wie Du Dir das vorstellst, geht es leider nicht.
Wie bereits meine Vorredner beiläufig erwähnt haben, kann PHP erst das Formular prüfen, wenn die Daten an den erver gesendet wurden. Denn PHP läuft auf'm Server und i.d.R nicht auf den Client-Rechnern.

D.h. Du mußt in Deiner Form auf eine neue Seite verlinken! (Kann natürlich auch die gleiche sein.)
Der Ansatz dürfte klar sein, z.B.
HTML:
<form id="meinformular" action="auswertung.php" method="post">
 ...
 <input type="submit" name="abgeschlossen" />
</form>

Dann machst Du in der Datei auswertung.php die Prüfung auf Richtigkeit:
(hier nur mal als Beispiel eine Prüfung auf Eingabe des Namens)
PHP:
<?php
$korrekt = true;

if(isset($_POST['abgeschlossen'])) {
  if(!isset($_POST['dername']) || $_POST['dername'] == "") $korrekt = false;
  
  $korrekt ? header("location: erfolgreich.php"): echo "Es ist ein Fehler aufgetreten";
}
?>

Du kannst natürlich im Fehlerfall auch auf eine entprechende Seite verzweigen, die den Fehler ein wenig hübscher darstellt,
als nur ein kurzer Satz in der linken oberen Ecke. Dann wäre es die Variante z.B.
PHP:
<?php
$korrekt = true;
$errMsg = "";

if(isset($_POST['abgeschlossen'])) {
  if(!isset($_POST['dername']) || $_POST['dername'] == "") {
    $korrekt = false;
    $errMsg = "Es ist ein Fehler bei der Eingabe des Names aufgetreten!";
  }

  $korrekt ? header("location: erfolgreich.php"): header("location: error.php?msg=".$errMsg);
}
?>

In der error.php kannst Du dann die Fehlermeldung in das HTML-Gerüst einbauen, z.B.:
HTML:
...
<table id="fehler" align="center">
 <tr>
  <td id="meldung" align="center" valign="middle"><?= $_GET['msg'] ?></td>
 </tr>
</table>
...
 
Hi, ich muss doch auch mal grad meinen Senf dazugeben :)

Die richtige Lösung wurde ja schon von meinen beiden Vorrednern genannt, allerdings möchte ich noch einmal darauf hinweisen, dass nicht nur die Überprüfung der Daten, sondern auch jede Weiterverarbeitung, wie z.B. das Eintragen in eine Datenbank usw. unbedingt in der Datei erfolgen muss an die das Formular zuerst versendet wird. (!)

Die mit header() aufgerufenen Seiten dürfen nur Informationen anzeigen, aber keine Aktionen ausführen, sonst besteht ein ziemliches Sicherheitsrisko, da sonst jeder belibiege Nutzer Daten einschleusen kann, wenn er die Dateiname kennt.
 
@EvilO
Das ist richtig! Aber zuviel auf einmal ist eher verwirrend für die meisten.
Ich gehe lieber erstmal auf die eigentliche Fragestellung ein. Ein wenig Eigeninitiative gehört dazu finde ich...
:)
 
@KingNothing
Da stimme ich dir definitiv zu, aber ich wollte es trotzdem hier mal schreiben, da die Sicherheit von Webanwendungen leider von sehr vielen Programmieren (nicht nur von Anfängern) sträflichst vernachlässigt wird.
 
Zurück