2013-04-16 170 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