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

标签 php html forms isset

我在我的 HTML 表单的“操作”字段中使用了一个外部 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>

我的 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";
    }
?>

最佳答案

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

你真正想在服务器上检查的是请求是否是 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 .

关于PHP isset ('submit' ) 总是返回 FALSE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39512696/

相关文章:

php - 如何为 cakephp 中的某些操作禁用安全组件?

jquery - 如何禁用选定的日期?

javascript - Jquery提交表单不起作用

PHP、MySQL : How to retain and retrieve correct data when dealing with pagination

php - 在 Android 平板电脑 webview 中嵌入 Youtube 视频

php - 设置虚拟主机时localhost/phpmyadmin无法访问

php - html 网站的页眉和页脚 php 调用不起作用

javascript - 定义 HTML 类来表示多个 HTML 类

html - 跟随兄弟节点与当前 xslt/xpath

javascript - 提交表单后用表单隐藏div并显示隐藏的div