这里我几乎没有关于验证的问题
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";
}
}
答案 0 :(得分:2)
1)过多的if-else语句很好地表明设计不佳。您应该使用验证类或编写自己的验证类。有点偏离主题,但这段代码让我想起了我们在20世纪90年代的日子:)为什么你不至少使用微框架而不是一次又一次地重新发明轮子......
2)您可以检测是否使用ajax进行呼叫:
if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
...
}
所以在控制器中你收集数组中的验证错误,如果是AJAX请求将其转换为JSON并执行ajax验证(检查jquery验证器),如果不是简单地处理错误,就像你没有ajax一样。我必须警告,这显然不会像纯客户端验证一样响应,但是,一遍又一遍地定义所有这些验证规则是无聊的。这就是为什么我们现在使用框架来缓解痛苦......
答案 1 :(得分:1)
试试这个:
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";
}
答案 2 :(得分:0)
当您验证这么多字段时,您将需要JS或jQuery来验证而不是刷新页面,因为这会让用户感到烦恼,因为页面不断重新加载不同的错误。最好的选择是使用jQuery验证。