Echo没有显示

时间:2014-09-19 20:12:59

标签: php mysql

在我的登录页面上,如果有人使用正确的detials登录,他们会转到我的main.php,如果他们没有正确的详细信息,他们应该会显示错误消息,但它会变成空白屏幕!

试图解决这个问题

<?php error_reporting(E_ALL); ini_set('display_errors', 1); 
session_start(); // Starting Session
include("connect.php");
$error=''; // Variable To Store Error Message
if (isset($_POST['login'])) {
$username = $_POST['username'];
if ($username == "") {
echo "Username field is empty!"; 
header("Location: incorrectlogin.php");
}else{
// Define $username and $password
$username=$_POST['username'];
$password=$_POST['password'];
// To protect MySQL injection for Security purpose
$username = stripslashes($username);
$password = stripslashes($password);
$username = mysqli_real_escape_string($con,$username);
$password = mysqli_real_escape_string($con,$password);
// Establishing Connection with Server by passing server_name, user_id and password as a parameter
$connection = mysqli_connect("localhost", "root", "", "game");
// Selecting Database
$db = mysqli_select_db($con,"game");
$query = mysqli_query($con,"select * from users where password='$password' AND     username='$username'");
$rows = mysqli_num_rows($query) or die(mysqli_error($con));
if ($rows == 1) {
$_SESSION['login_user']=$username; 
header("location: main.php"); 
} else {
echo "That username or password is incorrect";
$error = "Username or Password is invalid";
}
}
}

它可能只是我,但看起来它应该工作,任何想法?

2 个答案:

答案 0 :(得分:2)

问题在于此处的错误处理(具有讽刺意味)添加到mysqli_num_rows()

 $rows = mysqli_num_rows($query) or die(mysqli_error($con));

mysqli_num_rows()返回0(未找到任何行)时,此处会触发or die()。由于没有错误,因此mysqli_error()没有输出。

返回的零行不是错误状态,因此不适合向其添加错误处理。您已经在处理随后返回的行计数:

if ($rows == 1) {
  // etc...
}

...这样您就可以安全地删除or die(...)。在前一次调用mysqli_query()时使用该错误处理表达式会更合适,如果SQL字符串无效,则实际上会发生错误。

如果我没有提到以纯文本格式存储用户密码的问题,我也会失职,因为这意味着:

$password = mysqli_real_escape_string($con,$password);

我建议您查看How do you use bcrypt for hashing passwords in PHP,了解如何提高密码存储安全性的真正优秀示例。

答案 1 :(得分:0)

我认为您缺少if声明,可以将整个代码(或)上面和下面几行代码粘贴到代码