PHP isset('submit')始终返回FALSE
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文件:
PHP中的isset('submit')总是返回FALSE的原因是使用了
此外,您在问题中提到了isset('submit')和isset($_POST['submit']),但实际上,这两个都不是HTML代码中存在的名称,而是您的PHP代码中包含了正确的isset($_POST['submit-form'])。
为了检查表单是否提交,不需要额外的!empty($_POST["xyz"])。
另外,元素的value既是显示给用户的文本,也是提交的值。而
要解决这个问题,应该将
问题的原因是使用了错误的HTML标签来创建提交按钮。代码中使用了`
解决方法是将`
下面是修改后的代码示例:
这样修改后,`isset('submit')`将会返回`TRUE`。
为什么需要将`
虽然`
需要注意的是给出的链接可能不是最新的,但是在现代浏览器中,使用`
希望这个解决方法对你有帮助!
问题出现的原因是在检查是否存在提交按钮值时,不应该存在这样的检查。前端的一些细微变化,比如使用哪种按钮来提交表单,不应该对后端产生任何影响。提交按钮及其值对于处理表单来说是无关紧要的。
解决方法是在服务器端检查请求是否为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按钮和表单。