2013-04-16 130 views
-6


我今天已经问过一个问题了,我收到了一个好的脚本。 我的意思是?
我尝试制作一个“逻辑”验证码。对真的。不要问问题,我会以某种方式写出来。但我有一个包含这些行的表的数据库:id,问题,答案。现在,代码来了。它显示了问题,但是当我输入答案时,它什么都不做。它应该根据答案重定向到页面success.php或error.php。
验证码数据库验证确认不能正常工作

<?php 

$database_db="general"; 
$user_db="root"; 
$password_db="somepass"; 
$host_db="localhost"; 

$link = mysqli_connect($host_db, $user_db, $password_db, $database_db); 

/* check connection */ 
if (mysqli_connect_errno()) 
{ 
    die ("couldnot connect: ".mysqli_connect_error()); 
    exit(); 
} 
if (array_key_exists("answer", $_POST) AND array_key_exists("id", $_POST)) 
{ 
    $id = intval($_POST['id']); 
    $sql="SELECT question, answer FROM captcha WHERE question='$id' AND    answer='".mysqli_real_escape_string($link, $answer)."'"; 
    $result = mysqli_query($link, $sql) or exit('$sql failed: '.mysqli_error($link)); 
    $num_rows = mysqli_num_rows($result); 
    if($num_rows > 0) 
    { 
     header("Location: success.php"); 
    } 
    else 
    { 
     header("Location: error.php"); 
    } 
    exit; 
} 
else 
{ 
    $query = "SELECT id, question FROM `captcha` ORDER BY RAND() LIMIT 1"; 
    if ($result = mysqli_query($link, $query)) 
    { 
     if ($row = mysqli_fetch_assoc($result)) 
     { 
      $id = $row["id"]; 
      $question = $row["question"]; 
     } 
    } 
} 

?> 
<html> 
<body> 
    <form method="post"> 
     <?php echo $question; ?><br /> 
     <input type="hidden" name="question" id="question" value="<?php echo $id; ?>" /> 
     <input type="text" name="answer" id="answer" /><br /> 
     <input type="submit" name="submit" value="submit" /><br /> 
     </form> 
    </body> 
</html> 



问题出在哪里?我知道这是第二个“if”声明中的某处,但不知道在哪里。请帮忙。

+3

堆栈溢出不是免费的调试服务。你没有*问过问题*,你刚刚发布了一段代码,并告诉我们这是行不通的。 – meagar

+0

_你是否知道“如果'声明'在第二个地方?出于某种原因,您是否隐瞒有用的调试信息? – David

+0

我知道这一点,因为据我了解的代码,答案验证是在代码的那部分。 – MLL

回答

1

问题是与

if (array_key_exists("answer", $_POST) AND array_key_exists("id", $_POST)) 
{ 
    $id = intval($_POST['id']); 

为什么?那么在形式你使用另一种“ID”为输入:

<input type="hidden" name="question" id="question" value="<?php echo $id; ?>" /> 因此,无论您输入更改为:

<input type="hidden" name="question" id="id" value="<?php echo $id; ?>" />

或更改你的PHP代码中的一些变量:

if (array_key_exists("answer", $_POST) AND array_key_exists("question", $_POST)) 
{ 
    $id = intval($_POST['question']); 

建议:选择正确的变量名称并坚持到处:在您的HTML代码中,在您的PHP代码和数据库中!

+1

非常感谢:)我希望有人会发现这个帖子谁不问,但回答:)谢谢! – MLL

+0

它不工作:(它会将我重定向到每次输入任何内容时的error.php。 apache error.log说: PHP注意:未定义变量:/var/www/minden/captcha/index.php中的答案 – MLL

+0

@MLL将此'mysqli_real_escape_string($ link,$ answer)'改为'mysqli_real_escape_string($ link,$ _POST ['answer'])' – HamZa