PHP -验证用户是否存在于数据库中,并显示结果,而无需重新加载页面


PHP - verify if user exist in DB and display the result without reloading the page

我想检查用户是否存在于DB中,如果存在,则显示一些错误而无需重新加载页面(修改div)。你知道这段代码有什么问题吗?或者有其他方法吗?谢谢你

HTML:
<div style="width:510px; height:500px;">
<div class="message">
<div id="alert"></div>
</div>
<form id="signup_form" method="post" action="register.php">
<label class="label">username</label>
<p><input class="signup_form" type="text" name="username"></p>
<label class="label">parola</label>
<p><input class="signup_form" type="text" name="password"></p>
<label class="label">name</label>
<p><input class="signup_form" type="text" name="name"></p>
<label class="label">telefon</label>
<p><input class="signup_form" type="text" name="phone"></p>
<label class="label">email</label>
<p><input class="signup_form" type="text" name="email"></p>
<p><input class="signup_button"  type="submit" value="inregistrare">
</form>
<div class="clear"></div>
</div>

register.php

<?php
include "base.php"; 
$usertaken = '<li class="error">username used</li><br />';
$alert = '';
$pass = 0;
if(!empty($_POST['username']) && !empty($_POST['password']))
{
$username = mysql_real_escape_string($_POST['username']);
$password = md5(mysql_real_escape_string($_POST['password']));
$name = mysql_real_escape_string($_POST['username']);
$phone = mysql_real_escape_string($_POST['phone']);
$email = mysql_real_escape_string($_POST['email']);

 $checkusername = mysql_query("SELECT * FROM details WHERE user = '".$username."'");
 if(mysql_num_rows($checkusername) == 1)
 {
    $pass = 1;
    $alert .="<li>" . $usertaken . "</li>";
 }
 else
 {
    $registerquery = mysql_query("INSERT INTO details (user, pass, name, phone, email) VALUES('".$username."', '".$password."','".$name."','".$phone."', '".$email."')");
    if($registerquery)
    {
        echo "<h1>Success</h1>";
        echo "<p>Your account was successfully created. Please <a href='"index.php'">click here to login</a>.</p>";
    }
    else
    {
        echo "<h1>Error</h1>";
        echo "<p>Sorry, your registration failed. Please go back and try again.</p>";    
    }       
 }
 if($pass == 1) {
    echo '<script>$(".message").hide("").show(""); </script>';
    echo "<ul>";
    echo $alert;
    echo "</ul>";
 }
}
        ?>

解决方案(将此添加到头部并隐藏。messagediv)

<script type="text/javascript" src="jquery-latest.pack.js"></script>
<script type="text/javascript" src="jquery.form.js"></script>
<script type="text/javascript">
$(document).ready(function() { 
var options = { 
target:        '#alert',
beforeSubmit:  showRequest,
success:       showResponse
}; 
$('#signup_form').ajaxForm(options); 
}); 
function showRequest(formData, jqForm, options) { 
var queryString = $.param(formData); 
return true; 
} 
function showResponse(responseText, statusText)  {  
} 
$.fn.clearForm = function() {
  return this.each(function() {
var type = this.type, tag = this.tagName.toLowerCase();
if (tag == 'form')
  return $(':input',this).clearForm();
if (type == 'text' || type == 'password' || tag == 'textarea')
  this.value = '';
else if (type == 'checkbox' || type == 'radio')
  this.checked = false;
else if (tag == 'select')
  this.selectedIndex = -1;
  });
};
</script>

您需要使用AJAX进行动态页面更新。

看看这里:http://api.jquery.com/jQuery.ajax/关于如何使用jQuery实现它。

当前代码使用表单提交,它总是重新加载页面。

您需要使用ajax。在JavaScript中编写如下代码:

 var xmlHttp;
 function checkUser(user) {
   xmlHttp=GetXmlHttpObject();
   if (xmlHttp==null) {
     alert ("Browser does not support HTTP Request.");
     return;
   }
   var url = "check.php"; //This is where your dynamic PHP file goes
   url = url + "?u=" + user;
   url = url + "&sid=" + Math.random();
   xmlHttp.onreadystatechange = getData;
   xmlHttp.open("GET",url,true);
   xmlHttp.send(null);
 }
 function getData () {
   if (xmlHttp.readyState == 4 || xmlHttp.readyState == "complete") {
     if (xmlHttp.responseText == 1) {
           alert('Username free'); //action if username free
         } else {
           alert('This username is taken'); //action if its not
         }
   }
 }
   function GetXmlHttpObject() {
   var xmlHttp=null;
   try {
    // Firefox, Opera 8.0+, Safari
    xmlHttp=new XMLHttpRequest();
   } catch (e) {
     //Internet Explorer
     try {
       xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
     } catch (e) {
       xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
     }
   }
   return xmlHttp;
 }

在你的check.php文件中,检查你的数据库用户名是否被占用,如果没有,简单的echo('1')如果它是免费的,否则echo('0')或任何你想要的。该号码将作为xmlHttp.responseText处理。你也可以做一些花哨的东西来代替提醒,比如图片。此外,您还需要在用户输入或提交表单时运行check()函数,并将username表单字段作为参数。希望对你有帮助。

编辑:哦,我还忘记了在check.php文件中,$_GET['u']变量包含输入的用户名。

如果这些都在一个页面中,你必须这样组织它:

<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
   ... do form retrieval/database stuff here ...
   if (error) {
      $message = 'Something dun gone boom';
   }
}
if ($message != '') {
   echo $message;
}
?>
form stuff goes here