PHP - 从mysql数据库获取用户名(session.php)

时间:2015-12-16 12:06:36

标签: php mysql

我正在尝试使用用户名显示欢迎消息。我有一个会话设置,一切正常,但我不能使用户名出现在“欢迎”旁边。我阅读了很多帖子,大多数建议要求在session_start();之前添加echo。仍然没有..

以下是session.php的代码,如果有人可以帮助我的话:

<?php
session_start();
$message="";
if(count($_POST)>0) {
$conn = mysql_connect("**.***.***.***", "*********", "*********");
mysql_select_db("*********",$conn);
$result = mysql_query("SELECT * FROM WebsiteUsers WHERE user_name='" . $_POST["fname"] . "' and password = '". $_POST["password"]."'");
$row  = mysql_fetch_array($result);
if(is_array($row)) {
$_SESSION["UserID"] = $row[user_id];
$_SESSION["fname"] = $row[user_name];
} else {
$message = "Invalid Username or Password!";
}
}
if(isset($_SESSION["user_name"])) {
header('Location: login.php');
}
?>

以下是应显示用户名的个人资料页面的代码:

<?php
include('session.php'); //file shown above
?>
<!DOCTYPE html>
<html>
<head>
<title>Your Home Page</title>
</head>
<body>
<div id="profile">
<b id="welcome">Welcome : <i>

<?php
session_start();
echo $_SESSION['fname'];
?>

</i></b>
<b id="logout"><a href="logout.php">Log Out</a></b>
</div>
</body>
</html>

我只是在学习PHP,这是一个基本测试。

感谢您提供任何信息。 Hava美好的一天!

更新:

loginscript.php

<?php
session_start();
$error='';
if (isset($_POST['submit'])) {
if (empty($_POST['uname']) || empty($_POST['password'])) {
$error = "Username or Password is invalid";
}
else
{
$uname=$_POST['uname'];
$password=$_POST['password'];
$conn = mysql_connect("**.***.***.***", "*********", "*********");
$uname = stripslashes($uname);
$password = stripslashes($password);
$uname = mysql_real_escape_string($uname);
$password = mysql_real_escape_string($password);
$db = mysql_select_db("*********", $conn);
$query = mysql_query("select * from WebsiteUsers where password='$password' AND uname='$uname'", $conn);
$rows = mysql_num_rows($query);
if ($rows == 1) {
$_SESSION['login_user']=$uname;
header("location: profile.php");
} else {
$error = "Username or Password is invalid";
}
mysql_close($conn);
}
}
?>

logout.php:

<?php
session_start();
if(session_destroy())
{
header("Location: login.php");
}
?>

4 个答案:

答案 0 :(得分:2)

您需要引用数组键,例如:

  

$ _ SESSION [“UserID”] = $ row [user_id];

但事实上这应该是

$_SESSION["UserID"] = $row['user_id'];

请注意$row中数组键周围的单引号。我看到你使用双引号,我认为存在细微差别,但关键是,使用数组键字符串周围的引号。请阅读https://stackoverflow.com/a/2317969/3536236

还有 可能 是您用双引号设置值然后用单引号调用值的问题 -

$_SESSION["fname"] = $row['fname'];
print $_SESSION['fname']; 

但那只是一个理论。

进一步调试:

Print_r($_SESSION); <== what does this give you after the values are set?
  • 使用MySQLi或PDO而非MySQL_,因为现在 已弃用 ,不应再使用。

  • exit;重定位呼叫后添加header。由于脚本的其余部分仍将在重定位标头调用运行之前执行,因此您需要告诉脚本在到达header(location: )点时立即停止执行。

  • 保持一致,并在数组键标识符中包含所有单'或所有双"引号。

  • 从HTML中移除 session_start(),此函数调用必须位于页面的开头/顶部,而不是其他地方。您可以将此session_Start替换为上面引用的print_r,以进行调试。

调试

首先,您需要在页面上启用错误,因此您正在处理的任何页面都会将此代码添加到顶部:

error_reporting(E_ALL);
ini_set('display_errors', 1);

这将在您运行页面时输出代码罚款到浏览器的任何错误。非常有用和信息丰富。

接下来,我将向您展示在逻辑链中确定数据“丢失”的位置所需的过程。

$result = mysql_query("SELECT * FROM WebsiteUsers WHERE user_name='" . $_POST["fname"] . "' and password = '". $_POST["password"]."'");

print_r($result) <== should return something like "this is a type 4 element". False shows your DB is empty or your MySQL code is bad. 

$row  = mysql_fetch_array($result);

var_dump($row) <== should return the values from the DB. It should also tell you what data type this variable is, as you demand an array, below:

if(is_array($row)) {
$_SESSION["UserID"] = $row[user_id];
$_SESSION["fname"] = $row[user_name];
} 
else {
die("This will display if the IF statement does not show TRUE.");
}

上面的die语句会向您显示错误不在会话中,但在处理MySQL输出时更多,

我重申你应该在所有数组键上使用单引号!保持一致!!

将MySQL重组为更多这种形状:

mysql_query($query) or print_r("line ".__LINE__.": ".mysql_error());

因此,如果您的MySQL代码存在任何问题,则会找到并向您显示。大部分编程都是关于找到错误的来源,而不是错误本身。

答案 1 :(得分:0)

您必须在session_start();

的开头使用profile.php

答案 2 :(得分:0)

<?php
session_start();
$message="";
if(count($_POST)>0) {
$conn = mysql_connect("**.***.***.***", "*********", "*********");
mysql_select_db("*********",$conn);
$result = mysql_query("SELECT * FROM WebsiteUsers WHERE user_name='" .    $_POST["fname"] . "' and password = '". $_POST["password"]."'");
 if(mysql_num_rows($result)>0) {
 $row  = mysql_fetch_array($result);
 $_SESSION["UserID"] = $row[user_id];
 $_SESSION["fname"] = $row[user_name];
 } else {
 $message = "Invalid Username or Password!";
}
}
if($_SESSION["fname"]=="") {// changed from $_SESSION['user_name'],checks if sesison is empty , will redirect to login page.
 header('Location: login.php');
}
?>

答案 3 :(得分:0)

尝试这样的事情:

    $db_result  = mysql_fetch_array($result); $row = $db_result[0];

而不是:

$row  = mysql_fetch_array($result);