2017-03-10 4 views
1

세션 내에 두 개의 HTML 페이지가 있습니다. 첫 번째 페이지에서 $ _SESSION 변수에 저장되는 배열을 만들고 싶습니다. 두 번째 페이지에서 배열을 표시하려고합니다. 첫 페이지mysqli_fetch_assoc의 While 함수는 무한합니다.

PHP 코드는 다음과 같습니다 내가 두 번째 페이지로 이동하면

<?php while ($array = $_SESSION["questions"]) { 
     echo $array["question"]; } ?> 

, 무한 루프가 표시됩니다 내 두 번째 페이지에

<?php 
    include ("../script/db_connect.php"); 

    $select_questions = 'select * from questions '; 

    if (isset($_POST["own"]) && $_POST["own"] == "No") { 
    $select_questions .= 'where creator != ' 
         . $_SESSION["id"]; 
    } 

    $select_questions .= 'limit 3'; 

    $questions_result = mysqli_query($con, $select_questions); 

    $_SESSION["questions"] = mysqli_fetch_assoc($questions_result); 

    mysqli_close($con); 
?> 

PHP 코드가 같다 여기서 배열의 첫 번째 요소 만 반복해서 표시됩니다. 그 이유는 무엇입니까? 내 코드에서 실수를 찾을 수 없습니다.

+0

Do'$ array = array_shift ($ _ SESSION [ "questions"])'그렇지 않으면 같은 데이터로 새 값을 설정하고 그 값이 infiniti가됩니다. – JustOnUnderMillions

+0

하지만 mysqli_fetch_assoc ($ questions_result)를 사용하여 행에서만 페치하는 경우 왜'while'을 사용합니까? 'while ($ array = mysqli_fetch_assoc ($ questions_result))' – JustOnUnderMillions

답변

-1

변경이

$_SESSION["questions"] = mysqli_fetch_assoc($questions_result);

은 (여기에 우리가 아니라 하나의 SQL 결과에서 모든 행을 인출) 나중에

while($row=mysqli_fetch_assoc($questions_result)) $_SESSION["questions"][] = $row;

그리고 할

foreach($_SESSION["questions"] as $quest) { echo $quest["question"]; }

+0

이 방법이 더 잘 작동하지만 일부 항목은 두 번 이상 표시됩니다. 그래서 결국 3 행 (행 1, 행 2, 행 3)이 아니라 6 행 (행 1, 행 1, 행 2, 행 3, 행 1, 행 2)이됩니다. 주문이 매우 이상합니다. – sebjel1

+0

@ sebjel1 그것은 세션의 사용과 관련이있다, 당신은 그것을 다시 채우기 전에 그것을 비 웠니? 이 시점에서 $ _SESSION을 사용하는 이유는 무엇입니까? 당신의 논리에 무언가, 내 코드 예제는 대답에 완전히 확인됩니다. Downvoter는 뇌가 없습니다. – JustOnUnderMillions

+0

내 문제는 $ _SESSION 변수를 비우지 않았다는 점입니다. 감사! – sebjel1

관련 문제