HTML FORM + PHP:表单动作与登录保持在同一页面上


HTML FORM + PHP: form action to remain on same page as login

现在我的表单链接到一个新的页面,上面有我所有的PHP代码。我希望所有的代码都像在本教程中一样在同一页面上执行:http://www.w3schools.com/php/php_form_url_email.asp

我很难理解这个教程是如何管理它的。我在想也许可以将我的add.php代码存储在一个函数中,然后用表单动作调用它。这可能吗?如果没有,最好的方法是什么?

下面是我的表单代码:
<form action="add.php" method="post">
    <p>
           Username: <input type="text" name="Username"><br>
           Email: <input type="text" name="Email"><br>
           Password: <input type="password" name="Password"><br>
           Confirm Password: <input type="password" name="ConfirmPass">
    </p>
    <p>
           <input type="submit">
    </p>
</form>
这是我的add.php页面:
<?php
$Username = $_POST['Username'];
$Password = $_POST['Password'];
$Email = $_POST['Email'];
$ConfirmPass = $_POST['ConfirmPass'];
$safeUsername = SQLite3::escapeString($Username);
$safePassword = SQLite3::escapeString($Password);
$safeEmail = SQLite3::escapeString($Email);
$safeConfirmPass = SQLite3::escapeString($ConfirmPass);
$hostName = explode('@', $Email);

$database = new PDO('sqlite:maindb.db');
$sql = "SELECT * FROM users WHERE Username = ?";
$result = $database->prepare($sql);
$result->bindParam(1, $safeUsername);
$result->execute();

    if($result->fetch()) {  
            echo "Username " . $safeUsername . " already exists";
    }
    else { 
                if (filter_var($safeEmail, FILTER_VALIDATE_EMAIL) && checkdnsrr($hostName[1]) && !empty($safeEmail)) {
                    if (preg_match("/(['w'-]+'@['w'-]+'.['w'-]+)/",$safeEmail)) {
                        if (!empty($safeUsername) && (preg_match("/^[a-zA-Z ]*$/",$safeUsername)) && !empty($safeUsername)) {
                            if ($safePassword == $safeConfirmPass && !empty($safePassword)) {
                                echo $Username . " was successfully added to the database.";
                                $stm = "INSERT INTO users(Username, Password, Email) VALUES(?,?,?)";
                                $stmt = $database->prepare($stm);
                                $stmt->bindParam(1, $safeUsername);
                                $stmt->bindParam(2, $safePassword);
                                $stmt->bindParam(3, $safeEmail);
                                $stmt->execute();
                                $database = null;
                            }
                            else {echo "Passwords do not match"; }
                        }
                        else {echo "Invalid Username.";}
                    }
                    else {echo "Invalid e-mail address.";}
                }
                else {echo "Invalid e-mail address.";}
        }

?>

谢谢你的帮助!我很感激。

在教程中他们使用

if ($_SERVER["REQUEST_METHOD"] == "POST") {
    //your stuff here
    //save your form values etc.
}

检查是否有帖子到您的页面(这可以是任何页面,也可以是同一页面)。基本上,这将检查POST请求是否已发送到此页面。如果你使用from和post方法,

作为额外的测试,他们还放了像

这样的东西
if (empty($_POST["name"])) {
    //name is empty print error!
}

来检查字段是否为空。现在你所要做的就是把你的动作改为相同的页面