0
我想用下面的代码来创建一个登录表单。问题是在我尝试登录时注册后,即使电子邮件&密码正确,也会收到错误消息“用户名或密码不匹配”。我尝试了“$ num < = 1”,并允许我登录,但显然它并未验证登录信息。任何帮助将不胜感激。最重要的是,这段代码在像XAMPP这样的本地服务器上工作正常,但是在使用像hostgator这样的主机服务器时出现问题(与服务器连接时没有问题)。用PHP登录表单问题
<?php
session_start(); // Starting Session
#Database connection
include('../config/connection.php');
$error=''; // Variable To Store Error Message
if (isset($_POST['submit']))
{
if (empty($_POST['email']) || empty($_POST['password'])) {
$error = '<p class="alert alert-danger">One or either field is missing</p>';
}
else
{
// Define $username and $password
$email=$_POST['email'];
$password = $_POST['password'];
// To protect MySQL injection for Security purpose
$email = stripslashes($email);
$email = mysql_real_escape_string($email);
// SQL query to fetch information of registerd users and finds user match.
$q = "SELECT * FROM users WHERE email = '$email' AND password = md5(SHA1('$password'))";
$r = mysqli_query($dbc, $q)or die(mysqli_error());
$num = mysqli_num_rows($r);
if($num ==1){
$_SESSION['username'] = $email;
header('Location:Index.php');
} else {
$error = '<p class="alert alert-danger">Username or Password don\'t match</p>';
}
mysqli_close($dbc); // Closing Connection
}
}
?>
'MD5(SHA1( '$密码'))'这不看的权利。你不能像这样在字符串中使用函数。首先将它分配给一个变量。 - 你也容易受到SQL注入攻击,请看[如何防止PHP中的SQL注入?](http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection -in-PHP)。 - 'mysql_real_escape_string'将不起作用(因为您正在使用'mysqli_'),并且不足以过滤用户数据。 – Qirel
调出一个MySQL控制台,看看'SELECT md5(SHA1('Your Password'))'是否与数据库中的内容匹配。此外,您的密码中的报价可能会破坏您的查询 –
由于Qirel会记住这一点。 –