2

我正在创建一个注册表单。用户输入用户名和密码,然后按提交,使用 POST 提交表单。HTML:

<link href="Styles/RegisterStyles.css" rel="stylesheet" type="text/css" />
<form id="frmRegister" method="post" action="register.php">
  <h1>Register</h1>
    <table width="100%">
      <tr>
        <td width="16%"><label class="alignRight"> Username: </label></td>
        <td width="84%"><input name="txtUsername" type="text" maxlength="40" /></td>
      </tr>

      <tr>
        <td width="16%"><label class="alignRight"> Password: </label></td>
        <td width="84%"><input name="txtPassword" type="text" maxlength="40" /></td>
      </tr>

      <tr>
        <td width="16%">&nbsp;</td>
        <td width="84%"><input name="Submit" class="submitButton" type="submit" /></td>        
      </tr>

    </table>
</form>
</html>

PHP:

$username = $_POST["txtUsername"];
$password = $_POST["txtPassword"];
//Code to connect to database

function doesUsernameExist($username)
{
    //return true if username exists or false otherwise
}

现在,在 PHP 中,我运行一个查询来检查用户名是否存在于数据库中。如果用户名已经存在,如何在不导航到另一个页面并导致“用户名”和“密码”字段重置为空白的情况下通知用户?

一些注册表单有一个非常简洁的 Javascript,可以在您每次按下键盘上的键时检查用户名是否存在。关于如何实施的任何想法?从我能收集到的信息中,使用 JavaScript 连接到数据库是困难的(也是不好的做法)。

4

4 回答 4

3

我使用 jQuery 来做这样的事情。

在html中

<input type="text" name="username" onBlur="checkUsername(this)">

在javascript中是这样的

function checkUsername(v){
    $.post("phppage.php",{
        valToBeChecked:v
    },function(d){
        if($.trim(d)==true){
            // php page returned true
        }else{
            // php page returned false
        }
    });
}

请注意这只是一个例子,我想我的语法是正确的。

于 2012-12-05T19:00:42.710 回答
1

这将在没有 jQuery 的情况下对输入的模糊进行 AJAX 检查。

编辑:我想澄清一下,我不建议使用这种方法,并且更喜欢将 jQuery(或其他类似的 JS 框架)用于 AJAX。但是,我知道并不是每个人都可以指定他们使用的技术,所以这里就是您的要求的答案!:)

<input id="txtUsername" name="txtUsername" />
<script type="text/javascript">
    window.onload = function() {
        document.getElementById('txtUsername').onblur = function(e) {
            // Get the username entered
            var el = e.target;
            var username = el.value;

            // Create an XHR
            var xhr = null;
            if (window.XMLHttpRequest) {
                xhr = new XMLHttpRequest();
            } else {
                xhr = new ActiveXObject("Microsoft.XMLHTTP");
            }

            // AJAX call to the server
            request.open('GET', '/check_username.php?username=' + username, false);
            xhr.onload = function(e) {
                var json = eval(xhr.responseText);
                if (json.exists) {
                   window.alert('That username exists already.');
                }
            }
            xhr.send();
        }
    }
</script>

user_exists.php

$username = isset($_GET['username']) ? $_GET['username'] : '';
$username = mysqli_real_escape_string($username);

$sql = "SELECT COUNT(*) > 0 AS user_found
        FROM users
        WHERE username = '{$username}'";

$result = mysqli_query($sql);

$exists = false;
if ($row = mysqli_fetch_assoc($result)) {
    $exists = $row['user_found'] ? true : false;
}

echo json_encode(array('exists' => $exists));
于 2012-12-05T19:01:19.537 回答
1

我对此的解决方案是使用 AJAX。

在提交表单时,对一个页面进行 AJAX 调用,该页面将评估已输入到表单中的数据,并返回有关它是否已被验证的信息。

从该 AJAX 调用中获取一些信息后,确定是否再次提交表单,但这次提交到将数据吸收到数据库中的页面。

这是一种解决方案;作为一个 AJAX 新手,我想说可能有更好的,但它可能对你有用。

于 2012-12-05T18:58:03.350 回答
0

一个很好的选择是使用 jQuery/AJAX。 查看这些示例并在您的服务器上试用它们。在此示例中,在 FILE1.php 中,请注意它传递了一个空白值。您不想传递空白值,这是您将用户名和密码传递给 FILE2.php 的地方。在您的情况下,该行将如下所示:

data: 'username='+username+'&password='+password,

在 FILE2.php 示例中,您将检索这些值,如下所示:

$uname = $_POST['username'];
$pword = $_POST['password'];

然后进行 MySQL 查找并返回值:

echo 1;

这将传递1给 FILE1.php 中的成功函数,并将其存储在名为“data”的变量中。因此,alert(data);成功函数中的行将提醒第一。

这是另一个值得回顾的好例子。

方法是创建表单,然后使用 jQuery 检测按钮按下并通过 AJAX 将数据提交到辅助 PHP 文件。上面的例子展示了如何做到这一点。

辅助 PHP 文件返回一个响应(无论您选择发送什么),该响应出现在您的 AJAX 调用的 Success: 部分。

jQuery/AJAX 是 javascript,因此您有两个选择:您可以将其放在<script type="text/javascript"></script>PHP 主文档的标签中,或者您可以<?php include "my_javascript_stuff.js"; ?>放在 PHP 文档的底部。

于 2012-12-05T18:57:43.767 回答