如何通过PHP动态显示错误消息

时间:2014-03-22 22:27:01

标签: javascript php html ajax

我正在创建一个PHP登录脚本。到目前为止,我只参与了注册工作。

我的问题是,如何在不刷新页面的情况下处理PHP验证?我想输出用户错误输入信息的反馈,但我不想刷新页面。这是因为我使用的是AJAX,所以我希望它能在页面上输出。

这可能吗?

请看这里,如果您“注册”而未填写任何方框,则会显示一些错误消息。问题是它重新加载页面。有没有办法不重新加载页面仍然显示这些数据?

http://marmiteontoast.co.uk/fyp/login-register/test/index.php

这是仅用户名的if语句的示例。这也与所有其他字段重复:

if(isset($_POST['username'])){
    $username = mysql_real_escape_string(trim($_POST['username']));
    if(strlen($username) > 3){
        // passed
        if(strlen($username) < 31){
        // passed
        } else {
        $_SESSION['status']['register']['error'][] = 'The Username is greater than 30 characters.';
        }
        } else {
        $_SESSION['status']['register']['error'][] = 'The username is less than 4 characters.';
        }
        } else {
        $_SESSION['status']['register']['error'][] = 'The Username is not entered.';
        }

一旦通过所有验证,它就会:

header('Location:index.php');

错误在索引页面上输出:

<?php
if(isset($_SESSION['status']['register']['error'])){
?>
 <div class="alert alert-error">
 <p><strong>There's a problem!</strong><br /><br />
<?php
 foreach($_SESSION['status']['register']['error'] as $error){
 // Outputs list of all errors, breaks to new line
 echo $error . '<br />';
}
?>
</p>

1。是否可以使用PHP动态输出这些?

2。我可以在前端进行验证,然后将其传递给PHP以传递给数据库吗?

2a上。我如何处理运行用户名检查我是否在前端执行?

2 个答案:

答案 0 :(得分:1)

  1. 不直接,您需要使用其他工具,很可能是Javascript。
  2. 是的,但这是一种可行的做法。验证两者的最佳方法。

    2a上。我相信你需要使用一个数据库。

  3. 这些教程可能会帮助你。

    Easy jQuery Ajax PHP Contact Form

    How to create a Sign Up form registration with PHP and MySQL

答案 1 :(得分:1)

这是我前几天真正做的事情!

我有一个名为“register.js”的文件,一个名为“register_process.php”的文件和一些html文件。

我的服务器的设置方式:

html_docs (www):
   ajax:
       register_process.php
   js:
       register.js
       jquery-1.6.2.js
   register.html

所以在我的register.html中,我的代码看起来像这样:

<script type="text/javascript" src="js/md5.js"></script> <!-- this is in my head -->
<script type="text/javascript" src="js/jquery-1.6.2.js"></script>
<!-- everything else is in my body -->
<div id="error_message" style="display: none;">

</div>
<div id="register_div">
   <input type="text" name="username" id="username"><br>
   <input type="password" name="password" id="password"><br>
   <input type="submit" name="submitbutton" id="reg_button" value="Register" onclick="AttemptRegisterAjax(); return false;"><br>
</div>

这会调用register.js文件中的函数。这些功能看起来像这样:

function AttemptAjaxRegister(){
    var url = "ajax/register_process.php?";
    url += "time=" + (new Date().getTime()) + "&un=";
    var username_ele = document.getElementById("reg_username");
    var password_ele = document.getElementById("reg_password");
    var error_ele = document.getElementById("error_message");
    var username = username_ele.value;
    var password = password_ele.value;
    if((username.length >=4) && (password.length >= 4)){
        url += encodeURIComponent(username) + "&pw=" + encodeURIComponent(password);
        console.log(url);
        $.get(url, function(data, status, xhr){
            data = data.trim();
            if(data != "true"){
                error_ele.innerText = data;
                error_ele.style = "display: block;";
            }else{
                window.location = "/profile.php";
            }
        });
    }else{
        error_ele.innerText = "Please make sure your password and username are both 4 characters long";
        error_ele.style = "display: block;";
    }
}

现在,在你的php里面,你会想要设置所有内容,就像你注册它一样,但你实际上只想调用die($YourErrorMessage);或注册成功,{{ 1}}