PHP:$ _SESSION没有设置

时间:2016-07-27 21:12:47

标签: php session

在重复之前,我花了4个小时研究我的问题,但我没有运气。

我正在尝试为我的网站制作注册/登录系统。似乎不起作用的要点是,当我在我的网站上注册时,会话似乎没有开始。我可以看到它的原因是,在我的导航栏上,我已将其设置为从注册更改为注销。这是一段代码:

<ul>
    <li class="list1"><a href="GeorgeKarabassis.php">Home</a></li>
    <li class="list2"><a href="about.php">About</a></li>
    <li class="list3"><a href="portfolio.php">Portfolio</a></li>
    <li class="list4"><a href="Blog.php">Blog</a></li>
    <li class="list4"><a href="contact_us.php">Contact</a></li>
    <?php
        if (isset($_SESSION['id'])){
            echo "<li><a href='#'>SIGN OUT</a></li>";
        }
        else{
            echo "<li><a onclick='signup(event)' href='#'>SIGN UP</a></li>";
        }
    ?>
</ul>

要使我创建了三个文件。一个是mane页面,一个是注册文件本身,代码如下:

<?php
    session_start();
    include "../dbh.php";

    $first = $_POST["first"];
    $last = $_POST["last"];
    $uid = $_POST["uid"];
    $email = $_POST["email"];
    $pwd = $_POST["pwd"];

    $sql = "INSERT INTO users (first,last,uid,email,pwd) VALUES ('$first','$last','$uid','$email','$pwd')";
    $result = mysqli_query($conn, $sql);
    $row = mysqli_fetch_assoc($result);
    $_SESSION['id'] = $row['id'];
    header("Location: ../index.php");
    exit();

,最后一个是将PHP连接到下面的数据库代码的文件:

$conn = mysqli_connect("XXX","XXX","XXX","XXX");

if (!$conn){
    die("Connection failed: ".mysqli_connect_error());
}

我认为会话没有启动,因为在用户点击表单上的注册后主页面重新加载,但是我已经在我的所有文件上启动了会话(除了数据库连接文件,它在哪里&#39;不需要)。我在我的所有页面上都使用了session start,并将它放在所有页面的开头,并打开和关闭PHP标记。

有什么建议吗?感谢您的回答和评论!

抱歉英语不好但不是我的第一语言。

2 个答案:

答案 0 :(得分:3)

此:

$sql = "INSERT INTO users (first,last,uid,email,pwd) VALUES ('$first','$last','$uid','$email','$pwd')";
$result = mysqli_query($conn, $sql);
$row = mysqli_fetch_assoc($result);
           ^^^^^^^^^^^^^^^^^^
$_SESSION['id'] = $row['id'];

插入查询 NOT 返回结果集,但您不能fetch()。这意味着mysqli_fetch_assoc()失败,并返回布尔值FALSE。然后,您使用该布尔值false,就好像它是一个数组,并且基本上相当于

$_SESSION['id'] = null;

请注意:

php > $foo = false;
php > $id = $foo['id'];
php > var_dump($id);
NULL

你想要

$_SESSION['id'] = mysqli_insert_id($conn);

代替。

答案 1 :(得分:0)

SQL查询是一个错误。

$sql = "INSERT INTO users (first,last,uid,email,pwd) VALUES ('$first','$last','$uid','$email','$pwd')";
    $result = mysqli_query($conn, $sql);
    $row = mysqli_fetch_assoc($result);

代码的第一行是INSERT命令。第二行通过将其发送到服务器来执行此命令。如果正确处理了查询,那么MySQL服务器不会向您返回任何内容,因此$result将等于true它不包含数据库中的任何数据。所以你无法获取它,你试图在第三行做什么。需要单独查询数据。