Re: Sanity check on form validation code

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Just one thing really:

Your regex is only matching for ansi letters, so any letter with an
accent on won't be matched (poor Amélie!)

A better regex might be something like this:

if (!preg_match("/^[\p{L}][\p{L} '-]+$/u",$name))

There is more information on what the \p does at
http://php.net/manual/en/regexp.reference.unicode.php

I also added the apostrophe there too, as names like O'Leary are quite
common, and I assumed this was validation being used for persons names?


Thanks,
Ash
http://www.ashleysheridan.co.uk


On Mon, 2014-03-17 at 10:31 +0545, cipher wrote:
> Hi,
> 
> This looks good for validation, except for something that i want to mention!
> 
> The first thing is not a 'problem' : but
> 
> $errorCount = 0;
> 
> would have been great! (Instead of initializing it as if it was string)
> 
> On your `test_input` function:
> 
> The combination of `stripslashes` and `htmlspecialchars` (called in this 
> way) may increase your vulnerability on SQL injection (if you are using 
> this form to do tasks on the database).
> 
> Although the `filter_var` does some work, it is advisable to use 
> parameterized queries if you are planning to do some works on the database!
> 
> --
> cipher
> fb/twitter/github: nootanghimire
> 
> 
> On सोमबार 17 मार्च 2014 08:53 पूर्वाह्न, David Mehler wrote:
> > Hello,
> >
> > I've got a form with various fields. One is a text input field called
> > name with a size and a maxlength of 30. I've got the following
> > validation code for this field. I'd appreciate feedback on it before I
> > do the others.
> >
> > Thanks.
> > Dave.
> >
> > $contact_page_errors = array();
> > $errorCount = "";
> > $name = "";
> >
> > function test_input($data)
> > {
> >    $data = trim($data);
> >    $data = stripslashes($data);
> >    $data = htmlspecialchars($data);
> >    return $data;
> >   }
> >
> > // Validate the name field
> >    if (empty($_POST["name"]))
> >      {
> > $contact_page_errors['name'] = "Name is Required";
> > $errorCount++;
> > }
> >    else
> >      { // trims, strips slashes, and runs through htmlspecialchars
> > $name = test_input($_POST["name"]);
> > // Field should be at least two characters maximum of 30 and non-numeric
> > if (!strlen($name <= 2)) {
> >        $contact_page_errors['name'] = "Name must have at least two characters\n";
> > $errorCount++;
> > }
> > if (strlen($name > 30)) {
> >        $contact_page_errors['name'] = "Name can not have more than 30
> > characters\n";
> > $errorCount++;
> > }
> > if (is_numeric($name)) {
> >        $contact_page_errors['name'] = "Name can not be numeric\n";
> > $errorCount++;
> > }
> > }
> >      // check if name only contains letters and whitespace
> >   if (!preg_match("/^[A-Z][a-zA-Z -]+$/",$name))
> >    {
> >        $contact_page_errors['name'] = "Name must be from letters,
> > dashes, spaces, first letter uppercase, and must not start
> >
> > with dash.\n";
> > $errorCount++;
> >    }
> > // Use php's filter_var to sanitize what's left
> > $name = filter_var($name, FILTER_SANITIZE_STRING);
> > } // end of name checks
> 

-- 




-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php





[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux