我遇到访问会话变量值的问题。
我正在创建一个登录页面,这是我设置会话变量的值。
的index.php
<?php
session_start();
$result=mysql_query("select * from myuser where id='".$id ."' and password='".$password."'");
if(mysql_num_rows($result) > 0){
$user = mysql_fetch_assoc($result);
$_SESSION['SESS_ID'] = $user['id'];
$_SESSION['SESS_UNAME'] = $user['username'];
$_SESSION['SESS_PASS'] = $user['password'];
header("location:home.php");
exit();
}
?>
home.php
<?php
session_start();
if(!isset($_SESSION['SESS_ID']) || (trim($_SESSION['SESS_ID'])) == ''){
header("location:index.php");
exit();
}
?>
<html>
<body>
<p>Login Successful</p>
<?php echo $_SESSION['SESS_ID'] ; ?>
</body>
</html>
这里的问题是我在$ _SESSION ['SESS_ID']中没有价值..那么如何在home.php中获取或访问此会话变量的值?
编辑:我对SQL的查询是
从myuser中选择*,其中id ='“。$ id。”'和密码='“。$ password。”''
答案 0 :(得分:1)
有关您遇到此问题的原因的一些观点:
$_SESSION
数组的值直接来自数据库,但您没有数据库SQL查询 - 而是“! - 这里写的查询 - ”
如果您可以使用返回id
,username
和password
值的查询替换此占位符,那么您的代码应按预期执行。
我不确定你的语法是否错误,但它不是我想要的形状,我自己的形状会是:
$result = mysqli_query($connection, $sql);
while ($outputrow = mysqli_fetch_array($result)){
// In here $outputrow is an array of ONE row of your database, so
// $outputRow['id'] = the id from one row. ordered by the ORDER BY in your SQL query.
}
mysqli_error($connection)
子句以检测错误。如:下面:
$result=mysqli_query($connection, "<!--query written here -->") or die("error :".mysqli_error($connection));
正如我在这些示例中使用的那样,请停止使用MySQL并至少使用MySQLi甚至是PDO。 SO上有许多改进和错误修复以及关于此转换的大量信息。
此外,永远不要将密码作为字符串进行比较,保存到数据库的密码应作为最低要求保存为具有PHP函数password_hash()
的哈希值。永远不要行if($_POST['pwd'] == $row['pwd']){
。
最后,正如Fred-ii-在评论中正确提到的那样,添加错误记录并检查你的脚本,以便你知道发生了什么:
如:
error_reporting(E_ALL);
ini_set('display_errors', 1);
将这些添加到PHP页面的最顶层,它们会向您显示错误和警告,以便您可以查看哪些内容有效,哪些内容无效。
从您的编辑中有两个biq问题,您的陈述是:
“select * from myuser where id ='”。$ id。“'and password ='”。$ password。“''
那么$id
和$password
的价值来自哪里?是页面顶部的<?php
,如果是这样,这些变量将始终为空,您需要将值应用于这些变量。