(这是我第一次尝试使用php)
我有一个非常基本的注册页面。 http://graves-incorporated.com/test_sites/member_test/register/register.php
* 我只记得PHP代码没有显示在源代码中,所以这里是:
enter code here
<?php
include('connection.php');
if(isset($_POST['form'])){
if(empty($_POST['username']) || empty($_POST['password']) || empty($_POST['conf_pass']) || empty($_POST['email'])){
echo '<b>Please fill out all fields.</b>';
}elseif($_POST['password'] != $_POST['conf_pass']){
echo '<b>Your Passwords do not match.</b>';
}else{
$url = 'http://graves-incorporated.com/test_sites/plantation_park_2012/';
echo '<META HTTP-EQUIV=Refresh CONTENT="2; URL='.$url.'">';
echo '<b>Congrats, You are now Registered.</b>';
mysql_query("INSERT INTO users VALUES(NULL, '$_POST[username]', '$_POST[password]', '$_POST[email]')");
}
}
?>
我想确保我没有在数据库中获得重复的用户和/或电子邮件地址。我在MySQL中为用户名和电子邮件设置了一个唯一密钥,这可以阻止它,但实际表单上的用户不知道,它仍然告诉他们“恭喜,你已经注册”或者其他任何说法......哈哈
那么我可以添加什么来阻止这个PHP代码(以及代码中的位置?)
感谢您帮助这个主要的菜鸟, 丹格雷夫斯
答案 0 :(得分:5)
<?php
include('connection.php');
if(isset($_POST['form'])){
if(empty($_POST['username']) || empty($_POST['password']) || empty($_POST['conf_pass']) || empty($_POST['email'])){
echo '<b>Please fill out all fields.</b>';
}elseif($_POST['password'] != $_POST['conf_pass']){
echo '<b>Your Passwords do not match.</b>';
}else{
$dup = mysql_query("SELECT username FROM users WHERE username='".$_POST['username']."'");
if(mysql_num_rows($dup) >0){
echo '<b>username Already Used.</b>';
}
else{
$url = 'http://graves-incorporated.com/test_sites/plantation_park_2012/';
echo '<META HTTP-EQUIV=Refresh CONTENT="2; URL='.$url.'">';
$sql = mysql_query("INSERT INTO users VALUES(NULL, '$_POST[username]', '$_POST[password]', '$_POST[email]')");
if($sql){
echo '<b>Congrats, You are now Registered.</b>';
}
else{
echo '<b>Error Registeration.</b>';
}
}
}
}
?>
答案 1 :(得分:1)
您使用的是哪个数据库驱动程序?你在寻找数据库错误吗?他们中的一些人很乐意驾驭任何数据库错误,你必须专门调用一个函数来检查数据库错误。您的数据库应该在重复数据上引发错误,您可以选择该错误并提醒用户。
答案 2 :(得分:1)
从用户界面的角度来看,我认为如果他们能够通过ajax请求检查是否存在db中的用户名,那将会很棒,就像可用性检查器一样。
如果您隔离检查用户名可用性的过程而不是处理所有内容,只是为了找出用户名不可用,它还可以节省您的CPU时间。
要通过jquery这样做,我建议:
$('#checkAvailabilityButton').click(function() {
var usernameVal = $('#usernameField').val(); // assuming this is a input text field
$.post('checkusername.php', {username=usernameVal}, function(data) {
alert('data');
});
});
在你的php端运行一个对你的数据库的查询,如下所示:
"SELECT Username FROM users WHERE Username = 'POSTVALUE'"
if (mysql_num_rows > 0) {
echo "Username is taken"
}
另外要非常小心,不要将未经过修改的post变量放入数据库以防止SQL注入。
最后,尝试使用更好的PHP数据库扩展,如MySQLi,大多数STMT请求通过mysqli_prepare自动清理变量。
祝你好运!答案 3 :(得分:0)
您可以在提交检查/阻止之前使用ajax查询 在INSERT INTO之后的后端...你可以执行SELECT FOUND_ROWS()来检查它是否实际上等于1,这意味着插入了一行。 然后将用户重定向到错误页面,其中包含不正确的信息。 为了获得更好的用户体验,我建议使用第一个选项,使用JQuery不需要花费很多时间来实现。