用户登录mysql php多会话当我登录时,在主页上看不到任何内容
我想登录(php,mysql)。我已经登录,注册,注销,home.php。问题是,当我登录主页时,没有显示任何内容。我想让两个不同的用户登录,登录后必须创建一个名为username的表 我希望有多个用户,当他们登录时,他们有自己的信息表,其他用户看不到 我的代码: MySQL Login.php用户登录mysql php多会话当我登录时,在主页上看不到任何内容,php,mysql,session,Php,Mysql,Session,我想登录(php,mysql)。我已经登录,注册,注销,home.php。问题是,当我登录主页时,没有显示任何内容。我想让两个不同的用户登录,登录后必须创建一个名为username的表 我希望有多个用户,当他们登录时,他们有自己的信息表,其他用户看不到 我的代码: MySQL Login.php <?php session_start(); if($_SESSION['user']!=''){ header("Location:home.php"); } $dbh=new PDO(
<?php
session_start();
if($_SESSION['user']!=''){
header("Location:home.php");
}
$dbh=new PDO('mysql:dbname=db;host=127.0.0.1', 'username', 'password');
$email=$_POST['mail'];
$password=$_POST['pass'];
if(isset($_POST) && $email!='' && $password!=''){
$sql=$dbh->prepare("SELECT id,password,psalt FROM users WHERE username=?");
$sql->execute(array($email));
while($r=$sql->fetch()){
$p=$r['password'];
$p_salt=$r['psalt'];
$id=$r['id'];
}
$site_salt="subinsblogsalt";
$salted_hash = hash('sha256',$password.$site_salt.$p_salt);
if($p==$salted_hash){
$_SESSION['user']=$id;
header("Location:home.php");
}else{
echo "<h2>Username/Password is Incorrect.</h2>";
}
}
?>
home.php
<html><head></head>
<body>
<?
session_start();
if($_SESSION['user']==''){
header("Location:login.php");
}else{
$dbh=new PDO('mysql:dbname=db;host=127.0.0.1', 'root', 'backstreetboys');
$sql=$dbh->prepare("SELECT * FROM users WHERE id=?");
$sql->execute(array($_SESSION['user']));
while($r=$sql->fetch()){
echo "<center><h2>Hello, ".$r['username']."</h2></center>";
}
}
?>
</body>
</html>
您是否允许在PHP.ini文件中使用短PHP标记,因为您显然在home.PHP中使用短标记,而不是login.PHP。这可能导致空白页问题。此外,在
session\u start()
函数之前,您不应该有任何输出。试试这个:
<?php session_start(); ?>
<html>
<head></head>
<body>
<?php
if($_SESSION['user']==''){
header("Location:login.php");
}else{
$dbh=new PDO('mysql:dbname=db;host=127.0.0.1', 'root', 'backstreetboys');
$sql=$dbh->prepare("SELECT * FROM users WHERE id=?");
$sql->execute(array($_SESSION['user']));
while($r=$sql->fetch()){
echo "<center><h2>Hello, ".$r['username']."</h2></center>";
}
}
?>
</body>
</html>
编辑:
另外,将用户需要的所有信息存储在会话中,而不是在home.php中进行另一个SQL查询,这样会更好吗
Login.php
<?php
session_start();
if($_SESSION['user']!=''){
header("Location:home.php");
}
$dbh=new PDO('mysql:dbname=db;host=127.0.0.1', 'username', 'password');
$email=$_POST['mail'];
$password=$_POST['pass'];
if(isset($_POST) && $email!='' && $password!=''){
$sql=$dbh->prepare("SELECT id,password,psalt FROM users WHERE username=?");
$sql->execute(array($email));
while($r=$sql->fetch()){
$p=$r['password'];
$p_salt=$r['psalt'];
$id=$r['id'];
}
$site_salt="subinsblogsalt";
$salted_hash = hash('sha256',$password.$site_salt.$p_salt);
if($p==$salted_hash){
$_SESSION['user']=$id;
header("Location:home.php");
}else{
echo "<h2>Username/Password is Incorrect.</h2>";
}
}
?>
home.php
<html><head></head>
<body>
<?
session_start();
if($_SESSION['user']==''){
header("Location:login.php");
}else{
$dbh=new PDO('mysql:dbname=db;host=127.0.0.1', 'root', 'backstreetboys');
$sql=$dbh->prepare("SELECT * FROM users WHERE id=?");
$sql->execute(array($_SESSION['user']));
while($r=$sql->fetch()){
echo "<center><h2>Hello, ".$r['username']."</h2></center>";
}
}
?>
</body>
</html>
你真的不应该在密码哈希上使用你自己的盐,你真的应该使用PHP来处理密码安全性。如果您使用的PHP版本低于5.5,您可以使用密码\u哈希()
。在使用sql->fetch
之前,您可能需要调用$sql->get\u result
或存储\u result
然后使用fetch()@user5871514,代码显示PDO
,而不是mysqli
。这就是为什么我在PDO的页面上找不到关于它的任何内容…我的错,你是对的,你已经在home.php中完成了这部分,在会话开始之前你有了一些输出。但是在进行任何输出之前,会话启动应该在第一行完成。也许这是你的问题,伙计们,这很有效!我还有更多的问题。Im正在创建一个门户,用户在其中登录并只查看指定的数据(连接到存储其输入的自己的表)。。在同一时间另一个用户登录,必须看到不同的内容。我的目标是让不同的用户看到他们自己的内容。登录后,它们将输入存储在数据库中。用户可以看到自己的输入-只有用户指定的输入。如果有人能给我指出正确的方向,那就太可怕了。Tnx为previus提供答案和帮助。那么好吧。。如果它有效,也许你可以将它标记为一个可接受的答案仅仅显示当前登录用户的信息并没有什么不同。只需执行一个select语句查询,从中获取所有希望使用where子句显示的信息,并为where子句指定当前登录用户id的值。
<?php session_start(); ?>
<html>
<head></head>
<body>
<?php
if($_SESSION['user']==''){
header("Location:login.php");
} else {
echo "<center><h2>Hello, ".$_SESSION['username']."</h2></center>";
}
?>
</body>
</html>