我正在尝试显示带有用户名的欢迎消息。我已经设置了一个会话,一切正常,但我不能让用户名出现在"欢迎"旁边。我读了很多帖子,大多数建议都是要求在echo
之前添加session_start();
。还是没什么。。
如果有人能帮我的话,下面是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,这是一个基本的测试。
感谢您提供任何信息。祝你今天愉快!
更新:
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");
}
?>
您需要引用数组键,例如:
$_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_,因为现在已弃用,不应再使用它。
在
header
重新定位呼叫后添加exit;
。因为在重新定位头调用运行之前,脚本的其余部分仍将执行,所以您需要告诉脚本在到达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代码有任何问题,就会找到并显示给您。大部分编程都是为了找到错误的来源,而不是错误本身。
试试这样的东西:
$db_result = mysql_fetch_array($result); $row = $db_result[0];
而不是:
$row = mysql_fetch_array($result);
<?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');
}
?>
您必须在profile.php
的开头使用session_start();