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

时间:2014-04-27 19:23:34

标签: php forms

我知道这个问题已被多次询问,但答案似乎与发布的脚本非常相关,而且根据我目前的知识,我无法从更正的脚本转换为实现它成我自己的。

一切正常 - 它在同一页面上提交并提供任何错误的反馈,但我希望在表单下面回显任何错误,这样用户只需更改错误输入的内容并重新提交即可。

从我在发布之前阅读的问题中我可以收集到的内容 - 可能只能使用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>

3 个答案:

答案 0 :(得分:1)

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

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

要汇总表格,请使用ajax请求。这很简单。你可以阅读它here。我给出的最后一页有一些例子。

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

<强>建议: 你的arhitecture不是很好。为什么?如果人们写错了名字并再犯了10个其他错误,那么只有1个错误:

  

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

将会显示。为什么?因为你arhitecture。在那之后,他将纠正第二个erorr。第3次错误等。

我建议你这样做:

$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 /> ";;
    }    
}

答案 1 :(得分:0)

我总是将错误设置为会话。这允许您一次设置多个错误,并在任何地方打印它们。

以下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>

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

答案 2 :(得分:0)

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

php不使用ajax总是需要你重新加载页面,否则不会执行php代码。

如果您不想重新加载页面,请搜索某种javascript / jQuery验证脚本。否则(如果你不关心页面重新加载),你也可以在表格的末尾用php发出错误信息。