簡體   English   中英

會話未保存為ID

[英]Session not being saved as id

基本上,我一直在努力解決我的PHP代碼中的一個未知問題。

代碼( login_config.php ):

    <?php   
session_start();                    //POST VARIABLES
                        $submit = $_POST['login_submit'];
                        $password = $_POST['login_password'];
                        $email = $_POST['login_email'];



if(isset($submit)){
   require 'password_config.php';
   require 'connect.php';

//PASSWORD VERIFYING
   $pass_query = "SELECT password FROM users WHERE email='$email'";
   $queried = mysql_query($pass_query);
   while($row = mysql_fetch_array($queried)){
   $user_pass = $row['password'];
   $veri_password = password_verify($password, $user_pass);
   }
   if($veri_password != true){$errors[] = '-Account does not exist ';}
   elseif($veri_password = true){

//CHECKING NUM ROWS
   $sql = "SELECT id, username FROM users WHERE email='$email'";
   $entered_user = mysql_query($sql);
   $num_rows = mysql_num_rows($entered_user);
   //STORING ID AS SESSION
   while($row1 = mysql_fetch_array($entered_user)){
   //PROBLEM IS HERE 
   $row1['id'] = $id;
   }

//ERRS ARRAY ESTABLISHED
   $errors = array();

//FURTHER VERIFYING
   if( empty($password) || empty($email) )
   {
   $errors[] = 'Please do not leave fields empty';
   }
   elseif( $num_rows != 1 )
   {
   $errors[] = '-Account does not exist ';
   }
   elseif( $num_rows == 1 )
   {
   $id = $_SESSION['key'];

      header('Location: profile.php');
      exit();
      }
   }

   }
?>

問題:為什么當我通過header()重定向到profile.php時,$ _ SESSION ['key']值為null? 我一直在使用var_dump()證明這一點。 我希望會話密鑰在數據庫中具有用戶ID的值,並且我的代碼沒有問題。

首先, $id變量沒有在任何地方定義

$row1['id'] = $id; 意味着assigning $id value to $row1['id']如果要將用戶ID存儲在$id ,則應使用

$id = $row1['id'];

$id = $_SESSION['key'];的相同錯誤$id = $_SESSION['key']; 這意味着assiging $_SESSION['key'] to $id 如果要在會話中存儲$id值:

$_SESSION['key'] = $id;

據我所知,您的代碼中有2個問題,這兩個問題都是您正在運行循環以獲取數據,因此這是代碼,我標記了您正在擰線的行

<?php   
session_start(); 
//POST VARIABLES
$submit = $_POST['login_submit'];
$password = $_POST['login_password'];
$email = $_POST['login_email'];

if(isset($submit)){
   require 'password_config.php';
   require 'connect.php';

//PASSWORD VERIFYING
   $pass_query = "SELECT password FROM users WHERE email='$email'";
   $queried = mysql_query($pass_query);
   //while($row = mysql_fetch_array($queried)){ //no need to run loop here
   $row = mysql_fetch_array($queried);
   $user_pass = $row['password'];
   $veri_password = password_verify($password, $user_pass);
  // } //remove this too
   if($veri_password != true){$errors[] = '-Account does not exist ';}
   elseif($veri_password = true){

//CHECKING NUM ROWS
   $sql = "SELECT id, username FROM users WHERE email='$email'";
   $entered_user = mysql_query($sql);
   $num_rows = mysql_num_rows($entered_user);
   //STORING ID AS SESSION
   //while($row1 = mysql_fetch_array($entered_user)){//no need to run loop here
   $row1 = mysql_fetch_array($entered_user);
   //PROBLEM IS HERE
   //$row1['id'] = $id; // you can't store values in $id like this
   $id = $row1['id']; // right way to do
   } //remove this too

//ERRS ARRAY ESTABLISHED
   $errors = array();

//FURTHER VERIFYING
   if( empty($password) || empty($email) )
   {
   $errors[] = 'Please do not leave fields empty';
   }
   elseif( $num_rows != 1 )
   {
   $errors[] = '-Account does not exist ';
   }
   elseif( $num_rows == 1 )
   {
   $id = $_SESSION['key']; //again wrong you cant load $id into session
   $_SESSION['key'] = $id; //right way to load $id variable value into session

      header('Location: profile.php');
      exit();
      }
   }

   }
?>

一律包括

ini_set("display_errors", "On");
ERROR_REPORTING(E_ALL);

作為測試時代碼的前兩行,或相應地更改測試環境php.ini。 這將為您提供來自php的所有可能的幫助/錯誤聲明

第二,使用session_start()時,在打開Php-tag之前刪除所有空格。 如果有空格,如您的代碼所示,php的行為將不正常。

然后再次查看您的代碼。 /尼爾毫升

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM