在重复之前,我花了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标记。
有什么建议吗?感谢您的回答和评论!
抱歉英语不好但不是我的第一语言。
答案 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
。 它不包含数据库中的任何数据。所以你无法获取它,你试图在第三行做什么。需要单独查询数据。