Formulare prüfen: Fehler gefunden, aber warum ?
Enrico
- php
Guten Morgen,
Entschuldigt bitte, dass ich mein Problem in einem neuen Thread wieder aufgreife, aber mein alter Beitrag wurde bereits in's Archiv verschoben.
Ich habe den Fehler nun gefunden, weiss aber nicht, warum er auftritt.
Hier der neue Code, nun in einer einzigen Datei:
<?php
global $HTTP_POST_VARS;
global $HTTP_GET_VARS;
$Laenge = array ("Name" => array ("min" => 3,
"max" => 30),
... weitere Elemente ...
...));
$Fehler = array ("Name" => array ("...",
... weitere Elemente ...
"..."),
... weitere Elemente ...
...));
$Fehlermeldung = "";
$Methode = (isset ($HTTP_POST_VARS)) ? "Post" : "Get";
$Formular = ($Methode == "Post") ? $HTTP_POST_VARS : $HTTP_GET_VARS;
foreach ($Formular as $Feld_Name => $Feld_Inhalt)
{
$Fehler = false;
if (isset ($Laenge [$Feld_Name]["min"]))
{
if (strlen ($Feld_Inhalt) === 0)
{
if ($Pflichtfeld [$Feld_Name] == "Ja")
{
$Fehlermeldung .= "<br>" . $Fehler [$Feld_Name][0];
$Fehler == true;
}
}
if ($Fehler === false)
{
if (strlen ($Feld_Inhalt) < $Laenge [$Feld_Name]["min"])
$Fehlermeldung .= "<br>" . $Fehler [$Feld_Name][1];
else
if (strlen ($Feld_Inhalt) > $Laenge [$Feld_Name]["max"])
$Fehlermeldung .= "<br>" . $Fehler [$Feld_Name][2];
switch ($Feld_Name)
{
case "Name":
{
...
break;
}
case "eMail":
{
...
break;
}
...
}
}
}
}
if ($Fehlermeldung !== "")
echo $Fehlermeldung;
?>
Der Fehler liegt in der Erweiterung der Variablen $Fehlermeldung um die jeweilige Fehlermeldung:
$Fehlermeldung .= "<br>" . $Fehler [$Feld_Name][0];
Aber warum ?
Wenn ich beispielsweise alle Elemente des Array-Elementes "Name" ausgeben lasse, dann bekomme ich auch alle hinterlegten Werte am Bildschirm angezeigt:
for ($i = 0; $i < count ($Fehler ["Name"]); $i++)
echo $Fehler ["Name"][$i] . "<br>";
Ich hoffe sehr, dass Ihr mir bei dieser letzten Hürde helfen könnt.
Vielen Dank.
Gruss, Enrico
Lieber Enrico,
$Fehlermeldung .= "<br>" . $Fehler [$Feld_Name][0];
Es soll also die Variablen $Fehlermeldung um einen Wert erweitert werden, der im nullten Element des Arrays $Fehler[$Feld_Name] steht... OK. (Ist das Leerzeichen zwischen dem Variablennamen und der eckigen Klammer für den Index von Bedeutung?)
Der Fehler liegt in der Erweiterung der Variablen $Fehlermeldung um die jeweilige Fehlermeldung:
Was genau ist der Fehler (Syntax, Parse Error, Ausgabe nicht wie erwartet...)? Ich kenne Deinen alten Thread nicht, und du gibst auch keinen Link dazu mit...
Wenn ich beispielsweise alle Elemente des Array-Elementes "Name" ausgeben lasse, dann bekomme ich auch alle hinterlegten Werte am Bildschirm angezeigt:
for ($i = 0; $i < count ($Fehler ["Name"]); $i++)
echo $Fehler ["Name"][$i] . "<br>";
Logisch. Warum auch nicht. $i ändert sich ja mit jedem Schleifendurchlauf. Bei deinem obigen Erweitern der Variablen $Fehlermeldung nimmst Du ja nur das nullte Element, hier per Variablen $i jedes. Oder lese ich Deinen Code falsch?
Liebe Grüße aus Ellwangen,
Felix Riesterer.
Hallo Felix,
Erstmal danke für Deine Antwort.
Hier der komplette Code, dann dürfte auch der Sachverhalt mit dem nullten Element klar werden.
<?php
global $HTTP_POST_VARS; global $HTTP_GET_VARS;
$Laenge = array ("Name" => array ("min" => 3, "max" => 30),
"eMail" => array ("min" => 5, "max" => 50),
"Homepage" => array ("min" => 4, "max" => 50),
"Text" => array ("min" => 20, "max" => 1000));
$Fehler = array ("Name" => array ("Du musst Deinen Namen eingeben", "Der Name muss mindestens " . $Laenge ["Name"]["min"] . " Zeichen lang sein", "Der Name darf maximal " . $Laenge ["Name"]["max"] . " Zeichen lang sein", "Das Zeichen # ist nicht zulässig", "Die Zeichen # sind nicht zulässig"),
/*
Die Raute soll später noch durch die einzelnen fehlerhaften Zeichen ersetzt werden
*/
"eMail" => array ("Du musst Deine eMail-Adresse eingeben", "Deine eMail-Adresse muss mindestens " . $Laenge ["eMail"]["min"] . " Zeichen lang sein", "Deine eMail-Adresse darf maximal " . $Laenge ["eMail"]["max"] . " Zeichen lang sein", "Deine eMail-Adresse ist ungültig", "Dein eMail-Server hat Deine eMail-Adresse zurückgewiesen", "Dein eMail-Server hat nicht geantwortet", "Es konnte keine Verbindung zu Deinem eMail-Server hergestellt werden"),
"Homepage" => array ("Du musst Deine Homepage-Adresse eingeben", "Deine Homepage-Adresse muss mindestens " . $Laenge ["Homepage"]["min"] . " Zeichen lang sein", "Deine Homepage-Adresse darf maximal " . $Laenge ["Homepage"]["max"] . " Zeichen lang sein"),
"Text" => array ("Du musst Deinen Text eingeben", "Dein Text muss mindestens " . $Laenge ["Text"]["min"] . " Zeichen lang sein", "Dein Text darf maximal " . $Laenge ["Text"]["max"] . " Zeichen lang sein"));
$Fehlermeldung = "";
$Methode = (isset ($HTTP_POST_VARS)) ? "Post" : "Get"; $Formular = ($Methode == "Post") ? $HTTP_POST_VARS : $HTTP_GET_VARS;
foreach ($Formular as $Feld_Name => $Feld_Inhalt) { $Fehler = false;
if (isset ($Laenge [$Feld_Name]["min"])) { $Feld_Inhalt = str_replace ("\n", "<br>", $Feld_Inhalt); $Feld_Inhalt = str_replace ("\t", "", $Feld_Inhalt); $Feld_Inhalt = str_replace ("\r", "", $Feld_Inhalt); $Feld_Inhalt = preg_replace ("/<SCRIPT(.?)>(.?)</SCRIPT(.*?)>/i", "", $Feld_Inhalt);
if (strlen ($Feld_Inhalt) === 0) { if ($Pflichtfeld [$Feld_Name] == "Ja") { $Fehlermeldung .= "<br>" . $Fehler [$Feld_Name][0]; $Fehler == true; } }
if ($Fehler === false) { if (strlen ($Feld_Inhalt) < $Laenge [$Feld_Name]["min"]) $Fehlermeldung .= "<br>" . $Fehler [$Feld_Name][1]; else if (strlen ($Feld_Inhalt) > $Laenge [$Feld_Name]["max"]) $Fehlermeldung .= "<br>" . $Fehler [$Feld_Name][2];
... swizch und weitere Prüfungen ...
} } }
if ($Fehlermeldung !== "") echo $Fehlermeldung;
?>
Die Definition der Pflichtfelder eines Formulares lege ich in einer eigenen Datei fest:
$Pflichtfeld = array ("Name" => "Ja", "eMail" => "Nein", "Homepage" => "Nein", "Text" => "Ja");
Ich hoffe, das hilft Dir (und damit auch mir :o) ) weiter
Gruss, Enrico
Lieber Enrico,
ich verstehe noch immer nicht, was der "Fehler" in Deinem Code sein soll... Worin äussert sich Dein "Fehler"? Diesen Code komplett durchzulesen ist aufwändig... Und wenn ich nicht weß, wonach ich dabei suchen soll, unnötig.
$Methode = (isset ($HTTP_POST_VARS)) ? "Post" : "Get";
$Formular = ($Methode == "Post") ? $HTTP_POST_VARS : $HTTP_GET_VARS;
Ach ja. Willst Du $HTTP_POST_VARS nicht lieber durch das neuere $_POST und $HTTP_GET_VARS durch $_GET ersetzen? Das wird auf php.net so empfohlen...
Liebe Grüße aus Ellwangen,
Felix Riesterer.
Hallo Felix,
mein Problem ist, dass die Variable $Fehlermeldung, die, wenn ein Inhalt vorhanden ist, also ein Fehler vorliegt, die zugeordneten Fehlermeldungen ausgeben soll.
Wurde beispielsweise kein Name eingegeben und ist das Feld "Name" ein Pflichtfeld, dann soll die Variable $Fehlermeldung um das Array-Element $Fehler [$Feld_Name][0] (= "Du musst Deinen Namen eingeben") ergänzt werden:
$Fehlermeldung .= "<br>" . $Fehler [$Feld_Name][0];
Ist der Name kleiner als mindestens 3 Zeichen, dann soll die Variable $Fehlermeldung um das Array-Element $Fehler [$Feld_Name][1] (= "Der Name muss mindestens ... Zeichen lang sein") ergänzt werden:
$Fehlermeldung .= "<br>" . $Fehler [$Feld_Name][1];
Die testweise Zuweisung mit $Fehlermeldung .= "Hallo" funktioniert eindanfrei. Hier wird mir dann auch der Inhalt "Hallo" ausgegeben.
Meine Zuweisung über $Fehlermeldung .= "<br>" . $Fehler [$Feld_Name][Nr]; hingegen funktioniert leider nicht.
Und ich habe keine Ahnung, warum, zumal, wie ich ja bereits beschrieben habe, die Inhalte des Arrays über eine Schleife alle richtig ausgegeben werden.
Enrico
hab prompt auf den falschen Eintrag geantwortet. *g*
Siehe oben.
Liebe Grüße aus Ellwangen,
Felix Riesterer.
Mannomann, hab den dummen, richtigen Fehler jetzt endlich gefunden:
Ich hatte eine Variable namens $Fehler definiert.
Da ich aber gleichzeitig ein Array namens $Fehler definiert hatte, hatte ich damit nun eine fehlerhafte Zuordnung ohne Fehlermeldung.
Enrico
Lieber Enrico,
$Fehlermeldung .= "<br>" . $Fehler [$Feld_Name][0];
$Fehler == true;
braucht diese Wertzuweisung wirklich ein doppeltes "="? Würde "$Fehler = true;" nicht auch reichen? Ich kenne das doppelte Istgleichzeichen nur in true/false-Ausdrücken (wie bei Dir weiter oben ($Methode == "Post")).
Könnte es daran gelegen haben?
Liebe Grüße aus Ellwangen,
Felix Riesterer.
Hallo Felix,
:o) Das war in der Tat EIN Fehler, allerdings hat dieser keine Auswirkungen auf die nicht erfolgende Erweiterung der Variable $Fehlermeldung.
if (strlen ($Feld_Inhalt) === 0)
{
echo "Feld leer<br>";
if ($Pflichtfeld [$Feld_Name] === "Ja")
{
echo "Pflichtfeld";
$Fehlermeldung .= "<br>" . $Fehler [$Feld_Name][0];
$Fehler = true;
}
}
Beide echo-Befehle werden ausgeführt, d.h. die Variablen sind auch richtig.
Ich bin echt kurz vor'm Verzweifeln... :o)
Enrico
Hi Enrico,
$Fehlermeldung .= "<br>" . $Fehler [$Feld_Name][0];
$Fehler = true;
damit hast du grade dein $Fehler Array gekillt. Ab jetzt enthält es true und $Fehler[...] ist leer/undefiniert.
Gruß,
Carsten