PHP isset('submit') 总是返回 FALSE

PHP isset('submit') is always returning FALSE

我在 HTML 表单的 "action" 字段中使用外部 php 文件,以便在单击时执行 php 文件中提到的操作提交按钮。

为此,我在 php 文件中使用了 isset() 函数。

但是,我发现 isset 函数总是返回 FALSE,导致执行 else 语句(如控制台日志中所示)。

如果我删除了 isset() 函数(因此删除了 if-else 语句),那么代码运行得非常好。

你能检查一下我的代码中的问题吗?

此外,我在其他帖子中看到我需要使用一些其他参数以及 isset(),例如,

if(isset($_POST['submit']) && !empty($_POST["xyz"]))

这是必需的吗?

P.S.: 我仍处于页面开发的初始阶段,因此我请求您忽略我的代码的安全问题,我承认它存在。 :)

我的子代码:

我的HTML表格:

<form id="info-form" method="POST" action="form-submit.php">
    <label for="Name">What is your Name? </label> 
    <input required type="text" name="name" placeholder="Enter your full name here." />

    <label for="Email">What is your email ID? </label>
    <input required type="email" name="email" placeholder="your.name@email.com" />

    <label for="mobile">What is your 10-Digit Mobile Number? </label>
    <input required type="text" name="mobile" maxlength="10" />

    <button name="submit-form" type="submit" class="btn btn-lg btn-success"><i class="fa fa-paper-plane" aria-hidden="true"></i>
        Submit
    </button>
    <button type="reset" class="btn btn-lg btn-warning"><i class="fa fa-undo" aria-hidden="true"></i>
        Reset
    </button>
</form>

我的表格-submit.php文件:

<?php
    if(isset($_POST['submit-form']))
    {
        require("database-connect.php");

        $name = $_POST['name'];
        $email = $_POST['email'];
        $mobile = $_POST['mobile'];

        $sql = "INSERT INTO tbl_details ".
               "(name,email_id,mobile_number) ".
               "VALUES ".
               "('$name','$email','$mobile')";

        mysql_select_db('db_info');
        $return = mysql_query( $sql, $connect );

        if(! $return )
        {
            die('Could not enter data: ' . mysql_error());
        }

        echo "Entered data successfully\n";
        mysql_close($connect);
    }

    else
    {
        echo "Not Set\n";
    }
?>

像这样更改您的按钮标签。希望对您有所帮助!

<input name="submit-form" value="Submit" type="submit" class="btn btn-lg btn-success">

谢谢!

您应该使用 input 元素而不是按钮。

<button name="submit-form" type="submit" class="btn btn-lg btn-success">
<i class="fa fa-paper-plane" aria-hidden="true"></i>Submit
</button>

应替换为这样的输入:

<input name="submit-form" value="ButtonText" type="submit" class="btn btn-lg btn-success" />

输入的值是它向用户显示的文本。

此外,在你的问题中你提到了 isset('submit')isset($_POST['submit']),而其他人是对的,这不是你的 HTML 代码中的现有名称,你的 PHP代码确实包含正确的 isset($_POST['submit-form'])。 它给一些 'quick' 读者造成了一些困惑...


至于额外的 !empty($_POST["xyz"])),出于您的目的(检查表单是否为回发),这不是必需的。

您真的不应该一开始就检查是否存在提交按钮值。如您所见,对前端进行一些细微的修饰更改,例如使用何种按钮提交表单,不应对后端产生任何影响。提交按钮及其值与处理表单完全无关。

您真正想在服务器上检查的是请求是否是 POST 请求,或者是否设置了您要使用的值,或两者:

if ($_SERVER['REQUEST_METHOD'] == 'POST') …
if (isset($_POST['name'], $_POST['email'], $_POST['mobile'])) …

最合理的应该是:

if ($_SERVER['REQUEST_METHOD'] != 'POST') {
    header('HTTP/1.0 405 Method Not Allowed');
    exit;
}

或:

if ($_SERVER['REQUEST_METHOD'] != 'POST') {
    header('Location: myform.html');
    exit;
}

在您断言您正在处理正确的 HTTP 方法之后,处理您的数据:

$data = filter_input_array(INPUT_POST, [
    'name'   => FILTER_DEFAULT,
    'email'  => FILTER_VALIDATE_EMAIL,
    'mobile' => FILTER_DEFAULT
]);

如您所见,您甚至根本不需要直接与 $_POST 互动。参见 http://php.net/filter_input_array