Formularüberprüfung

sirvival

Erfahrenes Mitglied
Hallo allerseits,

ich habe nochmal eine Frage zur Formularüberprüfung. Das heißt ich brauche nochmal einen Denkanstoß.

Ich bin wie gesagt grad dabei Formulare, d.h. deren Inhalte nach der Eingabe zu überprüfen.
Allerdings habe ich dabei das Problem dass verschiedene Felder doppelt vorkommen, nicht eingegeben werden müssen, aber bei Eingabe identisch sein müssen. (richtig es ist das Passwortfeld) :rolleyes:

Das ganze wiegesagt in Verbindung mit anderen Feldern im Formular.


Wäre nett wenn Ihr mir helfen könntet.
 
Wie ich meine "muss", "kann" und "ist" Felder am besten überprüfe, ohne dabei in einem italienischen if Spagettitopf zu landen :)
 
Die Verarbeitung von Formulardaten gehört nun mal – will man es ordenlich machen – zu den kompliziertesten Aufgaben. Du kannst dir jedoch Funktionen oder Algorithmen schreiben, die dir einen Teil automatisieren.
 
Richtig das ist sicher auch der Grund wieso es bei mir so massiv scheitert :-)
Das beste wäre sicher das ganze in eine Klasse auszulagern, was sicher nicht so komplex ist.
Mein Problem ist allerdings nach wie vor die IST,MUSST,KANN Eingaben zu überprüfen, ohne dabei Overhead zu produzieren.
 
Mein konzeptioneller Vorschlag:
PHP:
<?php

	$_notes = array(
		'error'   => array(),
		'notice'  => array(),
		'success' => array()
	);
	$_requiredArgs = array(
		'POST' => array(
			'foo' => 'Bitte füllen Sie das „foo“-Feld aus.',
			'bar' => 'Bitte füllen Sie das „bar“-Feld aus.'
		)
	);
	foreach( $_requiredArgs as $method => $args ) {
		if( !isset(${'_'.strtoupper($method)}) ) {
			continue;
		}
		foreach( $args as $key => $value ) {
			if( !isset(${'_'.strtoupper($method)}[$key]) || trim(${'_'.strtoupper($method)}[$key]) != '' ) {
				$_notes['error'][] = $value;
			}
		}
	}
	if( $_POST['foo'] !== $_POST['bar'] ) {
		$_notes['error'][] = 'Die Eingaben der Felder „foo“ und „bar“ müssen identisch sein.';
	}

	if( !empty($_notes['error']) ) {
		echo '<div class="notes error"><ul>';
		foreach( $_notes['error'] as $value ) {
			echo '<li>'.$value.'</li>';
		}
		echo '</ul></div>';
	}

?>
Die könnte jetzt noch weiter ausgearbeitet und verfeinert werden, sodass eigentlich alles nur noch von der Struktur einer Variable ($_requiredArgs) abhängt.
 
Hallo Gumbo,

ich nochmal.

jetzt habe ich mir gestern Abend nochmal was einfallen lasen in Bezug auf:
[Gumbo]
...Du kannst dir jedoch Funktionen oder Algorithmen schreiben, die dir einen Teil automatisieren. ...

Du kannst mir mal scheiben was du davon hältst.
PHP:
<?
//Testfunktion zum Anzeigen des Arrays -> var_dump() hätte es sicher auch getan
function printArray($value,$name)
	{
		print "<table border =\"1\">\n";
		print "<tr><td colspan =\"4\">$name </td></tr>\n";
		while (list ($key, $val) = each ($value)) 
			{
				print "<tr>";
				print "<td>".$key."</td>";
				print "<td>".$val[0]."</td>";
				print "<td>".$val[1]."</td>";
				print "<td>".$val[2]."</td>";
				print "</tr>\n";
			}
	}
	
// Funktion splittet eindimensionale Arrays auf 
function promoteElementsToArrays(&$arr) 
	{
		foreach($arr as $index=>$value)
			{
			if(!is_array($value) )
				{
					$arr[$index] = array($value);
				}
			}
	}

//meine gegebenen Daten aus dem Formular
$muss = array("Mobile", "Phone","Zip");
$input = array( "Mobile" =>"1234", "Phone" =>"5678", "Password1" => "geheim",  "Password2" => "geheim", "Address" =>"sowieso", "Zip"=>"");


//Funktion zur Validierung
function validateForm($input,$muss)
	{
		promoteElementsToArrays($input);
		
		foreach ($input as $key =>$val) 
			{
				if(in_array($key, $muss))
					{
						$input[$key][1] = 1;
					}
				else
					{
						$input[$key][1] = 0;
					}
			}
		
		while(list($key,$val)=each($input))
			{
				switch($key)
					{
						case  "Phone":
								if( empty($input[$key][0]) OR (empty($input[$key][0]) AND $input[$key][1] == 1)  )
									{
										$input[$key][2] = 1;
									}
								else
									{
										$input[$key][2] = 0;
									}
						break;
		
						case  "Mobile":
								if( empty($input[$key][0]) OR (empty($input[$key][0]) AND $input[$key][1] == 1)  )
									{
										$input[$key][2] = 1;
									}
								else
									{
										$input[$key][2] = 0;
									}
						break;				
		
						case  "Password1":
								if( isset($input[$key][0]) AND ($input[$key][0] == $input["Password2"][0]) OR ( isset($input[$key][0]) AND ($input[$key][0] == $input["Password2"][0]) AND $input[$key][1] == 1)  )
									{
										$input[$key][2] = 0;
									}
								else
									{
										$input[$key][2] = 1;
									}
						break;
		
						case  "Adress":
								if( empty($input[$key][0]) OR (empty($input[$key][0]) AND $input[$key][1] == 1)  )
									{
										$input[$key][2] = 0;
									}
								else
									{
										$input[$key][2] = 1;
									}
						break;
						
						case  "Zip":
								if( empty($input[$key][0]) OR (empty($input[$key][0]) AND $input[$key][1] == 1)  )
									{
										$input[$key][2] = 1;
									}
								else
									{
										$input[$key][2] = 0;
									}
						break;
		
					} //switch
			} //while
			return $input;
	} //function 
    

$newinput = validateForm($input,$muss);
printArray($newinput, "input");

?>
 
Zurück