我的pdo登录出现了一个空白屏幕


I am getting a blank screen on my pdo login

下面是我编写的一些代码。如果我的用户名/密码都是正确的,我会尝试登录到某个页面,但即使用户名/密码是正确的或错误的,我仍然会得到一个空白的白色页面!我有三个主要的文件,我做。Home.php、enter.php和connection.php。

这是Home.php的代码:

    <?php
session_start();
?>
<html>
<h1 align="center">Welcome To Home Page</h1>
<form method="POST">
<table border="0" align="center">
<tr>
<td>
<?php
echo $_SESSION["firstname"]; 
if($_SESSION["firstname"]==null)
{
?>
    <a href="enter.php">Login</a>
    <a href="registration.php">Registration</a>
    <a href="enter.php">Logout</a>
<?php
}
else
{
?>
<a href="enter.php">Logout</a>
<?php
}
?>
</td>
</tr>
<tr>
<td>
<img src="pix.jpg" width="500" length="500"/>
</td>
</table>
</form>
</html>

这是Enter.php的代码:

    <html>
    <form action="connection.php" method="POST">
                        <ul>
                            <li>
                                Email: 
                                <input type="text" maxlength="30" name="emails" />
                            </li>
                            <li>
                                Password : 
                                <input type="password" maxlength="30" name="passwords" />
                            </li>
                            <input type="submit" maxlength="30" name="logins" value="Login" />
                        </ul>
                    </form>
    </html>

这是Connection.php的代码:

    <?php
function getConnection(){
$db =  new PDO("mysql:host=localhost;dbname=demodatabase", "root","********");
$db ->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPION);
return $db;
$db = getConnection();
$stmt = $db->prepare("
    SELECT * FROM subscriber WHERE Email_id = :emails AND Password = :passwords
");
$stmt->bindParam(":emails"   , $users    );
$stmt->bindParam(":passwords", $passwords);
$stmt->execute();
$total = $db->rowCount();
$count = $stmt->rowCount(); 
    if ($count > 0) { 
    session_start(); 
    $_SESSION['firstname'] = 'yes'; 
    header('location: home.php'); 
    exit; 
    } 
}
?>

为什么我总是收到空白页?

查看您的代码:

    <?php
function getConnection(){
    // …
}
?>

您拥有一个函数中的所有内容,并且从不调用该函数。这里需要一个大括号:

function getConnection(){
    $db =  new PDO("mysql:host=localhost;dbname=demodatabase", "root","********");
    $db ->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPION);
    return $db;
}  // here
$db = getConnection();

正确地缩进代码会有所帮助。

顺便说一下,很明显,您将密码存储为纯文本永远不要那样做使用一个好的密码哈希算法来哈希密码!

此外,在某些内容已发送到浏览器之后使用session_startheader是无用的。注意<?php前面不需要的空格。