Formular überprüfen

Stephan Liebig

Erfahrenes Mitglied
Hi,

also ich weiß nicht genau wo der Fehler ist. Ich habe ein Formular, dass ich auf Vollständigkeit prüfen möchte. Als Test habe ich alle Felder leer gelassen und auf Abschicken geklickt. Eigentlich sollte sich dann "Vorname" in die Farbe Rot färben. Allerdings passiert das nicht.

PHP:
<?php
//-----------------------------------------------------------------------
// registration
//-----------------------------------------------------------------------

	if(isset($_GET[sent]))
	{	
 
		#db settings
		include_once '../include/config.inc.php';

		if(!$connection = mysql_connect($_config['dbhost'], $_config['dbuser'], $_config['dbpass']))
			die('Verbindung zum Datenbankserver konnte nicht hergestellt werden.');

		if(!mysql_select_db($_config['dbname'], $connection))
			die ('Die Datenbank '.$_config['dbname'].' kann nicht verwendet werden. <br />MySQL-Error: <br />'.mysql_error());

		function checkAddress($Address){
			if(!preg_match("/^[A-Z0-9._ÄÖÜäöü]+@[A-Z0-9.-ÄÖÜäöü]+\.[A-Z]{2,6}$/i", $Address)) {
				$error_list[email] = true;
				return false;
			}

			return true;
		}

		#formular prüfen
		if($_POST[$anmeld['email']] != NULL)
			checkAdress($_POST[$anmeld['email']]);

		if($_POST[$anmeld['vorname']] == NULL)
			$error_list['vorname'] = true;

		if($_POST[$anmeld['name']] == NULL)
			$error_list['name'] = true;

	}
	
	function error($string) {
			#return '<span style="color:red">'.$string.'</span>';
			if($error_list['vorname'] == true)
				return '<div class="formerror">';
			else
				return '<div class="text_normal">';
		}

?>
<div>Bitte f&uuml;llen Sie das nachstehende Formular vollst&auml;ndig aus.</div><br>
<div>Die Anmeldung ist nat&uuml;rlich unverbindlich. Sie erhalten sofort ein kostenloses Startguthaben,<br>um den Leistungsumfang von business-sms.info zu testen.</div><br>
<div class="text1">
<form action="index.php?view=register&sent=true" method="post">
	<table>
		<tr>
			<td><div class="text_normal">Email</div></td>
			<td><input class="input" name="anmeld[email]" value="" style="width: 200px;" type="text"></td>
		</tr>
		<tr>
			<td><div class="text_normal">Passwort</div></td>
			<td><input class="input" name="anmeld[passwort]" style="width: 200px;" type="password"></td>
		</tr>
		<tr>
			<td><div class="text_normal">Passwort Wdh.</div></td>
			<td><input class="input" name="pw_wdh" style="width: 200px;" type="password"></td> 
		</tr>
		<tr>
			<td width="100"><div class="text_normal">Anrede</div></td>
			<td><select class="input" name="anmeld[anrede]" style="width: 200px;"><option value="Herr">Herr</option><option value="Frau">Frau</option></select></td>
		</tr>
		<tr>
			<td width="100"><div class="text_normal">Firma</div></td>
			<td><input class="input" name="anmeld[firma]" value="" style="width: 200px;" type="text"></td>
		</tr>
		<tr>
			<td width="100"><?php error(); ?>Vorname</div></td>
			<td><input class="input" name="anmeld[vorname]" value="" style="width: 200px;" type="text"></td>
		</tr>
		<tr>
			<td width="100"><div class="text_normal">Name</div></td>
			<td><input class="input" name="anmeld[name]" value="" style="width: 200px;" type="text"></td>
		</tr>
		<tr>
			<td width="100"><div class="text_normal">Stra&szlig;e</div></td>
			<td><input class="input" name="anmeld[strasse]" value="" style="width: 200px;" type="text"></td>
		</tr>
		<tr>
			<td width="100"><div class="text_normal">PLZ</div></td>
			<td><input class="input" name="anmeld[plz]" value="" style="width: 200px;" type="text"></td>
		</tr>
		<tr>
			<td width="100"><div class="text_normal">Ort</div></td>
			<td><input class="input" name="anmeld[ort]" value="" style="width: 200px;" type="text"></td>
		</tr>
		<tr>
			<td width="100"><div class="text_normal">Telefonnummer</div></td>
			<td><input class="input" name="anmeld[tel]" value="" style="width: 200px;" type="text"></td>
		</tr>
		<tr>
			<td width="100"></td>
			<td></td>
		</tr>
		<tr>
			<td colspan="2"><div class="text_normal"><input value="1" name="agb" class="input" style="" type="checkbox"> Ich stimme den <a href="index.php?view=agb" target="_blank">allgemeinen Geschäftsbedinungen</a> zu.</div></td>
		</tr>
		<tr>
			<td width="100"></td>
			<td></td>
		</tr>
		<tr>
			<td colspan="2"><input value="Anmelden" class="input" style="width: 306px; height: 24px;" type="submit"></td>
		</tr>
	</table>
</form>
</div>
 
Zuletzt bearbeitet:
Versuchs mal mit error_reporting(E_ALL); am Anfang des SKriptes...

Dann dürfte PHP dir höchstwahrscheinlich sagen, was falsch läuft...

Und was macht <?php error(); ?> da mitten drinne?
 
Hmm die Funktion error() aufrufen. Sie soll ja entscheiden, wenn ein $error_list['vorname'] = true ist, dass ein anderer CSS Style verwendet wird.

Das mit dem error_reporting werde ich gleich mal testen.
 
PHP:
<?php
error_reporting(E_ALL);
//-----------------------------------------------------------------------
// registration
//-----------------------------------------------------------------------

    if(isset($_GET['sent']))
    {    
 
        function checkAddress($Address){
            if(!preg_match("/^[A-Z0-9._ÄÖÜäöü]+@[A-Z0-9.-ÄÖÜäöü]+\.[A-Z]{2,6}$/i", $Address)) {
                return true;
            }
			return false;
        }

        #formular prüfen
        if(empty($_POST['anmeld']['email']) OR checkAdress($_POST['anmeld']['email']))
            $error_list['email'] = true;

        if(empty($_POST['anmeld']['vorname']))
            $error_list['vorname'] = true;

        if(empty($_POST['anmeld']['name']))
            $error_list['name'] = true;

    }
    
    function error($error_list) {
            #return '<span style="color:red">'.$string.'</span>';
            if($error_list['vorname'] == true)
                return '<div class="formerror">';
            else
                return '<div class="text_normal">';
    }

?>
<div class="headline1">Jetzt kostenlos bei business-sms.info anmelden.</div><br>
<div>Bitte f&uuml;llen Sie das nachstehende Formular vollst&auml;ndig aus.</div><br>
<div>Die Anmeldung ist nat&uuml;rlich unverbindlich. Sie erhalten sofort ein kostenloses Startguthaben,<br>um den Leistungsumfang von business-sms.info zu testen.</div><br>
<div class="text1">
<form action="index.php?view=register&sent=true" method="post">
    <table>
        <tr>
            <td><div class="text_normal">Email</div></td>
            <td><input class="input" name="anmeld[email]" value="" style="width: 200px;" type="text"></td>
        </tr>
        <tr>
            <td><div class="text_normal">Passwort</div></td>
            <td><input class="input" name="anmeld[passwort]" style="width: 200px;" type="password"></td>
        </tr>
        <tr>
            <td><div class="text_normal">Passwort Wdh.</div></td>
            <td><input class="input" name="pw_wdh" style="width: 200px;" type="password"></td> 
        </tr>
        <tr>
            <td width="100"><div class="text_normal">Anrede</div></td>
            <td><select class="input" name="anmeld[anrede]" style="width: 200px;"><option value="Herr">Herr</option><option value="Frau">Frau</option></select></td>
        </tr>
        <tr>
            <td width="100"><div class="text_normal">Firma</div></td>
            <td><input class="input" name="anmeld[firma]" value="" style="width: 200px;" type="text"></td>
        </tr>
        <tr>
            <td width="100"><?php echo error($error_list); ?>Vorname</div></td>
            <td><input class="input" name="anmeld[vorname]" value="" style="width: 200px;" type="text"></td>
        </tr>
        <tr>
            <td width="100"><div class="text_normal">Name</div></td>
            <td><input class="input" name="anmeld[name]" value="" style="width: 200px;" type="text"></td>
        </tr>
        <tr>
            <td width="100"><div class="text_normal">Stra&szlig;e</div></td>
            <td><input class="input" name="anmeld[strasse]" value="" style="width: 200px;" type="text"></td>
        </tr>
        <tr>
            <td width="100"><div class="text_normal">PLZ</div></td>
            <td><input class="input" name="anmeld[plz]" value="" style="width: 200px;" type="text"></td>
        </tr>
        <tr>
            <td width="100"><div class="text_normal">Ort</div></td>
            <td><input class="input" name="anmeld[ort]" value="" style="width: 200px;" type="text"></td>
        </tr>
        <tr>
            <td width="100"><div class="text_normal">Telefonnummer</div></td>
            <td><input class="input" name="anmeld[tel]" value="" style="width: 200px;" type="text"></td>
        </tr>
        <tr>
            <td width="100"></td>
            <td></td>
        </tr>
        <tr>
            <td colspan="2"><div class="text_normal"><input value="1" name="agb" class="input" style="" type="checkbox"> Ich stimme den <a href="index.php?view=agb" target="_blank">allgemeinen Geschäftsbedinungen</a> zu.</div></td>
        </tr>
        <tr>
            <td width="100"></td>
            <td></td>
        </tr>
        <tr>
            <td colspan="2"><input value="Anmelden" class="input" style="width: 306px; height: 24px;" type="submit"></td>
        </tr>
    </table>
</form>
</div>
Achtung! Ich habe den Datenbankteil gelöscht

Also folgende Fehler:
Funktionen können nicht auf Variablen im globalen Raum zugreifen, d. h. deine error() Funktion konnte nicht auf $error_list zugreifen. Noch dazu gab es nur einen return Wert, den du aber nicht verarbeitet hast. Du hättest ihn auch ausgeben müssen.
Dazu kommt, dass du die Funktionsweise von Arrays anscheinend missverstanden hast.
Ich hoffe die Korrektur oben führt dir vor Augen, wie du auf die Werte des Formulars zugreifen müsstest.
 
Ach ja... Sry hab die Funktion, die du ja oben schon definiert hattest vergessen xD
Hab letzte Nacht nicht gepennt, daher bitte ich um Verständnis :D

Das error_reporting wird sicher helfen, da dadurch PHP sagt, wenn was schief läuft...
Ohne kannst du nur davon ausgehen, dass was schief läuft, weil nichts passiert...
Mit bekommst du ne Fehlermeldung ^^

[EDIT]

Gut dass du es ansprichst Felix...
Die Definition der Funktionen können nur richtig funktionieren, wenn sie ihre Daten auch $_POST bekommen haben...

Geb dem submit-Button am besten noch name="submit" und Kessel den Funktionsblock in if(isset($_POST['submit'])){}

Du brauchst die Funktion error() doch auch nicht, wenn das Formular noch nicht abgeschickt wurde!?
 
Zuletzt bearbeitet:
Ich habe das mal soweit geändert

PHP:
function error($error_list, $string) {
            #return '<span style="color:red">'.$string.'</span>';
            if($error_list[$string] == true)
                return '<div class="formerror">';
            else
                return '<div class="text_normal">';
    }

Und dann im Formular:
PHP:
<td><?php echo error($error_list, "email"); ?>Email</div></td>

Allerdings gibt er mir dann den Fehler:
Notice: Undefined variable: error_list in [...]/register.php on line 45
 
Falls kein Fehler auftritt, ist $error_list natürlich kein Array und wird somit nicht deklariert.

Setz vor die Prüfung der Felder einfach folgendes:

PHP:
$error_list = array();
 
Okay, das habe ich soweit gemacht. Allerdings habe ich als neuen Fehler:

Notice: Undefined index: email in [...]\register.php on line 56

PHP:
$error_list = array("email", ...);
Hilft mir irgendwie auch nicht weiter...
 
Nein, so war es auch nicht gemeint.

PHP:
if(isset($_GET['sent']))
    {
      $error_list = array();

Danach ganz normal weiter.

Und die Funktion erweiterst du wie folgt:

PHP:
function error($error_list, $string) {
            #return '<span style="color:red">'.$string.'</span>';
            if(!empty($error_list[$string]) && $error_list[$string] == true)
                return '<div class="formerror">';
            else
                return '<div class="text_normal">';
    }
 
Okay vielen Dank schonmal. Alle Fehlermeldung vor dem Klick auf Abschicken sind nun beseitigt.
Allerdings habe ich ein Problem mit der Passwort überprüfung.

PHP:
 if(empty($_POST['anmeld']['passwort']))
            $error_list['passwort'] = true;
		else
			$error_list['passwort'] = false;
			
		if(empty($_POST['anmeld']['pw_wdh']))
            $error_list['pw_wdh'] = true;
		else
			$error_list['pw_wdh'] = false;
			
		if($_POST['anmeld']['passwort'] != $_POST['anmeld']['pw_wdh']) {
			$pw_incorrect = true;
			$error_code = '<span style="color:red">Das Passwort stimmt nicht &uuml;berein!</span>';
		}
		else
			$error_list['pw_incorrect'] = false;

PHP:
        <tr>
            <td><?php echo error($error_list, "passwort"); ?>Passwort</div></td>
            <td><input class="input" name="anmeld[passwort]" style="width: 200px;" type="password"></td>
        </tr>
        <tr>
            <td><?php echo error($error_list, "pw_wdh"); ?>Passwort Wdh.</div></td>
            <td><input class="input" name="pw_wdh" style="width: 200px;" type="password"></td> 
        </tr>

Wenn ich ein identisches Passwort eingebe, dann bekomme ich trotzdem die Fehlermeldung, dass es falsch ist. Und unabhängig davon bekomme ich noch diese eine Fehlermeldung:

Notice: Undefined index: pw_wdh in [...]/register.php on line 36

Warum zickt denn das pw_wdh jetzt noch rum?
 
Zurück