[英]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.