我注意到当为WordPress构建一个自定义插件时-我不能将一个表单嵌套在另一个表单中。
例如,
?>
<form method="POST">
<input type="text" name="username" id="username" placeholder="Username" value="">
<input type="submit" name="get_new_user" value="Submit">
</form>
<?php
if (isset($_POST['get_new_user'])) {
var_dump("Submit Successful");}
这样就可以工作了--当表单"get_new_user"提交时,会输出消息"Submit Successful"。
但是当我在一个窗体中嵌套一个窗体时-它就不工作了。
例如:
?>
<form method="POST">
<input type="text" name="username" id="username" placeholder="Username" value="">
<input type="submit" name="get_new_user" value="Submit">
</form>
<?php
if (isset($_POST['get_new_user'])) {
var_dump("Submit Successful");
?>
<form method="POST">
<input type="number" name="user_id" id="user_id" value="1"/>
<input type="submit" name="submit_sensitive_data" value="Save Info" />
</form>
<?php
if (isset($_POST['submit_sensitive_data'])) {
var_dump("Second Submit Successful");}}
此嵌套形式submit-不起作用-第二条var_dump消息"Second Submit Successful"从未触发,我在debug.log中收到以下错误消息:
rtrim(): Passing null to parameter #1 ($string) of type string is deprecated..
现在,当我把第二个形式移到if语句之外时,如下所示:
?>
<form method="POST">
<input type="text" name="username" id="username" placeholder="Username" value="">
<input type="submit" name="get_new_user" value="Submit">
</form>
<?php
if (isset($_POST['get_new_user'])) {
var_dump("Submit Successful");}
?>
<form method="POST">
<input type="number" name="user_id" id="user_id" value="1"/>
<input type="submit" name="submit_sensitive_data" value="Save Info" />
</form>
<?php
if (isset($_POST['submit_sensitive_data'])) {
var_dump("Second Submit Successful");}
因为它在if语句之外-第二条消息输出,我没有收到错误消息。
有人能解释一下为什么像这样的东西在现代编程中不起作用吗?
1条答案
按热度按时间r7xajy2e1#
所以当
get_new_user
存在时,你的逻辑呈现/处理二级表单,如果它不存在,它就不会进入你的IF语句。也许你需要if (isset($_POST['get_new_user']) or isset($_POST['submit_sensitive_data']))
,但实际上,你的设计需要改进,没有必要在第一个条件中嵌套二级处理逻辑。你的二级表单POST没有get_new_user
值,因此代码没有到达。由于您要“深入”表单流,因此在主表单提交之前检测辅助表单提交...