新程序员 - 我创建了一个将用户添加到数据库的功能。此功能可在USER类中找到。我已经设置了mysql以将user_name作为唯一键。如果用户尝试输入已存在的名称,则不会将其输入到mysql数据库中,但我的表单显示确定已提交,只是移动到下一页。我想让用户知道该名称已存在,并在注册表单上创建错误。有没有办法将其附加到此函数?
function add_member($name, $email, $password)
{
global $mysqli;
$query = "INSERT INTO members
SET
user_name = '".addslashes($name)."',
user_email = '".addslashes($email)."',
password = '". md5($password) ."'";
$success = $mysqli->query ($query);
if (!$success || $mysqli -> affected_rows == 0)
{
echo "<p> An error occurred: you just are not tough enough!!! </p>";
return FALSE;
}
$uid = $mysqli -> insert_id;
return $uid;
if (!$found_error)
{
header("location: homepage.php");
}
答案 0 :(得分:0)
在用户输入所需的用户名以检查其是否可用后,为什么不进行Ajax调用?更确切地说,它可能是这样的:
<form id="registration_form" action="register">
<input id="username" type="text" onchange="checkAvailability();"/>
<div id="availability"></div>
</form>
<script type="text/javascript>
function checkAvailability()
{
$.ajax({
type: "GET",
url: "checkAvailability.php",
data: $("username").val(),
success: function(response) {
var status = $(response).find('status').text();
if (status == 'failed') $("#availability").html("This username is not available!");
else $("#availability").html("This username is available!");
},
dataType: "xml"
});
}
</script>
答案 1 :(得分:0)
你很接近,但不是仅仅进行插入,而是先尝试通过对名称进行选择来检查用户。如果记录计数大于零,您就知道它已经存在。
然后要么提出javascript警报,要么将其发送到另一页(如果已经存在),否则继续执行插入操作。这样你就不依赖于数据库为你做检查,然后你可以更好地控制接下来发生的事情。
祝你好运和HTH - 乔
答案 2 :(得分:0)
为了防止重定向,您必须通知您的前端有错误。
只要用户点击“提交”,您的表单就会始终尝试“转到下一页”。它将执行任何设置的操作。
在该操作中(我假设是该过程的下一页),您应该让页面处理错误 - 即:
<?php //results.php
if(false === add_member($name, $email, $password)){
//you may want to write code that sends post data with error type here...
header("location:create_user.php");
}
?>
请注意,使用标题重定向有点不太优雅,但是如何处理错误的最佳做法超出了这个问题的范围......
我的观点是,您必须在结果页面上捕获错误,并让该页面处理失败的尝试。