2014-09-04 53 views
0

所以我看着其他線程,但沒有找到爲我工作的解決方案。 這裏是我的問題: 我有兩個php頁面: http://codepad.org/VhblM76Khttp://codepad.org/W9bz8L3E意想不到的會話標識符PHP

第一頁應該從形式獲取信息,在數據庫中尋找它,它存儲在一個變量$_SESSION['$dataArray'],並將其發送到第二頁。

在第二頁上我從與json_encode PHP在JavaScript中的信息,給出了一個錯誤:

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; 

如何這是一個不明身份的索引,當我只能訪問第一個頁面後,第二個頁面,我將值分配給$_SESSION['$dataArray']

我該如何解決這個問題?我在這兩個頁面上都寫了session_start(),它不適合我。 我需要變量schoolData來顯示頁面上的信息。

+0

你知道你不需要用'$'前面加上你的數組鍵? $ _SESSION [ 'dataArray中的']'。另外,您的提交輸入按鈕需要屬性'name =「submit」'。它有一個值,但沒有名稱,所以它沒有作爲表單數據屬性提交。另外,你的重定向到第二頁在哪裏?我看不到第一頁中重定向的任何內容? – 2014-09-04 22:41:46

+0

我不知道,謝謝。修正了按鈕上的名字。在表單中我有action =「result.php」,它重定向到第二頁。 – 2014-09-04 23:03:36

+0

在這種情況下,如果在單擊表單後重定向到第二頁,則根本沒有設置會話數據。你需要重定向到同一頁面,然後在你的if(isset($ _ POST ['submit']))'conditional中,你需要把重定向放在最後。 – 2014-09-05 14:18:16

回答

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'); ?出於某種原因,它們都不適合我。 – 2014-09-05 16:48:22

+0

我在你發佈的同一網站上發佈了一些代碼,這應該是你的第一頁:http://codepad.org/ghZRtiog,這應該是你的第二個(result.php):http://codepad.org/ wbrGYsh5這兩個文件應該位於同一個目錄中。 – 2014-09-05 18:38:41

+1

非常感謝您的幫助!我使用了你的代碼,它完成了這項工作! – 2014-09-06 18:53:16

0

你的問題是,你作爲$_SESSION['$dataArray']寫會話。如果你有一個可變的地方叫$dataArray,那麼你需要把它寫$_SESSION[$dataArray]。或者,如果您沒有名爲$dataArray的變量,則需要將其寫爲$_SESSION['dataArray']

編輯: 在頁面頂端試print_r($_SESSION)session_start()下,看看你是否已經設置了$_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['dataArray'] = array(); 
     while($row_count > 0) { 
       $curRow = mysqli_fetch_array($result); 
       $_SESSION['dataArray'][] = $curRow; 
       $row_count--; 
     } 
+0

感謝您的回覆!我沒有一個名爲$ dataArray的變量,所以我從索引中刪除了美元符號。它雖然沒有解決它。現在它說:未定義的索引:dataArray。 – 2014-09-04 23:08:41

+0

讓我更仔細地檢查你的代碼。那只是照顧一個錯誤。 – Rasclatt 2014-09-04 23:10:06

+0

所以我做了一切。當我給它一個默認值時,它已經消除了錯誤,但它只是產生了一個空數組,這實際上並不是我想要的。所以我將第二頁中的所有php代碼都移走了,現在看起來可行。我不希望它在一個地方,但它似乎就是這樣。非常感謝您的幫助。 – 2014-09-05 08:58:37