PHP,提交表单后在同一页上使用该表单

9
我在想如何用PHP制作一个用户/密码和提交按钮的表单,但在提交后不跳转到另一个PHP页面,而是留在同一个页面。我考虑使用if / else语句,但试了很多次仍然无法得到想要的结果。
可能只需要像这样简单的代码...
但如果没有输入任何内容就点击提交,我还想设置错误提示...应该很简单,但我不知道为什么无法解决。
<?php
function userPass()
{
    echo "<form method='post' action=" . $_SERVER['PHP_SELF'] . ">";
    echo "<input type='text' name='user' /><br/>";
    echo "<input type='text' name='pass' /><br/>";
    echo "<input type='submit' value='Login' />";
}
    if(empty($_POST["user"]))
    {
        userPass();
    }
    if(!(empty($_POST["user"])))
    {
        if($_POST["user"] == "comp")
        {
            echo "Welcome comp";
        }
        else
        {
            echo "Wrong user";
        }
    }
    ?>

什么是“期望结果”? - Engineer
请发布您的代码尝试,我们会尽力修复它... - V-X
将表单操作设置为 "" - dlock
http://www.html-form-guide.com/php-form/php-form-action-self.html - Mawg says reinstate Monica
9个回答

6
其他答案是正确的,你只需要在“action”属性中将用户发送回到当前页面。你可以使用“isset”来测试他们是否这样做。
有件事让我感到惊讶,那就是你的输入没有经过消毒,你正在为自己设置灾难性的漏洞。在你的行动属性中存在严重的注入漏洞:巨大
$_SERVER['PHP_SELF']

如果你不进行这种净化处理,那么某人可以改变他们所看到的URL,而你可怜的PHP脚本就会被误导,认为它是你自己的SELF常量。
换句话说,你一定要使用一个htmlspecialchars()函数来对该参数进行HTML编码。 因此,你的action应该更像htmlspecialchars($ _SERVER ['PHP_SELF'])。

这与问题完全无关,不是吗? - Apostolos
@Apostolos 这与他的使用情况非常相关,不是吗? - forresthopkinsa

4
如果当前页面是index.php,那么在表单标签中,将action的值设置为index.php。
就像这样:
<form action="index.php" method="post">
</form>

您可以通过输入以下内容来检查已提交的表单:

if(isset($_POST)){
...
}

在页面顶部

将操作设置为 PHP 文件名(例如 index.php)是理所当然的,因此它不会改变任何内容。 - Apostolos

3
只需使用以下语法。
<form method="post" action="">

您可以使用isset()方法来检查是否设置了帖子。

3
不符合w3c标准! 在元素“form”的属性“action”上,存在无效的值'':必须为非空。 - Pete

1
<?php function userPass() {
    echo "<form method='post' action=" . $_SERVER['PHP_SELF'] . ">";
    echo "<input type='text' name='user' /><br/>";
    echo "<input type='text' name='pass' /><br/>";
    echo "<input type='submit' value='Login' />"; }
    if(empty($_POST["user"]))
    {
        userPass();
    }
   *if(!(empty($_POST["user"])))*
    {
        if($_POST["user"] == "comp")
        {
            echo "Welcome comp";
        }
        else
        {
            echo "Wrong user";
        }
    }
    ?>

你的代码有错误,正确的写法是:if(!empty($_POST["user"]))


1
 <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">

这就是如何处理表单,使得在表单内点击提交按钮时重新加载页面的方法。
附加内容: 将required添加到所有需要必填或检查是否为空的输入框。

你能否提供更多信息说明为什么这是个有效的答案? - slfan
这就是你制作表单的方法。 - Jei

1

我创建了一个代码来控制学习所需的输入字段是否满足要求。如果满足要求,数据将被发送到数据库。如果不满足要求,则可能会在页面顶部显示一条消息。

<?php
if (!isset($_POST['submitform'])) {   
}
else
{
$_SESSION['firstname'] = $_POST['firstname'];
$_SESSION['lastname'] = $_POST['lastname'];
$_SESSION['email'] = $_POST['email'];
$_SESSION['mobile'] = $_POST['mobile'];
$_SESSION['telephone'] = $_POST['telephone'];
$_SESSION['place'] = $_POST['place'];
$_SESSION['street'] = $_POST['street'];
$_SESSION['housenumber'] = $_POST['housenumber'];
$_SESSION['gender'] = $_POST['gender'];

if (empty($_POST['firstname']) or empty($_POST['lastname']) or empty($_POST['email']) or empty($_POST['mobile'])or empty($_POST['telephone']) or empty($_POST['place'])
or empty($_POST['street']) or empty($_POST['housenumber']) or !isset($_POST['gender']))
{
    echo "Sending denied";
}
else
{       
    require 'database.php';

    header('Location: succes.php');
}  ?>

我希望这对您有帮助的信息


1
这段代码将会帮助你。
<form action="<?= $_SERVER['REQUEST_URI'] ?>" method="post">

或者你可以这样做:

<form action="" method="post">

感谢您的回复....

0

我认为大家都忽略了实际问题,即是否有方法在提交表单后保持在同一页。答案是没有。一旦提交表单 - 无论您使用POST还是GET方法,并且假设您正在使用$_SERVER ['PHP_SELF']或空操作等 - 将自动打开新页面。 至少对于PHP来说是这样的。(我已经尝试过很多不同的方法使用XAMPP.) 我不知道其他脚本语言。


0

您可以在表单提交中定义:

<form method=get action=index.php >

您也可以完全省略 action,它会自动提交到相同的文件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接