Wenn ein od. mehrere Formularfelder leer sind, dann soll kein neuer Datensatz erstellt werden
Philip P.
- php
Guten Morgen!
Ich bin sozusagen blutiger Anfänger in den Bereichen PHP und MySQL. Bei mir siehts so aus: im oberen Teil der Website ist ein Formular, bestehend aus mehreren Textfeldern. Ich habe es jetzt zwar geschafft, dass "wenigstens" Fehlermeldungen ausgegeben werden, wenn ein oder mehrere Textfelder leer sind. Der Code sieht wie folgt aus:
--- Beginn --
$action = $_SERVER['PHP_SELF'];
if ($_SERVER['REQUEST_METHOD'] == 'POST')
{
if (empty($_POST['title']))
{
//Keinen DB-Eintrag machen!
echo "Sie müssen einen Titel eingeben.";
}
if (empty($_POST['priority']))
{
//Keinen DB-Eintrag machen!
echo "<br>Sie müssen die Priorität auswählen.";
}
if (empty($_POST['text']))
{
//Keinen DB-Eintrag machen!
echo "<br>Sie müssen eine Beschreibung eingeben.";
}
if (empty($_POST['date']))
{
//Keinen DB-Eintrag machen!
echo "<br>Sie müssen ein Datum angeben.";
}
if (empty($_POST['status']))
{
//Keinen DB-Eintrag machen!
echo "<br>Sie müssen einen Status auswählen.<br>";
}
}
--- Ende ---
Wie ihr sicher bemerkt habt, werden natürlich trotzdem weiterhin Datensätze erstellt. Das möchte ich verhindern. Wie lautet der Befehl, um keinen DB-Eintrag zu machen? Gibt es so einen Befehl überhaupt? Wie muss ich vorgehen?
Einen schönen Tag wünscht:
Philip P.
Hi,
Wie lautet der Befehl, um keinen DB-Eintrag zu machen? Gibt es so einen Befehl überhaupt?
es gibt keinen Befehl, um etwas nicht zu machen. Das wäre Unsinn, denn einen solchen Befehl müsste man permanent schreiben. Das übliche Verfahren, um etwas nicht zu machen ist, es nicht zu befehlen.
Wie muss ich vorgehen?
Anstatt nur die Fehlermeldung auszugeben merke Dir, dass ein Fehler aufgetreten ist, und mache davon die Ausführung des Befehls abhängig.
Cheatah
Hallo Cheatah
Okay, danke! Du hast mir einen wichtigen Denkanstoss gegeben. Mal sehen, wie es jetzt weitergeht. Ich habe erst diese Woche mit PHP/MySQL begonnen.
Gurss
Philip P.
Hurra, jetzt läuft die Sache wie gewünscht. Das Problem habe ich wie folgt gelöst:
if($New)
{
if (!empty($_POST['title']))
{
if (!empty($_POST['priority']))
{
if (!empty($_POST['text']))
{
if (!empty($_POST['date']))
{
if (!empty($_POST['status']))
mysql_query(sprintf('INSERT INTO tblToDo (fldTitle,fldText,fldDate,fldUser,fldStatus,fldChild,fldPriority)
VALUES ("%s","%s","%s","%s","%s","%s","%s")',
$title,
$text,
$date,
$user,
$status,
$child,
$priority));
echo mysql_error();
}
}
}
}
}
Codeerklärungen:
Hallo Phillip,
Da kein Textfeld leer sein darf, ist eben eine fünffache if-Verschachtelung nötig. Aber geht das auch noch etwas eleganter?
Aber ja, das immer wieder gern empfohlene "Affenformular"(http://www.php-faq.de/q/q-stil-normalform.html) hat da seinen ganz eigenen Reiz...
Gruß aus Essen
Maik
Hi,
Aber geht das auch noch etwas eleganter?
mein Vorschlag wäre gewesen, die Fehlermeldungen erst mal zu sammeln, anstatt sie auszugeben. Sind anschließend welche vorhanden, soll der Datenbankeintrag augenscheinlich nicht vorgenommen werden.
Cheatah
Hi,
Aber geht das auch noch etwas eleganter?
Natürlich, ich schlage vor sowas zu machen:
$error = false;
$error_msg = "";
if (empty($_POST['title']))
{
$error = true;
$error_msg .= "Titel fehlt<br>";
}
...
if($error)
{
echo $error_msg;
}
else
{
//datensatz hinzufügen
}
MfG
Hi,
Natürlich, ich schlage vor sowas zu machen:
inwieweit unterscheidet sich das von meinem Vorschlag, abgesehen davon, dass Du eine zusätzliche Variable benötigst, die in meinem Konzept fehlt, und dass Du dem Fragesteller durch das Posten fertigen Codes geschadet hast?
Cheatah
hi,
inwieweit unterscheidet sich das von meinem Vorschlag, abgesehen
davon, dass Du eine zusätzliche Variable benötigst, die in meinem
Konzept fehlt, und dass Du dem Fragesteller durch das Posten fertigen
Codes geschadet hast?
Nuja, er ist ein n00b hat er ja selber gesagt. diese zusätzliche
variable (ich nehme an $error) kann man auch weglassen und ein
strlen($error_msg)>0 machen. es gibt immer viele viele wege.
MfG
Hi,
Nuja, er ist ein n00b hat er ja selber gesagt.
*gerade* einem Anfänger darf man keinen fertigen Quellcode geben.
diese zusätzliche
variable (ich nehme an $error) kann man auch weglassen und ein
strlen($error_msg)>0 machen. es gibt immer viele viele wege.
Richtig. Meiner wäre noch ein wenig anders gewesen; und auch bei Deinem (neuen) Weg hätte ich strlen() nicht verwendet.
Cheatah