我在wordpress模板页面上有以下表单。每次提交表单时,我都会收到一个404错误,但我没有在表单中使用任何保留的workpress参数名称。
<?php
/**
* Template Name: Registration Template
*/
if(isset($_POST['form-submitted']))
{
if(trim($_POST['runner']) === '') {
$runnerError = 'Please enter runner runner.';
$hasError = true;
} else {
$runner = trim($_POST['runner']);
}
if(trim($_POST['racenumber']) === '') {
$numberError = 'Please enter a race number.';
$hasError = true;
} else {
$racenumber = trim($_POST['racenumber']);
}
$race = trim($_POST['race']);
error_log($race.' '.$runner.' '.$racenumber);
$registrationSubmitted = true;
}
get_header();
echo "<pre>GET "; print_r($_GET); echo "</pre>";
echo "<pre>POST "; print_r($_POST); echo "</pre>";
?>
<div id="container">
<?php
if(isset($registrationSubmitted) && $registrationSubmitted == true)
{
echo '<div class="thanks"><p>The runner has been registered.</p></div>';
}
else
{
$races = // magic array
$selectRaces = '<select name="race" id="race">';
foreach($races as $racez)
{
$selectRaces .= sprintf('<option value=%d>%s</option>',$race->id,$race->name);
}
$selectRaces .= '</select>';
echo apply_filters('the_content','
<form action="'.get_permalink().'" id="form" method="POST">
[one_half last="no"]
<b>Race Details</b><br/>
RaceNumber<input type="text" name="racenumber" id="racenumber"/><br/>
Race'.$selectRaces.'<br/>
[/one_half]
[one_half last="yes"]
<b>Runner Details</b><br/>
ID<input type="text" name="runner" id="runner"/><br/>
Firstname<input type="text" name="first" id="first"/><br/>
Surname<input type="text" name="last" id="last"/><br/>
Gender<input type="text" name="gender" id="gender"/><br/>
DOB<input type="text" name="dob" id="dob"/><br/>
Standard<input type="text" name="standard" id="standard"/><br/>
Company<input type="text" name="company" id="company"/><br/>
[/one_half]
<input type="submit" value="Register Runner"/>
<input type="hidden" name="form-submitted" id="bhaa-submitted" value="true" />
</form>');
}
echo '</div>';
?>
<?php get_footer(); ?>我已经定制了我的404页面来转储$_POST值,所以我确信参数值正在被提交。
[racenumber] => 5
[race] => 2596
[runner] => 5
[first] =>
[last] =>
[gender] =>
[dob] =>
[standard] =>
[company] =>
[form-submitted] => true谁能解释一下我‘isset($_POST’‘form submitted’)‘中的逻辑没有被执行?
生成的html
<form action="http://localhost/registration/" id="form" method="POST">
<div class="one_half">
<b>Race Details</b><br><br>
RaceNumber<input name="number" id="number" type="text"><br><br>
Race<br>
<select name="race" id="race">
<option value="2596" id="2596">4-Mile-M</option>
<option value="2595" id="2595">2-Mile-W</option>
</select>编辑
我更改了代码,将select下拉列表的值设置为使用递增的int值,而不是使用sprintf将字符串值映射到int值。当第一个元素被选中时,表单提交,如果第二个选项被选中,我得到一个404!
$races = // magic array
$selectRaces = '<select name="race" id="race">';
$i=0;
foreach($races as $racez)
{
$selectRaces .= sprintf('<option value=%d>%s</option>',$i++,$race->name);
}发布于 2013-05-19 23:02:03
问题是WordPress保留了一些字,在提交表单时会抛出这个错误:
我发现自己和网上冲浪的一些单词是:
因此,在创建自定义表单时要小心,并尝试使用前缀来命名您的输入。在我的例子中,我有一个名为"history“的自定义post类型,并且我以相同的方式命名输入。
发布于 2013-03-28 23:07:58
你有没有试过重置你的固定链接?可能在某个地方出了问题。似乎或看起来问题不是isset($_POST['form-submitted'])'
您的页面名称可能正在被另一个插件使用。
发布于 2013-03-28 23:08:07
WordPress的get_permalink()正在生成一个URL,这个URL被注入到你的output HTML的form标签中。
如果您查看在浏览器中出现的HTML源代码(例如,右键单击,view-source或右键单击,检查元素),则会找到以下内容:
<form action='some_url_here' ...>。
我希望这个URL可能与您当前浏览的URL相同……即,它告诉浏览器将详细信息发送回相同的PHP文件以处理其结果。
https://stackoverflow.com/questions/15685020
复制相似问题