[PHP] Bei fehlerhafter Formulareingabe nichts tun

M

Mr. Snoot

Gast
Hi,

kann ich ein Script dazu bewegen, dass es bei einer fehlerhaften Eingabe (leere Felder) einfach nichts macht?

Bisher hab ichs so gelöst, dass man auf die gleiche Seite umgeleitet wird:
PHP:
{
  header("Location: http://...");
  exit();
}
Aber es sollte halt nichts passieren. Das ganze soll einfach als Spamschutz dienen, daher will ich nicht unbedingt ne Fehlermeldung oder sonstiges veranstalten - mach mir doch nicht extra Arbeit für den Spam ;)
 
die()
Macht eigentlich das selbe wie exit. Nur das du als Parameter noch eine Meldung ausgeben lassen kannst.

PHP:
if(trim($text)=="") die();
 
Ja fast - aber es sollte gar nichts passieren. Die Seite sollte so stehen bleiben ohne Mucks :)
 
Naja, wenn du das mit PHP machen willst, dann muss doch erstmal was an den Server gesendet werden. Also wird daraus zumindest ein reload der Seite.
Ich würde das dann mit einer if Abfrage machen.

PHP:
if(trim($text)!="") {
//mach was
}

//zeige Seite
 
Je nachdem, was du mit dem Formular machen willst, wenn etwas passiert (d.h. etwas in die Formularfelder eingetragen wird), ist es sinnvoll, das Formular an die selbe Seite zu schicken, auf der sich das Formular auch befindet.
Dort kannst du dann mit folgendem Code die Formulardaten bearbeiten.
PHP:
if(isset($_POST["submit"])) // Wenn das Formular abgesendet wurde, dann... (dazu muss dein Absendebutton den Namen "submit" tragen)
{
  $formularfeld = $_POST["formularfeldname"];
  if(!empty($formularfeld)) // Wenn das Formularfeld nicht leer ist...
  {
    //Skript ausführen
  }
}

Hoffe das hat geholfen. Gruß, HardwarePope
 
Zuletzt bearbeitet:
Ich finde empty() ist eine sinnlose Funktion, da ! in php genau das selbe macht und dabei auch noch schneller ist. Außerdem würde ich noch mit trim() prüfen, ob die Variable überhaupt mit Inhalt gefüllt ist.
 
Also ich kenn mich nicht wirklich mit PHP aus, und hab das bisher so gelöst:
PHP:
<?php
if(($_POST["Name"] == "") OR ($_POST["Mitteilung"] == ""))
{
  header("Location: http://...");
  exit();
}
Gut - schlecht? :)


@ HardwarePope: was bringt mir das für Vorteile?
PHP:
if(isset($_POST["submit"]))
 
@ Gauder: Das macht Sinn, z.B. wenn du mit Get irgendetwas noch aufrufen willst oder wenn du mehrere verschiedene Absendebuttons hast (z.B. einen zum Bilder hochladen und einen zum endgültig Abschicken, o.ä.) Wenn gar kein Formular abgesendet wurde, wird auch das ganze Skript nicht durchlaufen und somit sparst du Zeit und Ressourcen.

Edit: Ich würde das mit dem Skript wie gesagt anders lösen, indem du das Formular an dieselbe Seite schickst und wenn die Eingaben korrekt sind, die bestimmten Aktionen ausführst und wenn nicht wird damit einfach die normale Formularseite wieder angezeigt - so würde ich es am einfachsten finden.

Ich finde empty() ist eine sinnlose Funktion, da ! in php genau das selbe macht und dabei auch noch schneller ist. Außerdem würde ich noch mit trim() prüfen, ob die Variable überhaupt mit Inhalt gefüllt ist.
Muss nicht unbedingt sinnlos sein - sonst gäbe es die Funktion wahrscheinlich gar nicht ;)
Wenn er aber nur überprüfen will, ob das Feld absolut leer ist (und mit einem Leerzeichen ist es nicht absolut leer), dann ist meiner Meinung nach empty() ok.
 
Zuletzt bearbeitet:
Hm, also wenn alles korrekt ausgefüllt wurde, könnte ich ne Variable setzen und mir die auf der Formularseite mit echo ausgeben lassen, oder wie?

Also so irgendwie, Skript:
PHP:
if ... blablubb ...
{
  $gesendet ="Nachricht gesendet";
  header("Location: $PHP_SELF");
  exit();
}
...
und beim Formular
PHP:
... echo "gesendet"; ...
edit: wobei die Variable dann ja weg sein dürfte.
 
Zuletzt bearbeitet:
Ja genau könntest du machen. Z.B. wenn du etwas postest und es dann z.B. weiter bearbeiten willst, kannst du bei korrekter Eingabe den schon geschriebenen Text wieder in die Formularfelder eintragen, um daran weiterzuschreiben.

Code-mäßig sieht das etwa so aus:

PHP:
<?
$der_schon_geschriebene_text = $_POST["formularfeld"];
?>

<input name="formularfeld" type="text" value="<? echo $der_schon_geschriebene_text; ?>"> // ... weiter unten dann dein Eingabefeld
 
Zuletzt bearbeitet:
Ja, aber die Variable bleibt mir ja nicht erhalten wenn ich über das Script wieder zurückverweise, oder? Zumindest haut das so nicht hin.
 
PHP:
$skript = false;
$feld = "";
if(isset($_POST["submit"])) {
    if(isset($_POST['feld']) && trim($_POST['feld'])!="") {
        $feld = $_POST['feld'];
        //skript ausführen
        $skript = true;
    }
}

if($skript) echo "Skript wurde augeführt."

<input type="text" name="feld" value="<?php echo $feld; ?>" />
 
Zuletzt bearbeitet:
also du willst überprüfen ob die felder leer sind und dann wenn diese leer sind zum formular zurück?


dann mahc das doch so:
PHP:
<?php
    if($_POST['form_send']) {
         if(empty($_POST['text1'])){
              $error = "Bitte alle Felder ausfüllen!"
         } else {
              //weiteres Skript ausführen
         }
    }
?>
<form action="<?php echo($PHP_SELF); ?>" method="post">
<input type="text" "name="text1" value="<?php echo($_POST['text1']); ?>" />
<input type="submit" name="form_send" value="Absenden" />
</form>

Für $PHP_SELF kannst du natürlich auch sowas wie "index.php?inhalt=formular" etc. eingeben...
 
Ja genauso wie Muuhmann kann man es machen (siehe auch meine vorherigen Beiträge - er hat sie netterweise noch zusammengefasst :D ).
Wenn du jetzt noch willst, dass z.B. das Formular nicht mehr erscheint, wenn es korrekt ausgefüllt wurde kannst du bspw. als else-Aktion nur das Formular anzeigen lassen:
PHP:
if(isset($_POST["submit"]))
{
  if(!empty($_POST["formularfeld"]))
  {
    // Skript zur Bearbeitung der eingegebenen Formulardaten
  }
  else
  {
    // Formular anzeigen und gegebenenfalls noch Fehler anzeigen lassen
  }
}
else
{
  // Formular anzeigen
}
 
Mein Güte, erschlagt mich doch nicht mit so viel Code :eek: Wann soll ich das denn alles verarbeiten :D

Hab auch grad in einem Buch Anleitungen für MySQL Datenbanken gefunden, wo man Einträge ändert (einträgt, löscht, ausgibt usw. ) und zur Kontrolle was man ändert, werden die jeweiligen Werte aus der DB gelesen und in die Felder geschrieben. So in der Art dürfte das hier ja auch gehen - nur eben ohne DB.


Denke, ich werde das mit den ganzen Codeschnippseln hier jetzt auch irgendwie hinbekommen. Also vielen Dank einstweilen für die ganzen Tipps, wenn ich's hinbekommen hab meld ich mich nochmal - andernfalls auch ;)


@ The Prophet: merci, aber im Momet langt mir erstmal die reine Überprüfung ob die Felder leer sind. Wenn ich den ganzen restlichen Krempel erledigt habe, widme ich mich der weiteren Überprüfung :)
 
Zurück
Oben