PHP isset('submit')始终返回FALSE

16 浏览
0 Comments

PHP isset('submit')始终返回FALSE

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

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

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

如果我移除isset()函数(因此移除了if-else语句),那么代码就能正常工作。

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

此外,我在其他帖子中看到需要在isset()之后使用其他参数,例如,

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

这真的是必需的吗?

附注:我还处在页面开发的初期阶段,因此请忽略我代码中存在的安全问题,我承认这个问题存在。:)

我的子代码:

我的HTML表单:

我的form-submit.php文件:


0
0 Comments

PHP中的isset('submit')总是返回FALSE的原因是使用了

0
0 Comments

问题的原因是使用了错误的HTML标签来创建提交按钮。代码中使用了`

0
0 Comments

问题出现的原因是在检查是否存在提交按钮值时,不应该存在这样的检查。前端的一些细微变化,比如使用哪种按钮来提交表单,不应该对后端产生任何影响。提交按钮及其值对于处理表单来说是无关紧要的。

解决方法是在服务器端检查请求是否为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`交互。请参阅[filter_input_array](http://php.net/filter_input_array)。

提示:了解更多关于HTTP协议的知识,以及进入处理服务器上的HTTP请求的思维方式。养成使用curl(或其他喜欢的工具)发出原始HTTP请求来测试服务器的习惯。让你的服务器像一个正常的HTTP端点一样工作。这将使你的应用程序比只考虑HTML按钮和表单更合理。

谢谢。我无法用言语表达我的感谢之情。你不仅回答了我的问题,还提供了一种更好的做事方式,对于像我这样的初学者来说非常重要。你教会了我一个重要的教训——“前端的细微变化不应该对后端产生影响”。非常感谢。顺便说一句,如果其他像我这样的初学者看不明白,这个回复中提供的解决方法是可行的!祝你好运。

提示:学习更多关于HTTP协议的知识,并采用“处理HTTP请求”的思维方式来处理服务器。养成使用curl(或其他你喜欢的工具)发出原始HTTP请求来测试服务器的习惯。使你的服务器像一个合理的HTTP端点一样工作。这将使你的应用程序更加清晰,而不是只考虑HTML按钮和表单。

0