【发布时间】:2012-10-11 06:29:15
【问题描述】:
我创建了一个导航栏,管理员可以在其中使用简单的表单添加和删除链接。当提交表单以添加链接时,会进行 AJAX 调用以将新信息添加到 mySQL 数据库中。作为回调函数的一部分,导航栏会使用以下代码行更新以包含新链接:
$('.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 时,会话没有被访问。有谁知道这是为什么?
【问题讨论】:
-
您是否在 getnav.php 中的任何位置开始了会话?我看到你试图访问一个会话变量,但在会话开始之前你不能
-
哦,大概就是这样。我在 html 中使用了
require('getnav.php'),并且已经在该页面上开始了一个会话,所以我不得不在 getnav.php 中删除它。我必须以某种方式解决这个问题,看看是否是问题所在。 -
所以我必须在html页面上有
session_start(),我必须在页面上有require('/getnav.php'),getnav.php也必须有session_start()。关于如何在不破坏会话的情况下完成此操作的任何想法,并且显然无需在同一页面上调用 session_start() 两次?
标签: php jquery ajax session session-variables