2011-07-04 4 views
2

저는 PHP 퀴즈 프로그램과 함께 작업 해 왔으며 데이터베이스에서 고유 한 무작위 값을 가져 오는 데 약간 분실했습니다. 현재 여기에 내 대본이 있습니다. 새로운 문제는 이미와 in_array 사용하여 물어 경우 내가 비교할 수 내가 기록을 이전의 모든 질문을 할 수 및 있도록 PHP가 데이터베이스에서 고유 한 무작위 값을 가져옵니다.

<?php $num = 1; 
    $sql = "SELECT * FROM questions ORDER BY RAND() LIMIT ".$num; 
    $sql_exec = mysql_query($sql, $connection); 
    if(isset($_POST['start']) || isset($_SESSION['xy'])){ 
     while($row = mysql_fetch_array($sql_exec)){ 
      if(!in_array($row['qid'], $_SESSION['xy'])){ 
       echo $row['qid']." -".$row['question']."<br />"; 
       if(isset($_POST['num'])){ 
        $_SESSION['xy'][] .= $row['qid']; 
       } 
      }else{ 
       // WHAT WILL I PUT HERE 
      } 
     } 
    } ?> 

<form action="<?php $_SERVER[PHP_SELF]; ?>" method="post"> 
    <input type="hidden" name="num" value="1" /> 
    <input type="submit" name="start" value="Start" <?php if(isset($_POST['start']) || isset($_SESSION['xy'])) echo "disabled"; ?> /> 
    <input type="submit" name="submit" value="Continue" /> 
    <input type="submit" name="destroy" value="Destroy" /> 
</form> 

나는 세션 배열의 각 행의 ID를 넣어. 페치 새로운 데이터가 배열에 이미있는 경우

문제는 프로그램이 정거장 나는 여전히 다른 값이 없기 때문에,

[아이디어-01] 나는 다른 사람에 새로운 선택 문을 가하고 생각 해요 ,하지만 루프 내부에 있기 때문에 그것이 잘못되었다는 것을 안다. 그리고 가치가 유일 할 것이라는 확신이 없다. 내가 세션에서이 행 ID의 배열 레코드

[아이디어-02] ,

WHERE qid != $_SESSION['xy'] 

문제 위의 선택에 WHERE 조건을 넣어의 메신저 생각 나는 루프이 세션이 있습니다 각 값을 명령문과 비교합니다. 또한 질문은 20 개 항목이며 앞으로 확장 될 수 있습니다.

답변

1

당신이 찾고있는 것이 mysql의 in comparison function입니다. RAND()에 의해 ORDER를 사용하지 마십시오, http://www.titov.net/2005/09/21/do-not-use-order-by-rand-or-how-to-get-random-rows-from-table/을 참조하십시오

또한

$mysql_query="SELECT * FROM questions WHERE question NOT IN (".implode(",",$_SESSION["anwsered_questions"]).") ORDER BY RAND();"; 

$ _SESSION을에 저장된 숫자 만 값이 있는지 확인 [ "anwsered_question"달리이 쿼리는 MySQL의 주사에 vulnarable 것 더 많은 정보를 위해서.

+1

그는 주사를 위해'array_map ('mysql_real_escape_string', $ _SESSION [ "anwsered_questions"])'을 사용할 수는 있지만 성능이 좋지 않습니다. 난 그냥 숫자 값 (세션에 삽입하기 전에 확인)을 제외하고 아무것도 세션에 갈 수 있는지 확인합니다. – Ben

관련 문제