【发布时间】:2018-08-02 08:24:40
【问题描述】:
我只能在我的数据库中插入一个数据,然后我刷新并尝试插入另一个数据,它只会显示“无法注册!请再试一次!'下面是我的代码有什么问题? :
<?php
include "conn.php"; // connection
$username = $_POST['user'];
$password = $_POST['pass'];
$confirmpassword = $_POST['confirmpass'];
$email = $_POST['email'];
if($password !== $confirmpassword) { echo "<script>alert('Password and confirmed password not same!'); ";
die("window.history.go(-1);</script>"); }
//write the insert sql query
$sql = "Insert into users (User_Name, User_Password, User_Email, User_Last_login ) VALUES ('$username','".md5($password)."','$email','".date("Y-m-d H:i:s")."');";
//to check the query executed or not
mysqli_query($conn, $sql);
if(mysqli_affected_rows($conn) <=0)
{
die ("<script>alert('Unable to register! \\nPlease Try Again!');window.history.go(-1);</script>");
}
echo "<script>alert('Register Successfully!Please login now!');window.history.go(-1);</script>";
echo "window.location.href='login.html';</script>";
?>
我已经尝试解决这个问题几个小时尝试了其他问题的解决方案但仍然无法正常工作,我仍然只能插入 1 个数据,之后它一直显示无法注册!请再试一次!
【问题讨论】:
-
不要使用
md5()进行密码散列。 这是非常不安全的。请改用 PHP 的password_hash()和password_verify()。如果您运行的 PHP 版本低于 5.5(我真的希望您不是),您可以使用 password_compat library 来获得相同的功能。 -
也不需要转义密码,因为无论如何您只存储哈希值。转义密码实际上会更改密码。
-
警告:编写自己的访问控制层并不容易,而且有很多机会会严重错误。当任何现代development framework(如Laravel)带有强大的authentication system 内置时,请不要编写自己的身份验证系统。至少遵循recommended security best practices 并且永远不要将密码存储为纯文本 或像 SHA1 或 MD5 这样的弱散列。
-
你在哪里找到这个代码?你能在伤害别人之前把它放回去吗?这里有很多根本错误的东西,甚至很难开始解释,但我已经在上面标记了三个最严重的问题。一个由 ORM 支持的正确登录系统不是那种你可以在没有相当经验的情况下自己编写的东西,即使这样,当预先存在的解决方案工作、经过测试、并获得社区支持。
-
嗨,伙计,我建议您检查一下您是否只能插入一行,然后再添加另一行。是检查您的 SQL 数据库并确保您没有将任何字段设置为唯一。唯一适用于 ID,因为它们会自动递增。但如果它是另一个领域,它可能会导致并发症。我希望这会有所帮助。祝你好运:)