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

ABo*_*Bor 1 html php forms isset

我在HTML表单的“操作”字段中使用了外部php文件,以便在php文件中提及的操作是在单击“提交”按钮时进行的。

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

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

如果我删除了该isset()函数(因此删除了这些if-else语句),那么该代码将发挥出色的作用。

您能在我的代码中检查问题吗?

另外,我在其他文章中也看到需要与一起使用其他参数isset(),例如,

if(isset($_POST['submit']) && !empty($_POST["xyz"]))
Run Code Online (Sandbox Code Playgroud)

这完全是必需的吗?

PS:我仍处于页面开发的初始阶段,因此,我请您忽略我的代码的安全性问题,我知道它存在。:)

我的子代码:

我的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>
Run Code Online (Sandbox Code Playgroud)

我的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";
    }
?>
Run Code Online (Sandbox Code Playgroud)

dec*_*eze 5

您实际上不应该首先检查是否存在提交按钮值。如您所见,前端会有一些细微的外观变化,例如使用哪种按钮提交表单,对后端不会有任何影响。提交按钮及其值与处理表单无关。

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

if ($_SERVER['REQUEST_METHOD'] == 'POST') …
if (isset($_POST['name'], $_POST['email'], $_POST['mobile'])) …
Run Code Online (Sandbox Code Playgroud)

最合理的事情是:

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

要么:

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

断言正在使用正确的HTTP方法后,请处理数据:

$data = filter_input_array(INPUT_POST, [
    'name'   => FILTER_DEFAULT,
    'email'  => FILTER_VALIDATE_EMAIL,
    'mobile' => FILTER_DEFAULT
]);
Run Code Online (Sandbox Code Playgroud)

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