【发布时间】:2014-06-12 13:06:22
【问题描述】:
我想制作一个 PHP 登录脚本,当用户登录时,它会删除登录表单,其中另一个 div 显示“欢迎 [user_name]”。我在与我的 html 相同的页面上运行脚本,但查询总是失败。谁能解决这个问题,为什么会这样?
PHP 代码:
<?php include("connect.php")?>
<?php
session_start();
//Function to sanitize values received from the form. Prevents SQL injection
function clean($str) {
$str = @trim($str);
if(get_magic_quotes_gpc()) {
$str = stripslashes($str);
}
return mysql_real_escape_string($str);
}
if(isset($_POST['username']) && isset($_POST['username'])){
//Sanitize the POST values
$UserName = clean($_POST['username']);
$Password =(md5($_POST['password']));
//Create query
$qry = "SELECT 'UserName' , 'Password' FROM users WHERE UserName='$UserName' AND Password='$Password'";
$result = mysql_query($qry);
//Check whether the query was successful or not
if($result) {
if(mysql_num_rows($result) > 0) {
//Login Successful
session_regenerate_id();
$member = mysql_fetch_assoc($result);
$_SESSION['SESS_MEMBER_ID'] = $member['mem_id'];
$_SESSION['SESS_FIRST_NAME'] = $member['FName'];
$_SESSION['SESS_LAST_NAME'] = $member['LName'];
//session_write_close();
echo 'SUCCESS';
//loggedin();
//exit();
}
else {
//Login failed
echo 'FAILED.';
//loginfail();
//exit();
}
}
else {
die("Query failed");
}
}
?>
HTML 代码:
<form name="user-form" id="user-form" action="members.php" method="POST">
<input type="text" name="username" id="username" placeholder="Username"></input>
<input type="password" name="password" id="password" placeholder="Password"></input>
<br/>
<input type="submit" id="sign" name="Sign In"></input>
</form>
您的帮助将不胜感激,因为我是新手。
【问题讨论】:
-
删除列名中的所有单引号。
SELECT 'UserName' , 'Password'应该是SELECT UserName , Password -
你应该绑定变量,而不是清理,见这里:stackoverflow.com/questions/4364686/…
-
@AbhikChakraborty 是正确的,如果您愿意,可以将它们切换为 ``` 反引号。
-
这个问题似乎离题了,因为 SO 不是我们为您“解决这个问题”的帮助台。
-
另外说明:请不要使用 md5 对密码进行哈希处理。 md5坏了。此外,这些哈希算法旨在快速运行,这意味着如果您的数据库受到破坏,蛮力攻击更有可能成功。您应该使用 bcrypt (或类似的)。另见:stackoverflow.com/questions/4795385/…