开发者

the best approach to giving an error message when validating

开发者 https://www.devze.com 2023-03-30 17:21 出处:网络
I am a new programmer and am attempting to do some validation for a basic registration form. I have built a basic registration form that sends the user back to the same page when submitted. I have als

I am a new programmer and am attempting to do some validation for a basic registration form. I have built a basic registration form that sends the user back to the same page when submitted. I have also created a user class and have created some basic validation functions. However, the functions have the error messages built into them. I obviously put the functions on the top of the registration form so when there is an error the errors are posted on the registration form. However, I have no control on how the error messages look and would like to know if there is a lot better way to somehow echo the error messages from outside the class so I can use some type of css or something else for better control of how they look. I hope that makes sense. Also when there is an error the user is sent back to an empty registration form. I was trying to figure out how to keep the valid information in the text boxes and just make them redo the invalid information. Here is a basic example of a validation I have done. I know its basic but I am very new to programming

function validate_password($password)
{   
    $valid = TRUE;
    if ($password == '')
    {
        echo "<p> Please enter a value for the password </p>";
            $valid = FALSE;
    }
    elseif($_POST['pwd'] !== $_POST['pwd2'])
        {
            echo "The passwords do开发者_开发百科 not match please try again";
            $valid = FALSE;
        }
return $valid;
}


Don't echo them right away, instead store them for later use. You mentioned this is inside a class, so you can use a class property to hold error messages.

class YourClass { public $error;

function validate_password($password)
{   
    $valid = TRUE;
    if ($password == '')
    {
        // Set the error message
        $this->error = "Please enter a value for the password";
            $valid = FALSE;
    }
    // etc...
}

}

Later, when you need to, you can output it in the HTML:

if (!empty($yourclass->error)) {
  echo "<p class='errmsg'>{$yourclass->error}</p>\n";
}

You then just need a CSS class errmsg and you can style it how you like:

.errmsg {
   color: #FF0000;
   font-size: 36px;
}

Now if you have that working, you can expand it further to make the $error class property into an array and push multiple messages onto it:

// In the class, initialize it as an array
$this->error = array();


// Use the [] notation to append messages to the array.
$this->error[] = "Another error message..."
$this->error[] = "And yet another error message..."

In your presentation code, use a loop to output the messages:

// Output a big stack of error messages...
foreach ($yourclass->error as $err) {
      echo "<p class='errmsg'>$err</p>\n";
}


What I normally do with classes and their errors is have a variable specifically for the errors. So something like:

class User
{
    private $_ValidationErrors = array();

    function validate_password($password)
    {   
        $this->_ValidationErrors = array();
        $valid = TRUE;
        if ($password == '')
        {
            $this->_ValidationErrors[] = "Please enter a value for the password";
                $valid = FALSE;
        }
        elseif($_POST['pwd'] !== $_POST['pwd2'])
        {
            $this->_ValidationErrors[] = "The passwords do not match please try again";
            $valid = FALSE;
        }
        return $valid;
    }

    function ValidationErrors ()
    {
        if (count($this->_ValidationErrors) == 0)
            return FALSE;
        return $this->_ValidationErrors;
    }
}

Then to use:

$user = new User();
if (!$user->validate_password('somepass'))
    echo implode('<BR>',$user->ValidationErrors ());

EDIT: To display errors by the user something like:

<?php
if (isset($_POST["submit"]))
{
    $user = new User();
    $passwordErrors = (!$user->validate_password($_POST["pass1"]))?$user->ValidationErrors():array();
}
?>
<form action="<?php echo $_SERVER["php_self"]; ?>" method="post">
    <input type="text" name="pass1" value="<?php echo htmlspecialchars($_POST["pass1"]); ?>" /><BR/>
    <?php
        echo ((isset($passwordErrors) && count($passwordErrors) == 0)?"":implode("<BR/>", $passwordErrors));
    ?>
    <input type="submit" name="submit" value="Register" />
</form>
0

精彩评论

暂无评论...
验证码 换一张
取 消