Reputation:
I'm trying to create small functions to validate each of my form elements. But I'm having some difficulties. I'm fairly new to PHP functions in general.
Currently I'm trying to create a validation function for the 'surname' entry in a form. This is what I have:
//Call surname validation function
If (validSurname($surname) === false) {
$mistakes[] = 'Your surname is either empty or Enter only ALPHABET characters.';
}
function validSurname($surname) {
$surname = trim($surname);
if (empty($surname) || (!ctype_alpha(str_replace(' ', '', $surname)))) {
$isValid = false;
} else {
//accept surname entry and sanitize it
$surname = mysql_real_escape_string(stripslashes($surname));
}
return $isValid;
}
So currently I use something similar for validating emails, and it works correctly. But now I want to actually pass the surname through certain stages such as:
$surname = trim($surname);
For this new value to be accessed outside of the function and then entered into the database, do I need to return it at the end of the function? e.g. Something like return $surname; at the end of the function?
Put simply - how do I use this new value of $surname (rather than the initial one entered in the form) outside of the function?
Upvotes: 0
Views: 990
Reputation: 10508
You be more explicit with your function names and return the new value.
For example:
function isSurnameValid($surname) {
return (empty($surname) || (!ctype_alpha(str_replace(' ', '', $surname)))) ? false : true;
}
function cleanSurname($surname) {
$surname = mysql_real_escape_string(stripslashes(trim($surname)));
return $surname;
}
This way you have clear, descriptive function names and every function has a single responsibility.
Upvotes: 0
Reputation: 10433
You either have to use a global variable, or pass $surname by reference if you want to do it the way you first wrote it.
Alternatively, you could pass back the modified string, or no string at all if it failed.
$surname = validSurname($surname);
if (strlen($surname) == 0) {
$mistakes[] = 'Your surname is either empty or Enter only ALPHABET characters.';
}
function validSurname($surname) {
$surname = trim($surname);
if (empty($surname) || (!ctype_alpha(str_replace(' ', '', $surname)))) {
$surname = '';
} else {
//accept surname entry and sanitize it
$surname = mysql_real_escape_string(stripslashes($surname));
}
return $surname;
}
Upvotes: 0
Reputation: 9857
You should consider what you function is trying to do. In my mind you would probably need two functions isValidSurname
which would return a boolean either true or false and formatSurname
would take the valid surname and return it correctly formatted.
Upvotes: 1
Reputation: 634
You should set it to global within the function. I wouldn't use the same variable name as what you're using as a parameter to your function though. If you want to mess with $surnameVar, do this:
function validSurname($surname) {
global $surnameVar;
$surnameVar = trim($surname);
if (empty($surname) || (!ctype_alpha(str_replace(' ', '', $surname)))) {
$isValid = false;
} else {
//accept surname entry and sanitize it
$surname = mysql_real_escape_string(stripslashes($surname));
}
return $isValid;
}
Upvotes: 0