2012-07-18 3 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

소스가 비어 있습니까? 아니면 대답이 나타나지 않습니까? –

+2

모든 질문을 배열에로드 한 다음 제시 할 때 질문을 제거하지 않는 이유는 무엇입니까? 이것은 a) 데이터베이스 호출을 줄이고 b) 중복을 방지합니다. – j08691

+0

다른 메모 :'$ _COOKIE [x] ='대신'setcookie()'를 사용하고 싶습니까? –

답변

0

내가 볼 수있는 잘못된 몇 가지가 있습니다 : 당신은 사용되지 않는 mysql_* 기능을 사용하는

  1. (정말 문제와 관련되지 않음);
  2. mysql_fetch_array은 결과 집합이 인 모든 행이 아닌 첫 번째 행 (일반적으로 한 행) 만 가져옵니다.
  3. $randomIndex을 어디에도 설정하지 않았습니다.

이제 결과 세트를 반복하고 모든 대답을 배열에 추가해야합니다. 예를 들어 PDO로 전환하면 fetchAll을 사용하여 지금하려는 방식대로 모든 결과를 얻을 수 있습니다.

데이터베이스가 너무 커서 작업 할 수있는 이미 임의로 정렬 된 결과 세트를 얻을 수없는 경우 ORDER BY RAND()을 사용할 수도 있습니다.

+0

저를 고칠 수 있습니까? – user1476925

+0

데이터베이스가 250 개가 넘지 않아 ORDER BY RAND()가 작동합니다. fetchAll에 관해 당신이 말하는 것은 멋지다 - 그러나 그것이 어떻게 작동하는지 나는 모른다. 나는 바로 사용할 수있는 코드를 찾고있다. – user1476925

+0

@ user1476925'ready-to-use code'를 찾고 있다면 잘못된 장소에있는 것이 아닌가 걱정됩니다. – jeroen

관련 문제