2013-05-09 75 views
3

在這個腳本中,我正在檢查字段是否爲空,並且電子郵件地址在語法上是正確的。如何在我的表單底部添加文本輸入以獲得基本總和問題,例如(2+5)=我想驗證元素添加到我目前的腳本來檢查,如果這等於7基本表單驗證檢查號碼?

if (empty($name) || empty($phone) || empty($email) || empty($enquiry)) 
{ 
    echo " * Sorry all fields are required."; 
} 
elseif(!preg_match("/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/", $email)) 
{ 
    print "<p>Sorry the email address you entered looks like it's invalid.</p>"; 
} 
else 
{ 
    mail($to, $sub, $mes, $headers); 
    print "<p>Thank you ".$name." for contacting us.<br /><br />We will be in touch shortly.</p>"; 
} 
+2

你試圖添加兩個數字的總和。 – 2013-05-09 11:37:25

+1

你可以使用random()創建基本的數學運算例如rand()* 100%10 + rand()* 100%10並將其保存在會話中。然後你可以回顯這個equatation,並在驗證中檢查結果與sesion。你有沒有考慮過recaptcha? – Robert 2013-05-09 11:38:04

+1

then ..'elseif($ num!= $ _ SESSION ['rand1'] + $ _ SESSION ['$ rand2']){print'提供的數字是錯誤的; }' – Waygood 2013-05-09 11:38:53

回答

1

如果你只是想驗證一個靜態的總和,例如你知道它總是會是(2 + 5)= 7

然後你可以寫一個簡單的函數來檢查發佈的值。

// this being your posted value; 
$validate = 7; 

function SumCheck($value){ 

    if (2 + 5 == $value){ 
     return true; 
    } 
    else{ 
     return false; 
    } 

} 

然後改變你的第一行;

if (empty($name) || empty($phone) || empty($email) || empty($enquiry) || !SumCheck($validate)) 

然而,隨着羅伯特Podwika曾建議我建議使用驗證碼。

+0

這是如此不安全......即使在進行這種驗證也沒有意義。這個解決方案沒有隨機性。 – Robert 2013-05-09 12:10:35

+0

簡單驗證對原始機器人。不確定機器人有多複雜。 – 2013-05-09 12:14:43

+0

但是,我同意並應該使用ReCaptcha。 – 2013-05-09 12:16:04

1

1如果在第一行

session_start(); 

2會話未啓動使用形式爲前所示。添加此代碼。還要記住,會話啓動必須也在驗證文件中。

$numa = rand(1,5); 
$numb = rand(0,4); 
$_SESSION['valid_res'] = $numa+$numb; 

    echo "<p>To submit form please solve this equatation $numa + $numb = ?"; 
    echo '<input type="text name="result_val" />'; 

3在驗證功能,你應該檢查

if(intval($_POST['resul_val']) != $_SESSION['valid_res']) 
    { 
    echo "sorry you put wrong result in validation form"; 
    } 

不過,如果我是你,我會使用RECAPTCHA

+0

我認爲這是另一場辯論,但這樣的問題/答案驗證比驗證碼更安全,假設它們足夠多樣並且基於強大的隨機性。 – ibi0tux 2013-05-09 11:53:55

+0

這不是隨機性,它總是僞隨機性。對我來說最好的解決方案就是把這樣的等值線放在很難被計算機軟件讀取的圖像上。 – Robert 2013-05-09 11:56:16

+0

我同意。使用圖像往往會增加倒退難度。圖像方程是一個很好的組成部分。另一種選擇是包含「輸入這個句子的第四個單詞」這樣的文本的圖像。 關於隨機性,這是真的,沒有真正的隨機性,但有些實現比其他實現更好。 – ibi0tux 2013-05-09 11:58:17