2014-03-12 283 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/