0

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);

?>

誰が何が悪いのか教えてもらえますか?

4

1 に答える 1

0

私が見ることができるいくつかの問題があります:

  1. 非推奨のmysql_*関数を使用しています (実際には問題とは関係ありません)。
  2. mysql_fetch_array結果セットからすべての行ではなく、最初の行 (通常は 1 行) のみをフェッチします。
  3. $randomIndexどこにも設定していません。

現在のように、結果セットをループして、すべての回答を配列に追加する必要があります。たとえば PDO に切り替えると、fetchAll今しようとしている方法ですべての結果を取得するために使用できます。

ORDER BY RAND()データベースが大きすぎて、作業可能なランダムに並べられた結果セットを取得できない場合にも使用できます。

于 2012-07-18T16:22:17.810 に答える