2014-09-04 3 views
0

그래서 다른 스레드를 살펴 보았지만 나에게 도움이되는 해결책을 찾지 못했습니다. 여기 내 문제가 있습니다 : 나는 두 개의 PHP 페이지가 있습니다 : http://codepad.org/VhblM76Khttp://codepad.org/W9bz8L3E.예기치 않은 세션 식별자 PHP

첫 페이지는 양식에서 정보를 가져 와서 데이터베이스에서 찾은 다음 변수 $_SESSION['$dataArray']에 저장하고 두 번째 페이지로 보냅니다. 내가 크롬의 소스에서 볼 때

Uncaught SyntaxError: Unexpected token < result.php:20. 

는 말한다 :

var schoolData = <br /> 
<b>Notice</b>: Undefined index: $dataArray in <b>C:\xampp\htdocs\highschools.bg\result.php</b> on line <b>23</b><br /> 
null; 

어떻게 오류가 있습니다로 json_encode와 PHP에서 자바 스크립트의 정보를 얻을 두 번째 페이지에

이것은 미확인 색인입니다. 첫 번째 페이지를 방문한 후 두 번째 페이지로 이동할 수 있는데, 여기서 나는 $_SESSION['$dataArray'] 값을 사용합니다.

어떻게 해결할 수 있습니까? 나는 양쪽 페이지에 session_start()를 썼다. 그리고 그것은 나를 위해 일하지 않았다. 페이지의 정보를 표시하려면 변수 schoolData이 필요합니다.

+0

배열 키 앞에'$ '를 붙일 필요가 없다는 것을 알고 계십니까? $ _SESSION [ 'dataArray']'. 또한 제출 입력 버튼에는 'name = "submit"속성이 필요합니다. 값은 있지만 이름은 없으므로 양식 데이터 속성으로 제출되지 않습니다. 또한 두 번째 페이지로 리디렉션하는 위치는 어디입니까?첫 페이지에서 리디렉션되는 것을 볼 수 없습니까? –

+0

나는 그것을 몰랐다. 고마워. 버튼에 이름을 붙였다. 양식에서 나는 두 번째 페이지로 리디렉션 action = "result.php"있습니다. –

+0

그런 경우 양식을 클릭 한 후 두 번째 페이지로 리디렉션하는 경우 세션 데이터가 전혀 설정되지 않습니다. 같은 페이지로 리다이렉션해야하고,'if (isset ($ _ POST [ 'submit'])) '조건문에서, 거기에 리다이렉트를 넣어야합니다. –

답변

0

오류를 얻고있는 이유입니다.

당신은 그것을 다시 양식에 동일한 페이지로 리디렉션하도록 양식을 업데이트해야, 다음으로 PHP 코드를 바꿉니다

if (isset($_POST['submit'])) { 

    $user = 'root'; 
    $pass = ''; 
    $db = 'highschools'; 

    $con = mysqli_connect('localhost', $user, $pass, $db) or die("Unable to connect"); 
    if (mysqli_connect_errno()) { 
     echo("Failed to connect to MySQL: " . mysqli_connect_error()); 
    } 

    $givenCity = $_POST['city']; 
    $givenClass = $_POST['class']; 
    $givenName = $_POST['name']; 
    $result = mysqli_query($con, 
     "SELECT * FROM highschools WHERE name like '%$givenName%' AND city like '%$givenCity%' AND class like '%$givenClass%'; ") or die(mysqli_error($con)); 

    $row_count = mysqli_num_rows($result); 

    $_SESSION['dataArray'] = array(); 
    while($row_count > 0) { 
     $curRow = mysqli_fetch_array($result); 
     $_SESSION['dataArray'][] = $curRow; 
     $row_count--; 
    } 

    header('location: http://YOUR_SECOND_PAGE_ADDRESS'); 

공지 사항, 내가 추가 한 유일한 라인 인 마지막 줄, hedaer('location: ... ');

http://YOUR_SECOND_PAGE_ADDRESS을 두 번째 코드의 실제 페이지 주소로 변경하는 것을 잊지 마십시오.

그런 다음 두 번째 페이지에서, $_SESSION['dataArray']

으로 $_SESSION['$dataArray']를 교체하고 그것을 작동합니다.

+0

죄송하지만 미안하지만 php에서 새롭기 때문에 머리글 위치가 다음과 같아야합니다. header ('location : result.php'); 또는 헤더 ('location : http : //localhost/highschools.bg/result.php'); ? 그들 중 누구도 어떤 이유로 나를 위해 일하지 않습니다. –

+0

내가 올린 동일한 사이트에 일부 코드를 게시했습니다. 첫 번째 페이지는 http://codepad.org/ghZRtiog이어야하며 두 번째 코드 (result.php) : http://codepad.org/입니다. wbrGYsh5 두 파일 모두 같은 디렉토리에 있어야합니다. –

+1

도움 주셔서 대단히 감사합니다! 나는 당신의 코드를 사용했고 그 일을했습니다! –

0

문제는 당신이 세션을 $_SESSION['$dataArray']으로 쓰고 있다는 것입니다. 변수가 $dataArray이라면 $_SESSION[$dataArray]이라고 써야합니다.

$dataArray이라는 변수가 없다면 $_SESSION['dataArray']으로 작성해야합니다.

편집 : 다른 페이지에서

<?php 
    session_start(); 
    // See if the session contains your $_SESSION['dataArray'] 
    // If not, you can force it to have a default value to avoid errors 
    print_r($_SESSION); 
    $_SESSION['dataArray'] = (isset($_SESSION['dataArray']))? $_SESSION['dataArray']:array(); ?> 
<!DOCTYPE html> 
<html> 
    <head> 
     <title>Намерени училища</title> 
     <meta charset="utf-8"> 
     <link rel="stylesheet" type="text/css" href="styles/main.css"> 
    </head> 
    <body> 
     <div id="contentWrapper" style="height:1000px;"> 
      <header id="pageHeader"> 
      </header> 
      <section id="schoolsContainer"> 
       <ul id="schoolsList"></ul> 
      </section> 
     </div> 

     <script type="text/javascript" src="handlebars-v2.0.0.js"></script> 
     <script type="text/javascript" src="navTemplate.js"></script> 
     <script type="text/javascript"> 
      var schoolData = <?php echo json_encode($_SESSION['dataArray']) ?>; 
      for (var i = 0; i < schoolData.length; i++) { 
       console.log(schoolData[i]['name']); 
       console.log(schoolData[i]['id']); 
      } 
     </script> 


    </body> 
</html> 

,이 또한 작동하기 전에 설정해야합니다 : 페이지 상단의 session_start() 아래 print_r($_SESSION)을 시도하고 볼 당신이 $_SESSION['dataArray']가 설정 한 경우 : 양식에서 두 번째 페이지로 바로 리디렉션 때문에, 모든 세션 데이터를 설정하지 않는 있기 때문에

$_SESSION['dataArray'] = array(); 
     while($row_count > 0) { 
       $curRow = mysqli_fetch_array($result); 
       $_SESSION['dataArray'][] = $curRow; 
       $row_count--; 
     } 
+0

응답 해 주셔서 감사합니다! $ dataArray라는 변수가 없으므로 인덱스에서 달러 기호를 제거했습니다. 그것은 그것을 고치지 않았다. 이제 그것은 말합니다 : 정의되지 않은 인덱스 : dataArray. –

+0

코드를 더 자세히 살펴 보겠습니다. 그때 한 번의 오류 만 처리했습니다. – Rasclatt

+0

그래서 나는 모든 것을했습니다. 오류를 제거한 기본값을 주었지만 빈 배열이 생성되었지만 실제로는 원하는 것이 아닙니다. 그래서 두 번째 페이지에서 모든 PHP 코드를 움직 였고 이제는 작동하는 것 같습니다. 나는 한 곳에서 그 모든 것을 원하지는 않았지만 그것이 그렇게 될 것이라고 생각합니다. 도움을 주셔서 대단히 감사합니다. –