意外的会话标识符php

时间:2014-09-04 22:20:57

标签: php json session indexing undefined

所以我调查了其他线程,但没有找到适合我的解决方案。 这是我的问题: 我有两个php页面: http://codepad.org/VhblM76Khttp://codepad.org/W9bz8L3E

第一页应该从表单中获取信息,在数据库中查找,将其存储在变量$_SESSION['$dataArray']中并将其发送到第二页。

在第二页上,我使用json_encode从php获取javascript中的信息,这会出错:

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

当我查看chrome中的来源时,它说:

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来显示页面上的信息。

2 个答案:

答案 0 :(得分: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--;
        }

答案 1 :(得分: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']

它应该有用。