在PHP中创建登录系统
有人能帮我吗?我的用户名是Blimeo,密码是“password”,但当我输入凭据时,它会像我告诉它的那样显示“拒绝访问”。我100%确信我正确配置了mySQL数据库在PHP中创建登录系统,php,login,passwords,Php,Login,Passwords,有人能帮我吗?我的用户名是Blimeo,密码是“password”,但当我输入凭据时,它会像我告诉它的那样显示“拒绝访问”。我100%确信我正确配置了mySQL数据库 <html> <body> <?php echo sha1('Blimeo'); if (isset($_REQUEST['attempt'])) { $link = mysql_connect('localhost', 'root', 'password') or die('Could n
<html>
<body>
<?php
echo sha1('Blimeo');
if (isset($_REQUEST['attempt'])) {
$link = mysql_connect('localhost', 'root', 'password') or die('Could not connect to database');
$user = mysql_real_escape_string($_POST['user']);
$password = sha1(mysql_real_escape_string($_POST['password']));
mysql_select_db('test_users');
$query = mysql_query(
"SELECT user
FROM users
WHERE user = '$user'
AND password = '$password'
") or die(mysql_error());
mysql_fetch_array($query);
$total = mysql_num_rows($query);
if ($total > 0) {
session_start();
$_SESSION['user'] = 'blah';
header('location: dashboard.php');
}
else {
echo '<br>Access denied!';
}
}
?>
<form method="post" action="login.php?attempt">
Enter your username:<input type="text" name="user"/><br/>
Enter your password:<input type="password" name="password"/><br/>
<input type="submit"/>
</form>
</body>
</html>
首先,您应该在页面的第一行开始会话
您还应该更新代码以使用PDO语句而不是mysql函数。这些都比较慢,而且容易使用mysqli
然后,需要检查返回的num行是否等于1且不大于0。这将是一个安全问题,因为您的脚本可以被操纵以返回超过1行,然后它将验证并进入安全区域
在我看来,问题在于,您的密码与数据库不匹配。回显密码的sha1,查看它是否与表匹配 脚本似乎在测试mysql_num_rows()时崩溃了
就在:
if ($total > 0)
{
也许可以尝试添加以下行进行测试,并确保$total确实大于0:
echo $total;
除此之外,请尝试测试mysql查询,以确保它将从数据库返回至少一行。更新,2016
请只使用现有的登录系统,几乎每个PHP框架都提供了现成的登录系统!绝对没有理由自己写这篇文章,因为用户身份验证是一个大话题,编写一个严肃、稳定、现代的登录解决方案需要几个月(几年)的时间
原文,自2012年起:
由于登录系统是一个安全问题,每个人都会一次又一次地犯同样的错误,我可以清楚地说:
使用专业的脚本,通过代码了解发生了什么,哈希和盐析是什么,会话可能会有什么问题
[删除过时链接]
以下是您可能需要的三个项目:
在mysql中创建数据库,然后运行以下代码:
在数据库中插入值
名称
:
姓
:
电子邮件
:
欢迎来到堆栈溢出!请不要对新代码使用mysql.*
函数。它们不再得到维护,社区已开始恢复。看到了吗?相反,你应该学习并使用或。如果你不能决定,将帮助你做出选择。如果你想学习,请注意,mysql是不推荐的。mysqli是一个更好的选择代码>在开头?我有一种感觉,你想要echosha1(“密码”)
在mysql
调用中添加一些错误处理/报告(您不应该使用,请参阅@Truth的评论),并从密码中删除mysql\u real\u escape\u字符串
,这在那里是不需要的,它可能会弄乱包含由mysql\u real\u escape\u字符串
转义的字符的密码,这不是登录页面,这是注册表格。它不会检查这样的用户是否存在。然后应该使用参数化查询来避免SQL注入。链接已过期
make database in mysql then run this code::
<table border="0" align="center" cellpadding="0" cellspacing="0" width="300">
<tr>
<td>
<form method="post" action="flogin.php">
<table width="100%" cellpadding="7" cellspacing="0" border="0">
<tr>
<td colspan="3"><center><strong>Insert Values In DataBase </strong></center><br /></td><br />
</tr>
<tr>
<td width="30%">Name</td>
<td width="10%">:</td>
<td width="60%"><input type="text" name="name" /></td>
</tr>
<tr>
<td width="30%">Last Name</td>
<td width="10%">:</td>
<td width="60%"><input type="text" name="lastname" /></td>
</tr>
<tr>
<td width="30%">Email</td>
<td width="10%">:</td>
<td width="60%"><input type="text" name="email" /></td>
</tr>
<tr>
<td colspan="3"><center><input type="submit" name="submit" /></center><br /></td>
</tr>
</table>
</form>
</td>
</tr>
</table>
<?php
mysql_connect("localhost", "root", "") or die("can not connect to database");
mysql_select_db("flogin")or die("can not connect");
if (isset($_POST['submit'])){
$name=$_POST['name'];
$lastname=$_POST['lastname'];
$email=$_POST['email'];
$query=mysql_query("INSERT INTO info(name, lastname, email)VALUES('$name', '$lastname', '$email')");
if($query){
echo "successful";
echo "<br>";
echo "<a href='insert.php'>Back to main page</a>";
}
else {
echo "error";
}
}
?>
<?php
mysql_close();
?>