簡體   English   中英

PHP:$ _SESSION未設置

[英]PHP: $_SESSION doesn't set

在設置為重復副本之前,我花了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>

為此,我創建了三個文件。 一個是鬃毛頁面,一個是注冊文件本身,代碼如下:

<?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());
}

我相信該會話不會啟動,因為在用戶點擊表單上的注冊后,主頁會重新加載,但是我已經在所有文件(不需要數據庫連接文件的情況下)上啟動了該會話。 我在所有頁面上都使用了會話開始,並通過打開和關閉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'];

插入查詢不會返回結果集,也無法從中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);

代替。

您的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 它不會包含數據庫中的任何數據 因此,您無法獲取它,這是您嘗試在第三行中執行的操作。 需要單獨查詢數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM