【问题标题】:unexpected session identifier php意外的会话标识符php
【发布时间】:2014-10-29 19:34:13
【问题描述】:

所以我查看了其他线程,但没有找到适合我的解决方案。 这是我的问题: 我有两个 php 页面: http://codepad.org/VhblM76K 和 http://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 来显示页面上的信息。

【问题讨论】:

  • 你知道你不需要在你的数组键前面加上$吗? $_SESSION['dataArray']. Also, your submit input button needs the attribute name="submit"`。它有一个值,但没有名称,因此它没有作为表单数据属性提交。另外,您重定向到第二页的地址在哪里?我在第一页看不到任何重定向的内容?
  • 我不知道,谢谢。修复了按钮上的名称。在表单中,我有 action="result.php" 重定向到第二页。
  • 在这种情况下,如果您在单击表单后重定向到第二页,则根本不会设置会话数据。您需要重定向到同一页面,然后在您的if(isset($_POST['submit'])) 条件下,您需要将重定向放在最后。

标签: php json session indexing undefined


【解决方案1】:

您的问题是您将会话编写为$_SESSION['$dataArray']。如果您在某处有一个名为 $dataArray 的变量,那么您需要将其写入 $_SESSION[$dataArray]。

或者,如果您没有名为$dataArray 的变量,则需要将其写为$_SESSION['dataArray']。

编辑: 试试页面顶部session_start()下方的print_r($_SESSION),看看你是否设置了$_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--;
        }

【讨论】:

  • 感谢您的回复!我没有名为 $dataArray 的变量,因此我从索引中删除了美元符号。它没有解决它。现在它说:未定义的索引:dataArray。
  • 让我更仔细地检查您的代码。那只处理了一个错误。
  • 所以我什么都做了。当我给它一个默认值时,它确实消除了错误,但它只是产生了一个空数组,这并不是我真正想要的。所以我把所有的 php 代码都移到了第二页,现在它似乎可以工作了。我不希望它全部在一个地方,但似乎这就是它的方式。仍然非常感谢您的帮助。
  • 为了更简洁,您可以将一个页面include() 放入另一个页面,但将它们分开或更好地使您的处理脚本成为类方法并在该页面上运行它。
【解决方案2】:

您收到错误的原因是您没有设置任何会话数据,因为您直接从表单重定向到第二页。

您需要更新表单,使其重定向回表单所在的同一页面,然后将您的 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']

它应该可以工作。

【讨论】:

  • 对不起,我是 php 新手,所以标题位置应该看起来像其中一些: header('location: result.php');或 header('位置:localhost/highschools.bg/result.php'); ?出于某种原因,它们都不适合我。
  • 我在您发布的同一个网站上发布了一些代码,这应该是您的第一页:codepad.org/ghZRtiog,这应该是您的第二页 (result.php):codepad.org/wbrGYsh5 这两个文件都应该是在同一目录中。
  • 非常感谢您的帮助!我使用了你的代码,它完成了工作!
猜你喜欢
  • 1970-01-01
  • 2018-03-29
  • 2015-09-14
  • 2017-10-09
  • 1970-01-01
  • 2017-09-05
  • 2020-07-10
  • 2012-06-19
  • 2014-04-10
相关资源
最近更新 更多