Scripts

Inputfield checker

Soms zie ik wel eens beginners een contact formulier maken met als veld controle dat ze voor elke veld een if/else if maken om deze te controleren. Hierdoor krijg je een bult code die ook makkelijk anders kan. Met deze snippet kun je makkelijk met een foreach loopje een mooie foutmelding genereren en alle velden die niet correct zijn ingevuld (returned een array).

inputfield-checker
[code]
<?php
function inputCheck($values, $names)
	{
		$errs = array();

		foreach($values as $key => $value)
		{
			switch($value)
			{
				case 'value':
				
					if(empty($_POST[$key]))
					{
						$errs[] = $names[$key];
					}
					
					break;
					
				case 'email':
					if(empty($_POST[$key]))
					{
						$errs[] = $names[$key];
					}
					else
					{	
						if (ereg('^[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+'.'@'.'[-!#$%&\'*+\\/0-9=?A-Z^_`a-z{|}~]+\.'.'[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+$', $_POST[$key])) 
						{ 
								if ($check_domain && function_exists('checkdnsrr')) 
								{
									list (, $domain)  = explode('@', $_POST[$key]); 
									
										if (checkdnsrr($domain, 'MX') || checkdnsrr($domain, 'A')) 
										{ 
											return true; 
										}
										else
										{
											$errs[] = $names[$key];
										}
								}
						}
						else
						{
							$errs[] = $names[$key];
						}
					}
					
					break;
				case 'numeric':
					if(!ctype_digit($_POST[$key]))
					{
						$errs[] = $names[$key];
					}
					break;
					
				case 'equal':
					
					$singleKey = explode(',', $key);
					if(empty($_POST[$singleKey[0]]))
					{
						$errs[] = $names[$singleKey[0]];
					}
					elseif(empty($_POST[$singleKey[1]]))
					{
						$errs[] = $names[$singleKey[1]];
					}
					else
					{
						if($_POST[$singleKey[0]] != $_POST[$singleKey[1]])
						{
							$errs[] = $names[$singleKey[0]].'&nbsp;&&nbsp;'.$names[$singleKey[1]].'&nbsp; komen niet overeen';
						}
					}
					
					break;
					
				default:
					if(empty($_POST[$key]))
					{
						$errs[] = $names[$key];
					}
			}
		}
		
		return $errs;
	}
?>
[/code]

Daarnaast heb ik even een voorbeeld gemaakt hoe je de functie benaderd en hoe je de fouten laat zien.

[code]
<?php
	
//In deze array geef je de naam op van de input veld (de key) en waarop hij moet controleren (de value). Momenteel controleerd hij op een valid email adres (email), numerieke waardes (numeric) en of het veld wel ingevuld is (value) 
	if($_SERVER['REQUEST_METHOD'] == 'POST')
		{
			$requiredFields = array('txtLoginUsername' => 'value','txtLoginPassword,txtLoginPasswordRepeat' => 'equal','txtLoginEmailAdress' => 'email');
			$fieldNames = array('txtLoginUsername' => 'Login naam','txtLoginPassword' => 'login wachtwoord','txtLoginEmailAdress' => 'Login e-mail adres');
			
				$checkFields = $this->checkinput->inputCheck($requiredFields, $fieldNames);
		
					if(count($checkFields) < 1)
					{
						
						
					}
					else
					{
						$this->data['msg'] = '<div class="errormsg">
												U heeft volgende velden niet goed ingevuld.
												<ul>';
													foreach ($checkFields as $field)
													{
														$this->data['msg'] .= '<li>'.$field.'</li>';
													}
						$this->data['msg'] .= 	'</ul>
												</div>'; 
					}
		}

?>
[/code]

Reacties

0
Nog geen reacties.