user2284433
user2284433

Reputation:

PHP Validation Function Returning Values?

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

Answers (4)

rockerest
rockerest

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

miah
miah

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

AlexP
AlexP

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

Lawson
Lawson

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

Related Questions