2012-12-27 97 views
0

我想在注册页面上添加一个简单的验证码,但是我无法验证我的表单上的验证码部分 如果我在表单上留下用户名部分并按寄存器它会给我一个消息,请输入用户名等等,但是当涉及到验证码部分,如果我把它留空白它会给一个消息输入验证码,但如果我输入验证码信,但不是正确的一个它注册,所以我想尝试下面结合如何验证我的注册页面上的验证码

if ($real == $guess) { 
    die ("enter captcha"); 
} 

此代码,这个代码

if ($real != $guess) { 
    die ("Not equal"); 
} 

这是我的注册页面代码

//Collecting info 
$username = $_REQUEST['username']; 
$password = $_REQUEST['password']; 
$pass_conf = $_REQUEST['password_conf']; 
$email = $_REQUEST['email']; 
$date = $_REQUEST['date']; 
$guess = $_POST['captcha']; 

$real = (isset($_SESSION['real'])) ? $_SESSION['real'] : ""; 

//Here we will check do we have all inputs filled 

if (empty($username)) { 
    die("Please enter your username!<br>"); 
} 

if (empty($password)) { 
    die("Please enter your password!<br>"); 
} 

if (empty($pass_conf)) { 
    die("Please confirm your password!<br>"); 
} 

if (empty($email)) { 
    die("Please enter your email!"); 
} 
if ($real == $guess) { 
    die ("enter captcha"); 
} 

//Let's check if this username is already in use 

$user_check = mysql_query("SELECT username FROM users WHERE username='$username'"); 
$do_user_check = mysql_num_rows($user_check); 

//Now if email is already in use 

$email_check = mysql_query("SELECT email FROM users WHERE email='$email'"); 
$do_email_check = mysql_num_rows($email_check); 

//Now display errors 

if ($do_user_check > 0) { 
    die("Username is already in use!<br>"); 
} 

if ($do_email_check > 0) { 
    die("Email is already in use!"); 
} 

//Now let's check does passwords match 

if($password != $pass_conf) { 
    die("Passwords don't match!"); 
} 

//If everything is okay let's register this user 

$insert = mysql_query("INSERT INTO users (username, password, email) VALUES ('$username', '$password', '$email')"); 
if (!$insert) { 
    die("There's little problem: ".mysql_error()); 
} 

echo $username.", you are now registered. Thank you!<br><a href=login.php>Login</a> | <a href=index.php>Index</a>"; 

} 
$act = isset($_GET['act']) ? $_GET['act'] : ''; 
switch($act) { 
    default; 
    register_form(); 
    break; 

    case "register"; 
    register(); 
    break; 
} 

回答

1

什么是这样的:

if (empty($guess) || $guess !== $real) 
{ 
    die("Please enter the correct CAPTCHA.<br>"); 
} 

// the CAPTCHA entered was correct 
... 
+0

机器人正在做同样的事情,当我输入正确的数据时它仍然给我,请输入正确的验证码 – theuserkaps

+0

尝试打印'$ guess'和'$ real',看看它们是否是你期望的。 – Supericy

+0

怎么样?我不明白你说的 – theuserkaps

1

代码:

if ($real == $guess) { 
    die ("enter captcha"); 
} 

说: “输入验证码” 只有当真正等于猜测。因此,这与你真正想要的是相反的,因此也是问题的原因。

您需要将其更改为:

if ($real != $guess) { 
    die ("enter captcha"); 
} 

这将打印“输入验证码”这句如果真正是等于猜测。

+0

其中我一直在做但它仍然给erros – theuserkaps

+0

顺便说一句,因为我没有在您的示例代码中看到它:您是否使用session_start(),因为$ real是在帮助会话变量的? – Thomas