【发布时间】:2016-11-06 09:27:17
【问题描述】:
我正在用 php 创建一个非常简单的注册表单,目前当用户尝试注册时,会弹出一个带有成功或失败消息的 javascript 警报。
现在我想捕获 sql 异常以显示数据库中是否已经存在用户名或电子邮件,而不是标准的失败消息。
这是我目前的代码:
if(isset($_POST['btn-signup']))
{
$uname = mysql_real_escape_string($_POST['uname']);
$email = mysql_real_escape_string($_POST['email']);
$upass = md5(mysql_real_escape_string($_POST['pass']));
if(mysql_query("INSERT INTO user(username,password,email) VALUES('$uname','$upass','$email')"))
{
?>
<script>alert('successfully registered ');</script>
<?php
}
else{
?>
<script>alert('error while registering you...');</script>
<?php
}
}
?>
如何检查电子邮件或用户名是否已存在于数据库中?这两个变量在数据库中已经是唯一的。
【问题讨论】:
-
请不要将
md5()用作密码,尤其是未加盐的密码。 -
请不要自己滚动密码散列。 PHP 提供了
password_hash()和password_verify()请使用它们,我可能有一天会想使用你的网站这里有一些good ideas about passwords 如果你使用的是5.5 之前的PHP 版本there is a compatibility pack available here -
@LesleyPeters 它本身并不安全。至少确保您bind your parameters。
-
除了弱
md5(mysql_real_escape_string(input))还很奇怪——先转义然后 md5?暗示误解,或抄袭。