2012-07-18 34 views
0

我們有一個MySQL數據庫中的問題列表,並希望它向用戶顯示隨機批准的問題。當你點擊隨機按鈕時,我們想要顯示另一個隨機問題,但不是用戶已經看到的任何問題。使用php獲取未從mysql數據庫中顯示的問題

我試圖用這樣的(但它不工作,只是給出了一個空白頁):

<?php 

mysql_connect("localhost", "username", "password") or die(mysql_error()); 
mysql_select_db("aldrig") or die(mysql_error()); 

$result = mysql_query("SELECT * FROM spg WHERE approved='1'") or die(mysql_error()); 
$answers = mysql_fetch_array($result); 

start_session(); 

if (isset($_COOKIE["answers"])) 
    $alreadyShownAnswers = json_decode($_COOKIE["answers"]); 
else 
    $alreadyShownAnswers = array(); 

$answerToShow = $answers[$randomIndex]; 
$alreadyShownAnswers[] = $answers[$randomIndex]; 
unset($answers[$randomIndex]); 
$answers = array_values($answers); 

echo "<div class='contentTitle'><h1>"; 
echo $answerToShow; 
echo "</h1></div>"; 

$_COOKIE["answers"] = json_encode(alreadyShownAnswers); 

?> 

誰能告訴我有什麼不對?

+0

源代碼是否空白,或答案沒有顯示出來? – 2012-07-18 16:18:51

+2

爲什麼不只是將所有問題加載到數組中,然後在您呈現它們時將其刪除?這a)減少了對數據庫的調用,並且b)防止了重複。 – j08691 2012-07-18 16:19:50

+0

另一個說明:你想使用'setcookie()'而不是'$ _COOKIE [x] ='? – 2012-07-18 16:20:02

回答

0

有幾件事情錯了,我可以看到:

  1. 您正在使用過時的mysql_*功能(不是真的與你的問題);
  2. mysql_fetch_array只提取第一行(一般一行),而不是來自 結果集的所有行;
  3. 您並未在任何地方設置$randomIndex

現在,您需要遍歷結果集並將所有答案添加到數組中。如果您切換到例如PDO,您可以使用fetchAll按照您現在嘗試執行的方式來獲取所有結果。

如果您的數據庫不太大,無法獲得可以使用的已經隨機排序的結果集,也可以使用ORDER BY RAND()

+0

你能爲我解決這個問題嗎? – user1476925 2012-07-18 16:23:55

+0

我的數據庫不是那麼大 - 大約有250個問題,所以ORDER BY RAND()可以工作。你對fetchAll的看法聽起來不錯 - 但我不知道這是如何工作的。我正在尋找一個非常準備使用的代碼。 – user1476925 2012-07-18 16:29:51

+0

@ user1476925如果您正在尋找'準備使用的代碼',恐怕您在錯誤的地方... – jeroen 2012-07-18 16:34:40

相關問題