使用php验证用户输入

时间:2014-04-09 10:17:54

标签: php mysql

我是php和mysql的新手,我试图检查用户是否在文本框中输入了某些内容,并检查输入的内容是否为字符串。我想在发布到数据库之前进行检查。我还希望html表单保留用户最初输入的值。请问我该如何做到这一点。

这是我到目前为止所做的事情。这有效但仍然显示数据已成功输入。

if(isset($_POST['register'])){  
//PHP FIELD VALIDATIONS
if($_POST['fname']==""){
    echo "First name is required <br/>";

}
else{
   $fname= filter_var($_POST['fname'], FILTER_SANITIZE_STRING);
}
if($_POST['lname']==""){
    echo "Last name is required <br/>";
}
else{
    $lname= $_POST['lname'];
}
if($_POST['email']==""){
    echo "Email address is required <br/>";
}
else{
     $email= $_POST['email'];
}
if($_POST['pword']==""){
    echo "Password is required<br/>";
}
else{
      $pword= $_POST['pword'];
}  

$fname=mysql_real_escape_string($fname);
$lname=mysql_real_escape_string($lname);
$email=mysql_real_escape_string($email);
$pword=mysql_real_escape_string($pword);

require_once 'scripts/connect_to_mysql.php';
$sql = "INSERT INTO customer ".
       "(First_name,Last_name, Email, Password, date_added) ".
       "VALUES('$fname','$lname','$email','$pword', NOW())";
       //echo $sql;
mysql_select_db('online_store');
$result = mysql_query( $sql, $conn );
if(! $result )

{
  die('Could not enter data: ' . mysql_error());
}
echo "<span style='color:green;'>Entered data successfully</span>";
mysql_close($conn);
}
?>

3 个答案:

答案 0 :(得分:0)

表单验证

您需要一种机制来验证表单中的字段并回显一些验证错误。你编写php的方式已经过时了,今天php应用程序通常使用类似MVC的模式来分离关注点。阅读MVC和SoC两者。

但是,这里最简单的解决方案是验证类:

class Validator {
    public static function email($postField, $message) {
        if (isset($_POST[$postField]) {
            // Example of full email validation here https://github.com/cakephp/cakephp/blob/master/lib/Cake/Utility/Validation.php#L437
            $regex = '...'; 

            if (!preg_match($regex, $email)) {
                return $message;
            }
        }
    }
    public static function notEmpty($postField, $message) {
         if (isset($_POST[$postField]) && empty($_POST[$postField])) {
             return $message;
         }
    }
    public static function multi($field, $rules = array()) {
        foreach ($rules as $rule => $message) {
            echo Validator::{$rule}($field, $message);
        }
    }
}

echo Validator::email('email', 'Your email address is wrong!');
Validator::multi('email', array('email' => '...', 'notEmpty' => '...'));

这是一个非常基本的示例,但您明白了。这可以扩展和改进很多,以使其自动化更多。

老实说,我现在没心情写一篇完整的文章,因为我猜他们已经有很多文章了,只是尝试在php的上下文中进行服务器端表格验证。

<强>数据库:

您正在使用已弃用的已标记的mysql_ *函数,请勿使用它们,请改用mysqliPDO

每个文档页面上都有一个很大的警告:

  

自PHP 5.5.0起,此扩展程序已弃用,并将在中删除   未来。相反,应该使用MySQLi或PDO_MySQL扩展。   另请参阅MySQL:选择API指南和相关常见问题解答以获取更多信息   信息。

有关如何正确使用和转义SQL查询的信息,请参阅:How can I prevent SQL injection in PHP?

PDO示例。

$stmt = $pdo->prepare('SELECT * FROM employees WHERE name = :name');
$stmt->execute(array('name' => $name));
foreach ($stmt as $row) {
    // do something with $row
}

答案 1 :(得分:0)

首先,最重要的是,您应该从mysql更改为mysqliPDO

其次,为了确保在提交之前输入所有字段,您可以遍历输入,检查每个字段是否为空,并运行您希望的任何输入特定检查。即检查输入是否为字符串,您可以is_string($variable)

如果任何检查失败,请设置一个变量,例如$failedValidation,然后将您的sql执行代码包装在if语句中 - 如果$failedValidation !isset,或者设置为false,但是您想要处理它 - 然后运行代码。

而不是使用$fname=mysql_real_escape_string($fname);使用$fname = htmlspecialchars($fname);

循环遍历$ _POST数组:

$Validated = True; // Validated needs to be set to true, for the SQL code to run

// Loop through all variables stored in the $_POST array
foreach($_POST as $value) 
{
    if(empty($value))  // If any of the $_POST variables are empty, set $Validated to false
    {
       $Validated = False;
    }
}

// If none of the fields were empty, $Validated will have remained true after our loop
if($Validated == True) {
   // Run SQL code
}

希望我以你能理解的方式解释它,我希望它对你有帮助。

答案 2 :(得分:-2)

使用以下代码:

if(isset($_POST['register'])){  
    //PHP FIELD VALIDATIONS
    $validated = true;
    if($_POST['fname']==""){
        echo "First name is required <br/>";
        $validated = false;
    }
    else{
       $fname= filter_var($_POST['fname'], FILTER_SANITIZE_STRING);
    }
    if($_POST['lname']==""){
        echo "Last name is required <br/>";
        $validated = false;
    }
    else{
        $lname= $_POST['lname'];
    }
    if($_POST['email']==""){
        echo "Email address is required <br/>";
        $validated = false;
    }
    else{
         $email= $_POST['email'];
    }
    if($_POST['pword']==""){
        echo "Password is required<br/>";
        $validated = false;
    }
    else{
          $pword= $_POST['pword'];
    }  
    if ($validated) {
        $fname=mysql_real_escape_string($fname);
        $lname=mysql_real_escape_string($lname);
        $email=mysql_real_escape_string($email);
        $pword=mysql_real_escape_string($pword);

        require_once 'scripts/connect_to_mysql.php';
        $sql = "INSERT INTO customer ".
               "(First_name,Last_name, Email, Password, date_added) ".
               "VALUES('$fname','$lname','$email','$pword', NOW())";
               //echo $sql;
        mysql_select_db('online_store');
        $result = mysql_query( $sql, $conn );
        if(! $result )

        {
          die('Could not enter data: ' . mysql_error());
        }
        echo "<span style='color:green;'>Entered data successfully</span>";
        mysql_close($conn);
    }
}
相关问题