我遇到了问题。我正在使用Wordpress,但这不是Wordpress问题。
我正在使用两个表单,在一个表单上我有所有输入字段和一个隐藏的输入字段,我用它来检查用户提交的表单。我把它的价值保存为'保存'。另一种形式仅用于重置所有选项,其值为“重置”。在PHP中,我检查隐藏字段的值并采取相应的操作。但问题是重置的东西不起作用。
以下是表单的HTML:
<fieldset>
<form method="post">
<!-- Some input fields here-->
<p class="submit">
<input name="save" type="submit" value="Save changes" />
<input type="hidden" name="action" value="save" />
</p>
</form>
</fieldset>
<fieldset>
<form method="post">
<p class="submit">
<input name="reset" type="submit" value="Reset" />
<input type="hidden" name="action" value="reset" />
</p>
</form>
</fieldset>
在PHP中,我像这样验证它们:
// if I change the 'save' literal to something else like 'savea', $_POST variable will not be empty
// but if I dont, then $_POST variable is NULL
if ('save' == $_POST['action']) {
foreach ($this->cp_options as $option) {
if (isset($_POST[$option['id']])) {
update_option($option['id'], $_POST[$option['id']]);
}
else {
delete_option($option['id']);
}
}
header("Location: themes.php?page=functions.php&saved=true");
die;
}
// if I change the 'reset' literal to something else like 'reseta', $_POST variable will not be empty
// but if I dont, then $_POST variable is NULL
elseif ('reset' == $_POST['action']) {
foreach($this->cp_options as $option) {
delete_option($option);
}
header("Location: themes.php?page=functions.php&reset=true");
die;
}
问题是,如果我将'reset'
或'save'
字面值更改为'reseta'
或'saveasdfasd'
之类的其他内容,则$_POST
变量不会为空,但如果我不这样做,那么$_POST
变量就是NULL
。
关于为什么会发生这种情况的任何想法?
答案 0 :(得分:2)
[旧答案已编辑]
首先尝试隔离您的测试环境。这给了我预期的结果。
<?php
if ( isset( $_POST['action'] ) )
{
switch( $_POST['action'] )
{
case 'save':
echo 'Save Action Requested';
break;
case 'reset':
echo 'Reset Action Requested';
break;
default:
echo 'Unknown action requested:';
var_dump( $_POST['action'] );
}
} else {
echo 'No action parameter received';
}
?>
<fieldset>
<form method="post">
<!-- Some input fields here-->
<p class="submit">
<input name="save" type="submit" value="Save changes" />
<input type="hidden" name="action" value="save" />
</p>
</form>
</fieldset>
<fieldset>
<form method="post">
<p class="submit">
<input name="reset" type="submit" value="Reset" />
<input type="hidden" name="action" value="reset" />
</p>
</form>
</fieldset>
答案 1 :(得分:0)
我知道你说$ _POST是null但是你假设那个或者你确实检查过$ _POST == null吗?您是否尝试过执行var_dump($ _ POST)来准确打印出发送的内容?只需注释掉你的重定向并查看$ _POST中的内容。也许这会让你更好地了解发生的事情。
答案 2 :(得分:0)
简单...删除隐藏的输入并更改两个“提交”按钮,使其具有相同的名称,但值不同:
<input type="submit" name="action" value="Reset" />
<input type="submit" name="action" value="Save" />
然后你可以这样测试:
if ($_POST['action'] === 'Reset') {
// Do a reset here
} else {
// Do a save here
}
你可能想把整个事情包装成:
if (isset($_POST['action'])) {
// Put your form handling here
}
答案 3 :(得分:0)
如果您在一个页面上有多个表单,我建议您将每个表单发送到不同的URL。这是迄今为止最简单,最可靠的方法来检测表单的去向,只需要两个不同的脚本来处理表单的处理。然后,您可以包含或重定向到您希望用户查看的最终页面。
答案 4 :(得分:0)
这可能是因为存在具有相同名称的重复元素。 您可以尝试在表单中输入ID或名称吗?