php登录脚本未正确显示[重复]
Posted
技术标签:
【中文标题】php登录脚本未正确显示[重复]【英文标题】:php login script not displaying correctly [duplicate] 【发布时间】:2017-06-02 03:52:40 【问题描述】:所以我创建了一个user_login.php页面(由html组成,一个登录表单),表单是:
<form method="post" action="scripts/login.php">
<p>Username: <input type="text" name="Username" /></p>
<p>Password: <input type="password" name="Password" /></p>
<p><input type="submit" value="Sign In" /></p>
</form>
除此之外,我还有一个 login.php 脚本(见下文)
<?php
include "scripts/connection.php";
session_start();
if($_SERVER["REQUEST_METHOD"] == "POST")
// username and password sent from form
$myusername = mysqli_real_escape_string($link,$_POST['Username']);
$mypassword = mysqli_real_escape_string($link,$_POST['Password']);
$sql = "SELECT * FROM Customer WHERE Customer_Username = '$myusername' and Customer_Password = '$mypassword'";
$result = mysqli_query($link,$sql);
$row = mysqli_fetch_array($result,MYSQLI_ASSOC);
$active = $row['active'];
$count = mysqli_num_rows($result);
// If result matched $myusername and $mypassword, table row must be 1 row
if($count == 1)
$_SESSION['Username'] = $myusername;
header("location: Welcome.php");
else
$error = "Your Username or Password is invalid";
?>
现在我知道我的 connection.php 可以正常工作,因为我在网站的其他地方使用它。
我的问题是,当我在浏览器中浏览 user_login.php 页面时,当我点击“登录”按钮时,它会将我带到 www.website.com/login.php 文件,但整个页面是空白(白色)。 无论我在用户名和密码字段中输入内容还是将它们留空,都会发生这种情况。
显然我需要的是,如果字段为空白或与数据库中的记录不匹配,则会显示错误消息。如果登录名匹配,则会将它们重定向到 Welcome.php 文件。
如果 login.php 脚本缺少任何内容,则不是 100%,因此我们将不胜感激。
更新
添加后:
session_start();
error_reporting(E_ALL);
ini_set('display_errors', 1);
include "scripts/connection.php";
在我的代码顶部,我现在收到一条很长的错误消息,而不是纯白屏幕:
警告:include(scripts/connection.php):打开流失败:第 5 行的scripts/login.php 中没有这样的文件或目录
警告:include():在第 5 行的 scripts/login.php 中打开 'scripts/connection.php' 以包含 (include_path='.:/usr/share/php:/usr/share/pear') 失败
注意:未定义变量:第 10 行脚本/login.php 中的链接
警告:mysqli_real_escape_string() 期望参数 1 为 mysqli,在第 10 行的 /scripts/login.php 中给出 null
注意:未定义变量:第 11 行 /scripts/login.php 中的链接
警告:mysqli_real_escape_string() 期望参数 1 为 mysqli,在第 11 行的 /scripts/login.php 中给出 null
注意:未定义变量:第 14 行 /scripts/login.php 中的链接
警告:mysqli_query() 期望参数 1 为 mysqli,在第 14 行的 /scripts/login.php 中给出 null
警告:mysqli_fetch_array() 期望参数 1 为 mysqli_result,在第 15 行的 /scripts/login.php 中给出 null
警告:mysqli_num_rows() 期望参数 1 为 mysqli_result,在第 18 行的 /scripts/login.php 中给出 null
【问题讨论】:
永远不要存储纯文本密码!请使用 PHP 的 built-in functions 来处理密码安全问题。如果您使用低于 5.5 的 PHP 版本,您可以使用password_hash()
compatibility pack。在散列之前,请确保您 don't escape passwords 或对它们使用任何其他清理机制。这样做会更改密码并导致不必要的额外编码。
Little Bobby 说 your script is at risk for SQL Injection Attacks. 了解 prepared 对 MySQLi 的声明。即使escaping the string 也不安全! Don't believe it?
在打开<?php
标签error_reporting(E_ALL); ini_set('display_errors', 1);
后立即将错误报告添加到文件顶部
你的$_SERVER["REQUEST_METHOD"]
是什么?你有回应吗?
@JayBlanchard 抱歉,当您问它是什么时?你的意思是?新手不好意思....
【参考方案1】:
如果您的 scripts/connection.php 与您的 login.php 位于同一文件夹中,则包含应该只是
include "connection.php";
有一件事,你的session_start();
必须是你的php 中的第一行,然后才包含脚本。这可能会引发错误(您看不到),因此页面是空白的。
在session_start()
之后添加这个,然后重新加载页面。所以顶部的完整代码应该如下所示
session_start();
error_reporting(E_ALL);
ini_set('display_errors', 1);
include "scripts/connection.php";
更新
要排除故障,请删除此部分
if($count == 1)
$_SESSION['Username'] = $myusername;
header("location: Welcome.php");
试试这个
if($count == 1)
echo "It WORKS";
这将允许您查看是否满足此条件,如果满足,则重定向是问题
【讨论】:
感谢您的回复,刚刚添加进来,同样的事情发生了。没有任何区别 :( 抱歉,刚刚重新加载了页面,我现在看到一个以警告开头的巨大错误:include(scripts/connection.php): failed to open stream: No such file or directory in /www/scripts/login第 5 行的 .php 警告:include(): 未能打开“scripts/connection.php”以包含 (include_path='.:/usr/share/php:/usr/share/pear') – Tipping44 4 分钟前编辑 完全取出会话开始以查看页面是否显示,甚至没有显示错误的事实令人担忧,您的 php 设置中的某些内容似乎关闭,如果可以的话,也发布您新编辑的完整编码 header('位置:example.com/');应该在任何输出之前先。所有这些都与你看不到的 php 抛出错误有关(白页) 您的意思是让我也将其重新定位到我的页面顶部吗?如果是这样,只要我点击我的“user_login.php”页面(就像用户正在登录一样)它会立即将我重定向到“welcome.php”。 我已经更新了我的答案,看看,解决它死的地方,试试上面。是的,我的意思是编辑您的原始问题并提供所有代码,如果可以的话,标题注释是为了替换您稍后在文件中的标题,在同一位置,抱歉造成混淆以上是关于php登录脚本未正确显示[重复]的主要内容,如果未能解决你的问题,请参考以下文章