2013-05-09 74 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