2014-03-12 42 views
-1

我有一个标准的HTML表单。但是,人们通过在文本框中输入缩短的URL来找到解决方法。我如何以简单的方式验证它。谢谢。验证文本框

代码:

<form action="register.php" method="POST"> 
Firstname: <br> <input type="text" name="Firstname" value="<?php echo $Firstname; ?>"><br><br> 
Surname: <br> <input type="text" name="Surname" value="<?php echo $Surname; ?>"><br><br> 
Email Address: <br> <input type="text" name="Email" value="<?php echo $Email; ?>"><br><br> 
Username: <br> <input type="text" name="Username" value="<?php echo $Username; ?>"><br><br> 
Password: <br> <input type="password" name="Password"><br><br> 
Password Again: <br> <input type="password" name="password_again"><br><br> 
<input type="submit" value="Register"></form> 
+1

您必须在服务器上进行验证,没有办法阻止用户绕过客户端验证。 – Barmar

回答

0

PHP有一个叫做filter_var http://php.net/filter_var

有很多的验证过滤器的http://www.php.net/manual/en/filter.filters.validate.php

我将运行FILTER_VALIDATE_URL,看看如果用户提交的URL的巨大原生功能,如果是的话,返回一个错误。

编辑;请求示例代码

<? 
function isUrl($var) { 
    return (filter_var($var, FILTER_VALIDATE_URL)) ? true : false; 
} 

if($_POST) { 
    $error = false; 
    $err_msg = ''; 

    //get variables safely 
    $Firstname = isset($_POST['Firstname']) ? $_POST['Firstname'] : ''; 
    $Surname = isset($_POST['Surname']) ? $_POST['Surname'] : ''; 
    $Email = isset($_POST['Email']) ? $_POST['Email'] : ''; 
    $Username = isset($_POST['Username']) ? $_POST['Username'] : ''; 
    $Password = isset($_POST['Password']) ? $_POST['Password'] : ''; 
    $Password_again = isset($_POST['Password_again']) ? $_POST['Password_again'] : ''; 

    //null checks 
    if($Firstname == '' || $Surname == '' || $Email == '' || $Username == '' || $Password == '' || $Password_agin == '') { 
     $error = true; 
     $err_msg = 'Missing required values'; 
    } 

    //password match 
    if($Password != $Password_again) { 
     $error = true; 
     $err_msg = 'Passwords do not match';   
    } 

    //email validity 
    if(filter_var($Email, FILTER_VALIDATE_EMAIL) == false) { 
     $error = true; 
     $err_msg = 'Invalid email'; 
    } 

    //url checks 
    if(isUrl($Firstname) || isUrl($Surname) || isUrl($Username)) { 
     $error = true; 
     $err_msg = 'Urls are not allowed';  
    } 

    //final step 
    if(!$error) { 
     //save info to db 
    } else { 
     die($err_msg); 
    } 

} else { 
    die('nothing sent'); 
} 
?> 

这里假设一些东西。您将需要自己处理在“死亡”环境中要做的事情。 希望有所帮助!

+0

ok,更新后的示例 – xero

0

如果渣土启动系统最好的办法是在register.php做验证在服务器端。您可以添加JavaScript,但有人可以简单地关闭它,或者以其他方式避免,并且您也会遇到同样的问题。如果服务器端验证对系统有影响,则需要进行验证。

+0

有没有办法只是不允许某些字符如< – user3393477

+0

有办法在客户端做到这一点,但也有方法在客户端,所以你必须在服务器上清理和/或拒绝它们,在POST之后,并在将它们插入到您的数据库之前 –

0

最好的办法是让Javascript验证和服务器端验证。
Javascript验证是即时的,并且可以帮助验证表单而不会重复调用您的服务器,但是马特说它可以被关闭或混淆。
服务器端验证是更安全的验证,但其资源较重,如果必须重复调用,则验证速度较慢。
这就是为什么它有好处 - 验证客户端和通过验证服务器端。
关于简单javascript验证的示例教程:http://www.elated.com/articles/form-validation-with-javascript/