【发布时间】:2018-03-31 05:44:15
【问题描述】:
我有一个名为 login.php 的登录页面,其中包含以下 php 代码:
<?php
session_start();
include ('databaseconnect.php');
if(isset($_POST['login'])){
$username = mysqli_real_escape_string($db, $_POST['username']);
$password = mysqli_real_escape_string($db, $_POST['password']);
$query = "select Username, Userid, user_type from Users
where username = '$username'
and password = '$password' LIMIT 1";
$result = mysqli_query($db, $query);
if (mysqli_num_rows($result) == 1) {
$username = mysqli_fetch_assoc($result);
if ($username ['user_type'] == 'owner') {
$_SESSION['username'] = $username['Username'];
$_SESSION['userid'] = $userid['Userid'];
$_SESSION['user_type'] = $user_type['user_type'];
header('location:adminmain.php');
}else{
$_SESSION['username'] = $username['Username'];
$_SESSION['userid'] = $userid['Userid'];
$_SESSION['user_type'] = $user_type['user_type'];
header('location:usermain.php');
}
}
}
}
?>
假设一个人的“用户名”、“用户名”和“用户类型”从他们登录时起就在 $_SESSION 中。当一个人登录时,会有一个名为 create_topic.php 的页面,其中包含以下代码:
<?php
include ('dataconnect.php');
$sql1= "SELECT Categoryid, Categoryname, Categorydescription
FROM Categories";
$result1 = mysqli_query($db,$sql1);
if (!$result1)
{
echo "No Category Found, Contact the administrator" </p>;
}
function getPosts()
{
$posts = array();
$posts[0] = $_POST['topic_subject'];
$posts[1] = $_POST['topic_category'];
$posts[2] = $_SESSION['username']; var_dump($_SESSION);
return $posts;
}
if (isset($_POST['createtopicbutton']))
{
$data = getPosts();
$sql2 = "INSERT INTO Topics(Topic_subject, Topic_category, Topic_by)
VALUES('$data[0]','$data[1]', '$data[2]')";
$result2 = mysqli_query($db,$sql2);
if ($result2)
{
echo "<p> Topic Successfully Created </p>";
}else{
echo "<p> Topic NOT! Successfully Created, Contact the administrator
</p>. mysqli_error($db);
}
}
?>
但是,当执行上述代码时,出现以下错误:
您的 SQL 语法有错误;检查手册 对应于您的 MySQL 服务器版本,以便使用正确的语法 靠近第 1 行的“不正确的整数值:”列“Topic_by” VALUES('t' 在第 1 行。
所以我做了一个 var_dump 我发现了这个:
array (size=3)
'username' => string 'Owner1' (length=6)
'userid' => null
'user_type' => null.
所以我特别要问的是如何存储“用户名”但“用户 ID”和“用户类型”在 login.php 页面上声明时为空。您的帮助和帮助将不胜感激。
【问题讨论】:
-
你的第一页有 session_start();而你的第二页没有。两者和所有使用 $_SESSION 的都需要 session_start();
-
如果您使用 MySQLi,请使用prepared statements,因为您的查询容易受到 MySQL 注入的影响。此外,它可能会纠正您遇到的 SQL 错误。
-
请不要在数据库中以明文形式存储密码。请改用password_hash 和password_verify。