我最近学会了如何使用PHP和MYSQL创建登录系统。我决定为我的网站制作一个。用户使用电子邮件,密码,名字和姓氏进行注册。我想问一个问候语"我的问候,"然后他们的名字。我可以在会话中保存名称,但我想知道为什么我的方法不能完全正常工作。注册后,每次都有效。这是完整的注册码:
$error = "";
include("loginsession.php");
if(array_key_exists("id", $_SESSION)){
header("Location: index.php");
}
if(array_key_exists("submit", $_POST)){
include("connection.php");//database connection
$email = $_POST['email'];
$password = $_POST['password'];
$firstName = $_POST['firstname'];
$lastName = $_POST['lastname'];
$query = "SELECT * FROM users WHERE email='".mysqli_real_escape_string($link, $email)."'";
$result = mysqli_query($link, $query);
if(mysqli_num_rows($result) > 0){
$error = "<div class='alert alert-danger' role='alert'><strong>Error:<br><br></strong>This email already exists.<hr></div>";
}else{
$query = "INSERT INTO users(firstname, lastname, email, password) VALUES('".mysqli_real_escape_string($link, $firstName)."', '".mysqli_real_escape_string($link, $lastName)."', '".mysqli_real_escape_string($link, $email)."', '".mysqli_real_escape_string($link, $password)."')";
mysqli_query($link, $query);
$query = "UPDATE users SET password = '".md5(md5(mysqli_insert_id($link)).$password)."' WHERE id=".mysqli_insert_id($link)."";
mysqli_query($link, $query);
$_SESSION['id'] = mysqli_insert_id($link);//where the issue originates
if(isset($_POST['check']) && $_POST['check']=='true'){
setcookie("id", mysqli_insert_id($link), time() + 60*60*24*365);
}
header("Location: index.php");
}
}
在索引页面上,我就是这样做的:
session_start();
if(array_key_exists('id', $_COOKIE)){
$_SESSION['id'] = $_COOKIE['id'];
}
$greeting = "";
if(array_key_exists('id', $_SESSION)){
include("connection.php");//just the login to the database
$query = "SELECT * FROM users WHERE id = ".$_SESSION['id'];
$results = mysqli_query($link, $query);
$row = mysqli_fetch_array($results);
$greeting = "My greetings, ".$row['firstname']." ".$row['lastname'];//add name to greeting variable
}
后面的代码:
<p id="greeting">
<?php echo $greeting; ?>
</p>
正确的名称在登录后显示,但从未在注册后显示,即使我重新加载页面也是如此。什么显示而不是&#34;我的问候,名字姓氏&#34;是&#34;我的问候,&#34;。就像数据库找不到该特定id的名称一样。
如何在注册后立即获得正确的结果。如果您需要注册或登录过程中的任何其他代码,请告诉我,我会发布它。如果有人想亲自尝试,我的网站是here。
答案 0 :(得分:1)
我没有测试你的代码,但我认为这是因为在注册之后会话还没有开始。尝试在第一个代码的第一行添加session_start();
。