繁体   English   中英

PHP在同一页面上提交表单,并在表单下方显示回显

[英]PHP submit form on same page with echo shown below form

我知道这个问题已经被问过很多次了,但是答案似乎确实是发布的脚本所特有的,以我目前的知识,我无法从已更正的脚本过渡到自己实现。

一切都很好-在同一页面上提交并提供任何错误的反馈,但是我希望在表单下方回显任何错误,以便用户更方便地更改他们错误输入的内容并重新提交。

从我在发布本文之前阅读的问题中可以收集到的信息中得知-只能使用jQuery / Ajax吗?

我的剧本:

<?php

if(isset($_POST['submit'])){
require "connection.php";

$username = $_POST["username"];
$password = $_POST["password"];
$email = $_POST["email"];
$repeat_password = $_POST["repeat_password"];

$username_query = mysql_query("SELECT id FROM users WHERE username = '$username'");
$email_query = mysql_query("SELECT id FROM users WHERE email = '$email'");

if($username == "" || $password == "" || $repeat_password == "" || $email == ""){
  die("All boxes must be filled out!");
}// ^ Checking if all boxes have been filled out
else {
    if (!ctype_alnum($username)){
        die("Username can only contain letters and numbers");
    }// ^ Checking if username is alphanumeric
    else {
        if (strlen($username) < 6 || strlen($username) > 15){
            die("Username must be between 6-15 characters.");
        }// ^ Checking if username is between 6-15 characters
        else {
            if (mysql_num_rows($username_query) != 0){
                die("Username is taken, please choose another.");
            }// ^ Checking if username exists in database
            else {
                if (!preg_match("/[0-9]/",$password)){
                    echo "password doesnt contain a number";
                    }
                else {
                    if ($password != $repeat_password){
                        die("Passwords do not match");
                    }// ^ Checking if password and repeat_password match
                    else {
                        if (strlen($password) < 6){
                            die("Password must be atleast 6 characters long.");
                        }// ^ Checking if password is longer than 6 characters
                        else {
                            if (!filter_var($email, FILTER_VALIDATE_EMAIL)){
                                die("E-mail address is not vaild.");
                            }// ^ Checking if e-mail address is valid
                            else {
                                if (mysql_num_rows($email_query) != 0){
                                    die("This e-mail address has already been used to create a different account.");
                                }// ^ Checking if e-mail address has already been used
                                else {
                                    mysql_query("INSERT INTO users (username, password, email, signup_date) VALUES ('$username', '$password', '$email', CURDATE())") or die(mysql_error());
                                    echo "Account succesfully created, welcome ".$username."!";
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
}
exit;
}

// 

?>

        <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
            <table>
                <tr>
                    <td>
                        Username:
                    </td>
                    <td>
                        <input type="text" name="username">
                    </td>
                </tr>
                <tr>
                    <td>
                        Password:
                    </td>
                    <td>
                        <input type="password" name="password">
                    </td>
                </tr>
                <tr>
                    <td>
                        Repeat password:
                    </td>
                    <td>
                        <input type="password" name="repeat_password">
                    </td>
                </tr>
                <tr>
                    <td>
                        E-mail:
                    </td>
                    <td>
                        <input type="email" name="email">
                    </td>
                </tr>
                <tr>
                    <td colspan="2">
                        <center><input type="submit" name="submit"></center>
                    </td>
                </tr>
            </table>
        </form>

答:是的,您必须在那里使用jQuery。

您可以在用户输入第一个字母后验证表格。 您可以验证键的上/下或提交。 我建议使用jQuery Validation Plugin

要汇总格式,请使用ajax请求。 这很简单。 你可以在这里阅读。 我在最后一页给出了一些示例。

请注意,如果您将使用jQuery Validation Plugin,则可以在valid操作上发送ajax请求。 使用此方法,带有序列化表单的ajax请求将在表单提交+表单有效时发送。 如果form包含一些无效字段,则将显示错误,如果没有错误,则将发送ajax-request。

忠告 :您的建筑不是很好。 为什么? 如果人们会写下坏名而又犯了10个其他错误,那么只有1个错误:

用户名只能包含字母和数字

将显示。 为什么? 因为你的建筑。 之后,他将纠正第二错误。 第三次错误等

我建议您这样做来处理错误:

$errors = array();
$errorsFlag = false;

if(check_username1()) {
    $errors[] = 'Tell about this error';
    $errorsFlag = true;
}

if(check_username2()) {
    $errors[] = 'Tell about this error';
    $errorsFlag = true;
}
if(check_mail()) {
    $errors[] = 'Tell about this error';
    $errorsFlag = true;
}

以及如何输出呢? 用这个:

if($errorsFlag == true) {
    foreach($errors as $error) {
        echo $error . " <br /> ";;
    }    
}

我总是将错误设置为会话。 这样一来,您就可以一次设置多个错误,并在任何需要的地方打印。

以下if语句仅是您将在其中设置错误的示例...

session_start(); //you will need this

if ( username_exists($un) ) {

    handleError("Username already exists!");

}

...

if ( !passwordIsStrong($pw) ) {

    handleError("Password is not strong enough!");

}

这是实际设置/打印错误的功能。

function handleError( $err ) {

    //get any existing errors
    $existing = isset($_SESSION['form-errors']) ? $_SESSION['form-errors'] : '';

    //append the new error to the existing ones. Over-write the session with new data.
    $_SESSION['form-errors'] = "$existing<li>$err</li>";

}

function getErrors() {

    if( isset($_SESSION['form-errors']) )

         echo $_SESSION['form-errors'];


}

getErrors(); 可以在您的html中的任何地方调用。 它将打印出这样的内容...

<li>Username already exists!</li> <li>Password is not strong enough!</li>

有点像日志。 但这对我所有的项目都有效!

是的,您需要javascript 但不一定是jQueryajax

但是不使用ajax php总是需要您重新加载页面,否则将无法执行php代码。

如果您不希望重新加载页面,请搜索某种javascript / jQuery验证脚本。 否则(如果您不关心页面重新加载),也可以使用php在表格末尾显示错误消息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM