2014-11-03 47 views
-2

我有一個數據庫'School'。它只有一個表格 - 'Words'。其中有word_id,word_name,word_description。我想拉一個隨機的描述並將其顯示在頁面上。然後,我想輸入一個單詞並查看該單詞是否與隨機單詞具有相同的描述。我究竟做錯了什麼?這裏的代碼 -之後在select語句中使用MySQL隨機行

<!DOCTYPE html> 

<html> 
    <head> 
     <meta charset="UTF-8"> 
     <title>Изпит</title> 
    </head> 
    <body> 
     <?php 
     $connection = mysqli_connect('localhost', 'root', '', 'school'); 
     if(!$connection){ 
      echo 'NOT OK'; 
      exit; 
     } 

     if(isset($_POST['submit_description'])){ 
      $q = mysqli_query($connection, ' SELECT word_description 
FROM words ORDER BY rand() LIMIT 1 
'); 
     $row=mysqli_fetch_assoc($q); 
       if($row){ 
        $_POST['word_description'] = $row['word_description']; 
        echo $_POST['word_description']; 
       } 

     } 

      if(isset($_POST['submit_word'])){ 
      $word_name = $_POST['word_name']; 
      $q2="SELECT * FROM words WHERE word_name='$word_name' and word_description='".$_POST['word_decsription']."'"; 
      $result=mysqli_query($connection, $q2); 
      $count=mysqli_num_rows($result); 

      if($count==1){ 
       echo 'Позна ве.'; 
      }else{ 
       echo 'Не позна ве.'; 
      } 

     } 
     ?> 
     <br><br><br> 
     <form method="POST"> 
      <input type="submit" name="submit_description" value="Искай описание.">   
      <input type="hidden" name="word_description" value="<?php echo $_POST['word_description']?>"> 
     </form> 

     <form method="POST"> 
      <input type="text" name="word_name"> 
      <input type="submit" name="submit_word" value="Провери дума."> 
     </form> 

    </body> 
</html> 
+1

在打開'<?php'標記後立即向文件頂部添加錯誤報告 'error_reporting(E_ALL); ini_set('display_errors',1);'看看它是否產生任何東西。還有'或者死(mysqli_error($連接))'到'mysqli_query()'。 – 2014-11-03 19:20:20

+2

'word_decsription'!='word_description' – 2014-11-03 19:21:08

+1

^^^良好的發現,如果操作系統正在使用它,那麼數據庫方面的錯誤報告和檢查就會發現。 – 2014-11-03 19:22:20

回答

0

我認爲你有一些錯別字。

這行代碼在這裏:

$q2="SELECT * FROM words WHERE word_name='$word_name' and word_description='".$_POST['word_decsription']."'"; 

應該是這樣的:

$q2="SELECT * FROM words WHERE word_name='".$word_name."' and word_description='".$_POST['word_description']."'"; 
+0

沒有語法錯誤,至少在你沒有比較的時候。 – 2014-11-03 19:18:45

+0

你是對的,我說錯了。我仍然認爲他試圖從單詞表中找到$ word_name變量,而不是單詞'$ word_name' – SLin 2014-11-03 19:20:31

+0

似乎更像是一個錯字。請參閱OP的問題下的評論。 – 2014-11-03 19:21:39

0

1)在$ _ POST [ 'word_description']在查詢一個錯字:

$q2="SELECT * FROM words WHERE word_name='$word_name' and word_description='".$_POST['word_decsription']."'"; 

2)另外,我會建議使用word_id而不是單詞描述來進行驗證......您需要寫入在你的表單中將它放在<input name="word_id" type="hidden" value="..." />中傳遞給它。 什麼會更好,爲了防止人們通過查看代碼來知道答案(以防他們知道什麼詞匹配什麼id),您可以將隱藏字段中的值編碼爲md5($word_id.$word_name),然後在您的查詢中檢查"WHERE MD5(CONCAT(word_id, word_name))='".$_POST['word_md5']."'"(假設現在你隱藏的輸入被稱爲「word_md5)

編輯: 看HTML我看到你的問題是什麼之後:

<form method="POST"> 
    <input type="submit" name="submit_description" value="Искай описание.">   
    <input type="hidden" name="word_description" value="<?php echo $_POST['word_description']?>"> 
</form> 

<form method="POST"> 
    <input type="text" name="word_name"> 
    <input type="submit" name="submit_word" value="Провери дума."> 
</form> 

這都應該在同一個<form>元素:

<form method="POST">  
    The word description is: <?php echo $_POST['word_description']; ?> 
    <input type="hidden" name="word_description" value="<?php echo $_POST['word_description']?>"> 
    <input type="text" name="word_name"> 
    <input type="submit" name="submit_word" value="Провери дума."> 
</form> 

提交表單時,$ _POST數組應包含word_description和提交的word_name。

編輯2: 如果您想使用的ID,您必須首先將其添加到您的SELECT查詢:

$q = mysqli_query($connection, ' SELECT word_id, word_description 
FROM words ORDER BY rand() LIMIT 1 
'); 

然後你需要它以後設置一些變量,然後在你的HTML:

<form method="POST">  
    The word description is: <?php echo $_POST['word_description']; ?> 
    <input type="hidden" name="word_id" value="<?php echo $word_id?>"> 
    <input type="text" name="word_name"> 
    <input type="submit" name="submit_word" value="Провери дума."> 
</form> 

你的第二個SQL查詢應該再像:

$q2="SELECT * FROM words WHERE word_name='$word_name' and word_id='".$_POST['word_id']."'"; 

注意:在代碼中更改$ _POST數組是一種不好的做法。

該數組由客戶端發送的請求填充,如果您在其中更改值,則事情會變得令人困惑。 最好創建另一個變量並將其設置爲$ _POST的值(例如:$word_description = $_POST['word_description'];)。

這樣,您仍然可以使用array_key_exists('word_description', $_POST)來驗證客戶端是否實際發送了某些內容。

+0

好吧,我現在感覺像地獄一樣。我是PHP和編程新手,真的沒有人可以問我。我只想看看明天我是否學過英語單詞。獲得隨機描述並寫下單詞。如果它是正確的,那麼很好,如果不是......將會看到。總是當我輸入一個單詞名稱時,它說它不是描述所遵循的那個。我不知道如何使用word_id的東西。我甚至不知道有隱藏類型的輸入...你能告訴我怎麼做嗎? – 2014-11-03 19:32:55

+0

我已更新我的答案,以顯示如何使用word_id。 – Naomi 2014-11-03 22:04:22