PHP:$_会话不';t集

PHP:$_会话不';t集,php,session,Php,Session,在设置为复制之前,我花了4个小时研究我的问题,但我没有运气 我正在尝试为我的网站建立一个注册/登录系统。最主要的一点似乎不起作用是,当我在我的网站上注册时,会话似乎没有开始。我之所以能看到它,是因为在我的导航栏上,我将其设置为从注册更改为注销。下面是一段代码: <ul> <li class="list1"><a href="GeorgeKarabassis.php">Home</a></li> <li class=

在设置为复制之前,我花了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>
我相信会话不会启动,因为在用户点击表单上的注册后主页会重新加载,但是我已经在我的所有文件上启动了会话(不需要的数据库连接文件除外)。我在我的所有页面上使用sessionstart,并将它放在所有页面的开头,带有打开和关闭PHP标记

有什么建议吗?我感谢你的回答和评论

对不起,英语不好,但它不是我的第一语言。

这:

$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'];
插入查询不会返回结果集,并且不能从中提取()。这意味着
mysqli\u fetch\u assoc()
失败,并返回布尔值FALSE。然后使用布尔值false,就像它是一个数组一样,并且基本上执行与

$_SESSION['id'] = null;
请注意:

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

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

这:

$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'];
插入查询不会返回结果集,并且不能从中提取()。这意味着
mysqli\u fetch\u assoc()
失败,并返回布尔值FALSE。然后使用布尔值false,就像它是一个数组一样,并且基本上执行与

$_SESSION['id'] = null;
请注意:

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

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

相反。

这是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
它将不包含来自数据库的任何数据。所以你拿不到它,你在第三行尝试做什么。需要对数据进行单独的查询。

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
它将不包含来自数据库的任何数据。所以你拿不到它,你在第三行尝试做什么。需要单独查询数据。

请删除数据库登录数据。不要使用root。特别是在没有设置密码的情况下。@Ty221可以肯定的是,本地测试,冷静下来(关于数据库连接)您有错误报告吗?您是否看到PHP给您的任何警告、通知和错误?您是否向我们提供了第一个文件的完整内容?您很容易受到攻击。而
insert
查询不会返回结果集。无法从插入中
fetch()
。这意味着
mysqli\u fetch\u assoc()
将失败,返回布尔值false,然后盲目使用该false作为数组-因此,您将为会话变量分配NULL。即使在本地测试期间,也应遵循@MaciejSikora良好做法。请删除您的DB登录数据。不要使用root。特别是在没有设置密码的情况下。@Ty221可以肯定的是,本地测试,冷静下来(关于数据库连接)您有错误报告吗?您是否看到PHP给您的任何警告、通知和错误?您是否向我们提供了第一个文件的完整内容?您很容易受到攻击。而
insert
查询不会返回结果集。无法从插入中
fetch()
。这意味着
mysqli\u fetch\u assoc()
将失败,返回boolean false,然后盲目使用该false作为数组-因此您将NULL分配给会话变量。@MaciejSikora即使在本地测试期间也应遵循良好做法。感谢您的回答@Mark B。我非常感谢。你能详细说明一下这个mysqli_insert_id($conn);请问,它是如何工作的,它是什么?不管它是如何工作的,非常感谢,但是你能向我解释一下mysqli_insert_id($conn)是什么意思吗?看来你的回答对我的问题有帮助。非常感谢你!谢谢你的回答@Mark B。我很感激。你能详细说明一下这个mysqli_insert_id($conn);请问,它是如何工作的,它是什么?不管它是如何工作的,非常感谢,但是你能向我解释一下mysqli_insert_id($conn)是什么意思吗?看来你的回答对我的问题有帮助。非常感谢你!