2012-10-21 3 views
0

관리자가 간단한 양식으로 링크를 추가하거나 제거 할 수있는 탐색 모음을 만들었습니다. 양식을 제출하여 링크를 추가하면 AJAX 호출이 만들어져 mySQL 데이터베이스에 새 정보가 추가됩니다.AJAX 요청시 PHP 세션이 인식되지 않음

$('.nav ul').load('/getnav.php'); 

파일 getnav.php은 다음과 같다 :

<?php 
    require('/connect.php'); 
    $query = "SELECT id, title, url 
      FROM nav 
      ORDER BY position ASC"; 
    $result = $mysqli->query($query); 

    while ($data = $result->fetch_assoc()) { 
     if (!empty($_SESSION['valid'])) 
      echo ' <div class="container"><button type="button" name="'.$data['id'].'" class="delButton" alt="Delete"></button></div> 
'; 
    echo ' <a href="'.$data['url'].'" alt="'.$data['title'].'">'.$data['title'].'</a> 
'; 
} 
?> 

문제는 콜백 함수의 일환으로, 탐색 바는 다음 코드 줄을 사용하여 새 링크를 포함하도록 업데이트됩니다 AJAX 호출에서 탐색 막대가 업데이트되면 링크 만 표시되고 삭제 버튼은 사라집니다. $_SESSION['valid']이 설정되어 있으므로 if 바로 뒤에있는 코드가 실행되어야합니다. 그러나 AJAX 호출이 끝난 후 코드가 누락되면 if가 발생합니다. 내가 가지고있는 유일한 설명은 getnav.php가 .nav ul에로드 될 때 세션에 액세스 할 수 없다는 것입니다. 왜 그 사람이 누군지 알아?

+0

getnav.php의 어느 곳에서나 세션을 시작 했습니까? 세션 변수에 액세스하려고 시도하지만 세션이 시작될 때까지는 볼 수 없습니다. – clementine

+0

아마 그럴 것입니다. html에서'require ('getnav.php')'를 사용하고 있었고 getnav.php에서이 페이지를 제거해야했습니다. 나는 그걸 어떻게 든 작동시켜야하고 그게 문제인지를 알아봐야 할 것입니다. – fvgs

+0

그래서 html 페이지에'session_start()'가 있어야하고, 페이지에'require ('/ getnav.php')'가 있어야하고 getnav.php도'session_start()'가 있어야합니다. 세션을 파괴하지 않고이 작업을 수행하는 방법에 대한 아이디어. 분명히 같은 페이지에서 session_start()를 두 번 호출하지 않아도됩니까? – fvgs

답변

0

전체 코드가 없으면 진단하기가 어렵습니다.

  • session_start()로 세션을 시작 했습니까? ?

  • $ _SESSION을 var_dump 할 수 있습니까?

0

나는 내가 HTML 페이지에 require('/getnav.php');를 호출 할 때 session_start()이없고 사용됩니다 getnav.php의 버전을 만들 수 있다고 생각. 그런 다음 session_start()가 포함 된 getnav.php의 다른 버전을 만들고 AJAX 호출에 사용될 원본을 포함합니다.

정말 만족스러운 해결책은 아니지만 문제를 해결해야합니다. 더 나은 제안을 환영합니다!

0

좋아요, 알아 냈습니다.

첫 번째 session_start() 다음에 session_write_close();을 사용하면 오류없이 getnav.php에서 session_start()를 다시 사용할 수 있습니다.

관련 문제