Php 如何在不刷新页面的情况下显示错误?

Php 如何在不刷新页面的情况下显示错误?,php,javascript,html,sql,Php,Javascript,Html,Sql,我正在创建一个注册表。 用户输入用户名和密码,然后按submit,然后使用POST提交表单。 HTML: 现在,在PHP中,我运行一个查询来检查数据库中是否存在用户名。 如果用户名已经存在,我如何通知用户而不导航到另一个页面并导致“用户名”和“密码”字段重置为空 有些注册表单有一个非常简洁的Javascript,每次按键盘上的键时都会检查用户名是否存在。关于如何实现这一点有什么想法吗?从我收集的资料中,使用JavaScript连接到数据库是很困难的(也是很糟糕的做法)。一个很好的选择是使用jQ

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

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


有些注册表单有一个非常简洁的Javascript,每次按键盘上的键时都会检查用户名是否存在。关于如何实现这一点有什么想法吗?从我收集的资料中,使用JavaScript连接到数据库是很困难的(也是很糟糕的做法)。

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

data: 'username='+username+'&password='+password,
$uname = $_POST['username'];
$pword = $_POST['password'];
在FILE2.php示例中,您将检索以下值:

data: 'username='+username+'&password='+password,
$uname = $_POST['username'];
$pword = $_POST['password'];
然后执行MySQL查找并返回如下值:

echo 1;
这将为FILE1.php中的success函数提供一个
1
,并将其存储在名为“data”的变量中。因此,
警报(数据)行”将提醒第一位

复习

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

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


jQuery/AJAX是javascript,因此您有两个选择:您可以将它放在主PHP文档的
标记中,或者您可以将它放在PHP文档的底部。

我的解决方案是使用AJAX

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

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


这是一个解决方案;作为一名AJAX新手,我想说可能有更好的,但它可能适合您。

我使用jQuery做类似的事情

在html中

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

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

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

编辑:我想澄清的是,我不建议使用这种方法,我更喜欢在AJAX中使用jQuery(或其他类似的JS框架)。但是,我知道并不是每个人都有权指定他们使用的技术,所以这里是对您请求的回答!)



您正在使用jQuery吗?你也可以发布你的HTML吗?我能想到的一种方法是,在你拥有,比如说他们的用户名的3个字符后,你生成一个所有已经使用的用户名的列表,并将其交给JS。从那以后,让JS检查所选用户名是否已经在列表中,或者是否使用AJAX。它基本上是对服务器的“正常”请求,只是没有刷新页面。相反,请求由Javascript在后台执行。请求可以简单地由PHP脚本处理。该脚本的响应可以由Javascript处理。AJAX使用JQuery非常简单,尽管有很多代码片段说明了如何在没有JQuery的情况下使用AJAX。不幸的是,没有JQuery。我很快就会发布HTML。仅供参考,这最好通过在输入的onkeypress或onblur事件中调用AJAX来实现。指向另一个问题的链接很难回答。我100%不同意。很多时候,我已经接受了善良灵魂的回答,他们引导我找到了我可以使用的优秀例子。如果这是你的否决票,那么你的名字很好,但是错过了最后的L。这不值得你投否决票。“我要投票表决。”大卫,谢谢你。我想一些脾气暴躁的人可以从另一杯咖啡中获益。@cssyphus,现在是晚上8点。谢谢你的人身攻击,这真的很成熟。他说他不使用jQueryyeh。在我打字之前,问题已经改变了,我没有注意到。我应该删除答案吗?这仍然是一个有效的解决方案。好吧,但即便如此——我还是有点好奇。如果我使用$.post(“phppage.php”),它不会刷新页面,只会发布它?不要删除答案,没关系,
v
是值将作为变量发送的名称,因此在php中只需通过以下方式引用发送的数据:
$\u post['v']
d
是php页面的内容,或者是请求返回的数据。在检查用户名后,您的php页面应该回显或返回true,或false。很好的示例,但我认为需要一些依赖于浏览器的内容?谢谢!我会尝试一下,我只听说过AJAX,到目前为止从未使用过。好吧,这很复杂在像jQuery这样的框架之外。上述内容可能不会100%适用于所有浏览器。这从两个方面说明了jQuery的优点。类似结果的代码更少,并且不需要考虑跨浏览器的因素(如avidly)。干得好。顺便说一句,我现在肯定得查一下它才能写出原始javascript。@NappingRabbit-我完全同意你的看法。如果没有jQuery或其他类似的框架,我永远不会这样做(或建议这样做)。DOM操作也是如此。但不是每个人都有权指定他们使用的技术。
function checkUsername(v){
    $.post("phppage.php",{
        valToBeChecked:v
    },function(d){
        if($.trim(d)==true){
            // php page returned true
        }else{
            // php page returned false
        }
    });
}
<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>
$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));