我在以php文件显示会话时遇到问题。我可以显示该会话,但显示不正确-它仅显示字母“ S”。

这些会话是在用户登录我的系统时创建的,它们包含其唯一的ID和全名。

我的登录PHP如下。我遇到的只是“ full_name”和“ id”会话,因为我不得不自己将它们编码到脚本中。我的探针在某处出错

<?php

ob_start();
include ("includes/dbConfig.php");
$tbl_name="users"; // Table name

// Connect to server and select databse.
mysql_connect("$host", "$un", "$pwd")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");

// Define $myusername and $mypassword
$username=$_POST['username'];
$password=$_POST['password'];


// To protect MySQL injection (more detail about MySQL injection)
$username = stripslashes($username);
$encrypted_password=md5($password);
$username = mysql_real_escape_string($username);
$encrypted_password = mysql_real_escape_string($encrypted_password);
$sql="SELECT * FROM $tbl_name WHERE username='$username' and    password='$encrypted_password'";
$result=mysql_query($sql);

//Get User Info

$userinfo="SELECT * FROM $tbl_name WHERE username='$username'";
$result=mysql_query($userinfo);

$full_name= $userinfo['full_name'];
$id= $userinfo['id'];

// Mysql_num_row is counting table row
$count=mysql_num_rows($result);

// If result matched $username and $password, table row must be 1 row
if($count==1){

// Register $username, $password and redirect to file "console.php"
session_start();
$_SESSION['username'] = $username;
$_SESSION['full_name'] = $full_name;
$_SESSION['id'] = $id; // store session data
header("Location: console.php");
}
else {
echo "Wrong Username or Password";
}
ob_end_flush();

?>


我已经测试了站点中的会话,并且确定了一些虚拟信息。我认为从数据库获取信息存在问题。

我知道md5不是最安全的密码加密方法,但可以满足我的需求。

先谢谢了。



这是我页面顶部的代码。

<?php

    include ("includes/dbConfig.php");

    session_start();
    if(!$_SESSION['username'])
    if(!$_SESSION['full_name'])
    if(!$_SESSION['id']) {
        // user not logged in redirect
        header("Location: index.php");
    }
?>


这是我用来打印会话数据的代码。

<?php echo "" . $_SESSION["username"]; ?>
<?php echo "" . $_SESSION["full_name"]; ?>
<?php echo "" . $_SESSION["id"]; ?>

最佳答案

这将很快被弃用,但不应引起错误。

$sql="SELECT * FROM $tbl_name WHERE username='$username' and password='$encrypted_password'";
$result=mysql_query($sql);


这毫无意义,您已经在上面的查询中获取了此数据

//Get User Info
$userinfo="SELECT * FROM $tbl_name WHERE username='$username'";
$result=mysql_query($userinfo);


这是错误的,您正在尝试将字符串作为关联数组访问!

$full_name= $userinfo['full_name'];
$id= $userinfo['id'];


你需要

$count=mysql_num_rows($result);
// If result matched $username and $password, table row must be 1 row
if($count==1){
    $row = mysql_fetch_assoc($result);
    $full_name= $row['full_name'];
    $id= $row['id'];
}


相当为什么会产生“ S”。我不确定。但是无论如何,这些都是错误。

09-26 23:01
查看更多