我正在尝试将注册和登录应用程序作为一个项目。我在注册过程中遇到了一些问题。我创建了一个名为“ formProcess.php”的文件,该文件接受来自用户的输入并将其存储在数据库中(有效),并调用另一个文件来设置会话变量(“ loginProcess.php”),然后将用户重定向到仪表板('dashboard.php')是否全部签出。我认为除了设置会话变量外,其他所有东西都可以正常工作。用户信息存储在数据库中,并且用户被重定向到仪表板,但是仪表板页面中的会话变量不起作用。 我是PHP的新手,所以我确定问题很明显,但是我已经盯着这个问题好几个小时了,但我找不到问题。
我认为这与我使用标头函数的方式有关,但是我不确定。我尝试将标头函数包装在if(isset())中,但随后用户从未将其插入仪表板。(我认为)隔离了问题,即formProcess和loginProcess文件未正确链接。
这是来自formProcess.php文件的片段。我在if (mysqli_query($conn, $sql))
语句中调用“ longinProcess”文件。
//calls function to see if there is already a student in the system with the same email
require_once "checkProcess.php";
$check = checkStudents($email);
// if the the function returns true then the studnet is not in the system already
if($check){
$sql= "INSERT INTO students (studentFirstName, studentLastName, studentEmail, studentPhone, studentGender, studentTextArea, studentAddress, studentAddress2, studentCity, studentState, studentPostCode, studentPassword)
VALUES('{$firstName}','{$lastName}','{$email}','{$phone}','{$gender}','{$notes}','{$streetAddress}','{$streetAddress2}','{$city}','{$state}','{$postCode}','{$password}')";
if (mysqli_query($conn, $sql)) {
require_once "loginProcess.php"; //THIS IS NOT WORKING
loginSession($email,$password);
header('Location: url to dashboard.not sure if I want to share the real url with the world.');
// creating a session
//Creating Session variables
//sending user to dashboard
} else {
echo "Error: " . $sql . "<br>" . mysqli_error($conn);
}
这是所有loginProcess.php文件
<? session_start();
function loginSession($userEmail, $userPassword){
include 'config.php';
// Create connection
$conn = mysqli_connect($servername, $username, $password, $dbname);
// Check connection
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
$sql = "SELECT * FROM students";
$result = mysqli_query($conn, $sql);
if (mysqli_num_rows($result) > 0) {
// output data of each row
while($row = mysqli_fetch_assoc($result)) {
if($row["studentEmail"] == $email && $row['studentPassword'] == $password){
$_SESSION["id"]= $row["id"];
$_SESSION["firstName"] = $row["studentFirstName"];
$_SESSION["lasName"] = $row["studentLastName"];
$_SESSION["email"] = $row["studentEmail"];
$_SESSION["phone"] = $row["studentPhone"];
$_SESSION["gender"] = $row["studentGender"];
$_SESSION["notes"] = $row["studentTextArea"];
$_SESSION["streetAddress"] = $row["streetAddress"];
$_SESSION["streetAddress2"] = $row["streetAddress2"];
$_SESSION["city"] = $row["studentCity"];
$_SESSION["state"] = $row["studentstate"];
$_SESSION["postCode"] = $row["studentPostCode"];
$_SESSION["password"] = $row["studentPassword"];
}
}
} else {
echo "0 results";
}
mysqli_close($conn);
}
?>
因此,当前尚未设置会话变量,并且我不确定是什么问题。另外,两个文件的顶部都有<? session_start();?>
。
PS。我知道我需要对密码进行哈希处理,这是下一步。预先谢谢你!
答案 0 :(得分:2)
您可以制作一个单独的文件,并将其包含在每个php文件的顶部。例如header.php并放入./gradlew 05-kt-frontend-vaadin:build && open 05-kt-frontend-vaadin/frontend.html
session_start
在每个PHP页面的顶部都包含此文件之后,请删除<?php session_start();?>
,如果require_once session_start
之后的任何文件中都包含该文件。
主动使用PDO连接代替mysqli来防止应用程序中的SQL注入。
似乎您正在遍历所有可用用户,可以避免这种情况并直接使用
header.php
现在在 $sql = "SELECT * FROM students WHERE `studentEmail`='$userEmail'"
$result = mysqli_query($conn, $sql);
if (mysqli_num_rows($result) > 0) {
while($row = mysqli_fetch_assoc($result)) {
if($row['studentPassword'] == $password){// Here you can match the password
/*
Assign Session
*/
}
}
}else{
echo "0 results";
}
之后使用print_r($_SESSION)
检查会话。
您只需要在loginSession($email,$password);
loginProcess.php`中包含一次header.php
答案 1 :(得分:1)
您正在根据数据库密码检查 $row['studentPassword']
。
我希望它们是不同的,以便不会设置会话变量。
我相信您需要的是 $row['studentPassword'] == $userPassword
。