php中的注册表单验证
Posted
技术标签:
【中文标题】php中的注册表单验证【英文标题】:Registration form Validation in php 【发布时间】:2016-01-22 21:26:33 【问题描述】:这里我有几个关于验证的问题
-
下面的代码运行良好,但可以使用这么多
elseif
吗?
我还将使用客户端验证,因此我可以在同一页面上同时拥有服务器端验证和客户端验证代码。
if( $firstname == "" )
$er='Enter your First name';
elseif( $lastname == "" )
$er='Enter your Last name';
elseif( $firstname == $lastname )
$er='First name and last name cannot be same';
elseif( $username == "" )
$er='Enter your username';
elseif( $password == "" )
$er='Enter your password';
elseif( strlen($password) < 6 )
$er='Password must be more than 6 characters';
elseif( $password != $password2 )
$er='Password and confirm password does not match!';
elseif( $email != "" && !preg_match( "/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/", $_POST["email"] ) )
$er='Enter valid email';
elseif($q->rowCount() > 0) // $q is statement used to select username from db
$er='The username '.$username.' is already taken!';
elseif($s->rowCount() > 0) // $s is statement used to select email from db
$er='The email '.$email.' is already registered, choose another!';
else
// some pdo statement to insert data
if ($stmt->rowCount() == 1)
header("Location:userarea.php");
else
echo "error";
【问题讨论】:
1.是的,这很好,只要它可读(这是)。 2. 如果您愿意,客户端代码将在浏览器中运行,使用另一种语言 (js),因此不会发生冲突。如果你把它分成一个 js 文件,你可能会发现你有更好的组织 您应该分别测试每个字段并在数组中收集错误消息以一次全部输出。但是,如果您也使用 javascript 进行验证,则可以忽略此步骤,专注于项目中其他重要的事情,只要后端是安全的,就是这样。 【参考方案1】:1) 太多的 if-else 语句是糟糕设计的良好表现。您应该使用验证类或编写自己的验证类。有点跑题了,但这段代码让我想起了我们在 1990 年代的日子 :) 你为什么不至少使用一个微框架而不是一次又一次地重新发明***......
2) 可以检测调用是否使用ajax:
if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest')
...
因此,在控制器中,您在数组中收集验证错误,如果它是 AJAX 请求,则将其转换为 JSON 并进行 ajax 验证(检查 jquery 验证器),如果不是像不使用 ajax 那样简单地处理错误。我必须警告,这显然不会像纯客户端验证那样响应迅速,但是,是的,一遍又一遍地定义所有这些验证规则很无聊。这就是为什么我们现在使用框架来减轻痛苦......
【讨论】:
【参考方案2】:试试这个:
if (empty($_POST["fname"]))
$nameErr = "Your First Name Is Missing";
else
$name = $_POST['name'];
if (!preg_match("/^[a-zA-Z a-zA-Z]*$/", $name))
$nameErr = "Your Name Is Missing";
if (empty($_POST["age"]))
$ageErr = "Your Age Is Missing";
else
$age = $_POST['age'];
if (!preg_match("/^[0-9]*$/", $age))
$nameErr = "Your Age Is Missing";
【讨论】:
我认为你的意思是$_POST['fname']
不是 $_POST['name']
和 $ageErr
不是 $nameErr
。【参考方案3】:
当您验证如此多的字段时,您将需要 JS 或 jQuery 来验证而不是刷新页面,因为这可能会让用户感到恼火,因为页面不断重新加载并出现不同的错误。最好的选择是使用 jQuery 验证。
【讨论】:
请同时发布您的 html 以提供进一步帮助。以上是关于php中的注册表单验证的主要内容,如果未能解决你的问题,请参考以下文章