如何调用位于其他文件中的函数来设置$ _SESSION变量

时间:2019-04-26 08:14:58

标签: php

我正在尝试将注册和登录应用程序作为一个项目。我在注册过程中遇到了一些问题。我创建了一个名为“ 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。我知道我需要对密码进行哈希处理,这是下一步。预先谢谢你!

2 个答案:

答案 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