2015-06-24 55 views
0

我已經使用了html,css,javascript和jQuery驗證,我想我已經準備好在php中加載變量了。我的網頁上有大約300件(20文本(區)S,40收音機和250的複選框只需要那幾個php驗證初學者

我發現這個代碼的PHP驗證,並有3個新手問題:

<?php 
// define variables and set to empty values 
$name = $email = $gender = $comment = $website = ""; 

if ($_SERVER["REQUEST_METHOD"] == "POST") { 
    $name = test_input($_POST["name"]); 
    $email = test_input($_POST["email"]); 
    $website = test_input($_POST["website"]); 
    $comment = test_input($_POST["comment"]); 
    $gender = test_input($_POST["gender"]); 
} 

function test_input($data) { 
    $data = trim($data); 
    $data = stripslashes($data); 
    $data = htmlspecialchars($data); 
    return $data; 
} 
?> 

1 - 我有沒有漏掉什麼重要步驟?

2-只做文字(區)的需要這種服務器驗證或做我需要爲無線電和複選框做到這一點?

3-可以清零元素經過這個清理過程,還是必須測試和刪除第一個lude爲null元素?

感謝,丹

回答

0

我已經基於一些假設來解答您的疑問和問題的一些變化。我假設需要「名稱」字段,因此我們將檢查它是否已設置。另外我假設你將這些數據存儲到數據庫中。如果是這樣,我已經包含了一些MYSQL來幫助清理存儲到MYSQL數據庫中。

<?php 
// define variables and set to empty values 
$name = $email = $gender = $comment = $website = ""; 

if (isset($_POST["name"])) { 
    $name = test_input($_POST["name"]); 
    $email = test_input($_POST["email"]); 
    $website = test_input($_POST["website"]); 
    $comment = test_input($_POST["comment"]); 
    $gender = test_input($_POST["gender"]); 
} 
else 
{ 
    // tell the user they missed something. 
} 

function test_input($data) { 
    $data = trim($data); 
    $data = stripslashes($data); 
    $data = htmlspecialchars($data); 
    $data = mysql_real_escape_string($data); 
    return $data; 
} 
?> 

爲了解決您的其他問題,無不需要然而驗證像複選框和單選按鈕字段,要注意的是,用戶可以發表自己的價值觀到窗體關閉JavaScript,從而繞過你的JavaScript檢查表單驗證。因此,在存儲到數據庫之前,應該先清理您認爲用戶可能爲選擇菜單提供信息的任何內容。您不需要檢查NULL值。

+0

你確實需要驗證來自用戶的任何東西 - 複選框,收音機等。 –

+0

謝謝你的代碼!所以一個未經檢查的複選框A(我不知道它是空的還是空的)可以通過「清理」併產生一個空的/空的$ A變量而不會拋出錯誤?謝謝 – tiredeyes

+0

是的,你不必擔心產生錯誤的NULL值變量;正如達倫的回答所述,你應該檢查所有的用戶輸入,包括複選框。我忽略了這一點,因爲當我編寫這樣的代碼時,我實際上並沒有使用它們的輸入。我只檢查他們是否檢查了框(布爾值)。 –

1

我首先要說明的是:您永遠不能相信任何用戶輸入。 永遠不要相信任何用戶輸入。你應該爲每個用戶訪問你的形式與惡意這樣的觀點進行編程。(即他們要砍你的網站

沒錯,你要走了重要步驟。你不能阻止SQL Injection。 (如果您將詳細信息保存到數據庫)。如果要將它保存到數據庫中,最好使用旨在通過正確使用來保護您的庫,如PDOMySQLi Prepared Statements。它實際上是相當簡單的事情:

try { 
    $dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass); 
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

    $statement = $link->prepare("INSERT INTO testtable(`name`, `lastname`, `age`) 
    VALUES(:fname, :sname, :age)"); 
    $statement->execute(array(
    "fname" => "Bob", 
    "sname" => "Desaunois", 
    "age" => "18" 
)); 
} catch (PDOException $e) { 
    print "Error!: " . $e->getMessage() . "<br/>"; 
    die(); 
} 

Source

是的,你應該確保所有,我的意思是所有用戶輸入進行驗證。

Inspect element

正如你可以在上面的圖片中看到,它不是很難在所有更改複選框值你想要什麼。

爲什麼要爲null元素做?你的意思是空的元素?清理任何和所有的用戶輸入總是很好,但如果它理論上是null你不會使用它,對吧?

+0

幾乎所有的複選框都會被使用,無論它們是選中還是未選中。最終將使用一組複選框A-F來形成一個像這樣的句子;他們有A,C,E和F,但不是B或D.我還沒有想出我想要在Web服務器,辦公服務器還是我的桌面客戶端上進行級聯。這有什麼區別嗎? – tiredeyes

+0

根本沒有任何區別,您只需將這些輸入中的每一個存儲在某個地方供以後參考! – Darren

+0

謝謝你的代碼! – tiredeyes