7

wordpressテンプレートページに次のフォームがあります。フォームを送信するたびに 404 エラーが発生しますが、フォームで予約済みのワークプレス パラメータ名を使用していません。

<?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(); ?>

$_POST 値をダンプするように 404 ページをカスタマイズしたので、パラメーター値が確実に送信されます。

[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>

編集

選択ドロップダウンの値を設定するコードを変更して、sprintf を使用して文字列値を int 値にマップするのではなく、増加する int 値を使用するようにしました。最初の要素が選択されるとフォームが送信され、2 番目のオプションが選択されると 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);
}
4

7 に答える 7

28

問題は、WordPress にはいくつかの単語が予約されており、フォームを送信するときにそのエラーがスローされることです。

私が自分で見つけてウェブをサーフィンしている単語のいくつかは次のとおりです。

  • カスタム投稿タイプ名
  • 分類名
  • "名前"
  • "日"
  • "月"
  • "年"
  • "カテゴリー"
  • "題名"

そのため、カスタム フォームを作成するときは注意して、入力にプレフィックスを付けて名前を付けてください。私の場合、「history」というカスタム投稿タイプがあり、同じように入力に名前を付けていました。

于 2013-05-19T15:02:02.937 に答える
0

固有の名前と ID を入力 このフォームを試す

<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" id="runner_id"/><br/>
                Firstname<input type="text" name="runner_first" id="runner_first"/><br/>
                Surname<input type="text" name="runner_last" id="runner_last"/><br/>
                Gender<input type="text" name="runner_gender" id="runner_gender"/><br/>
                DOB<input type="text" name="runner_dob" id="runner_dob"/><br/>
                Standard<input type="text" name="runner_standard" id="runner_standard"/><br/>
                Company<input type="text" name="runner_company" id="runner_company"/><br/>
                [/one_half]
                <input type="submit" value="Register Runner"/>
                <input type="hidden" name="form-submitted" id="bhaa-submitted" value="true" />
            </form> 
于 2015-03-20T03:47:35.877 に答える
0

パーマリンクをリセットしてみましたか? どこかで問題になる可能性があります。問題があるように見えない、またはそうではないisset($_POST['form-submitted'])'

ページ名が別のプラグインで使用されている可能性があります。

于 2013-03-28T15:07:58.257 に答える
0

WordPressget_permalink()は、出力 HTML の form タグに挿入される URL を生成しています。

ブラウザーに表示される HTML ソース (右クリック、ソースの表示、右クリック、要素の検査など) を見ると、次のようになります。

<form action='some_url_here' ...>.

この URL は、おそらく現在閲覧している URL と同じであると思います。つまり、結果を処理するために同じ PHP ファイルに詳細を送信するようブラウザに指示します

于 2013-03-28T15:08:07.260 に答える
-1

私は同じ問題を抱えていましたが、空の入力フィールド (入力フィールドに値がない) を送信すると、正常に機能していることがわかりました。その後、いくつかの入力フィールドを空のままにして、他のフィールドにも値を配置しましたが、これも正常に機能していました。

これは、問題が wordpress または私のコードではなく、私の入力フィールドの 1 つであったことを意味します。

于 2015-09-27T09:56:45.713 に答える
-2

この変数は POST FORM では使用できません

_ajax_nonce _page _per_page _signup_form _total _url _wp_http_referer _wp_original_http_referer _wp_unfiltered_html_comment _wpnonce _wpnonce-custom-header-upload

aa アクション action2 active_post_lock add_new add_new_users addmeta admin_bar_front admin_color admin_email admin_password admin_password2 ajax align allblogs allusers alt approval_parent 承認された添付ファイル attachment_id 添付ファイル auth_cookie 著者 author_name autocomplete_type auto_draft auto-add-pages autosave

background-attachment background-color background-position-x background-repeatbanned_email_domains blog blog_name blog_public blog_upload_space blogname bulk_edit

c カレンダー 猫 category_base カテゴリ名 ネコリスト changeit 変更 charset チェックボックス チェック済み clear-recent-list クローズド コメント コメント_承認済み コメント_著者 コメント_著者_電子メール コメント_著者_url コメント_コンテンツ コメント_日付 コメント_ID コメント_親 コメント_投稿_ID コメント_ショートカット コメント_ステータス コメント_リスト コメントのポップアップ 確認削除 接続_タイプ コンテンツ コンテキスト cpage 作成-新しい添付ファイル createuser Customize_messenger_channel カスタマイズされた customlink-tab

日付 date_format date_format_custom day default-header delete delete_all delete_all2 delete_comments delete_option delete_tags delete_widget deletebookmarks deletecomment deleted deletemeta deletepost 説明 切り離された 閉じる display_name do

edit_date メール エラーの正確な抜粋

機能 フィード フェッチ fheight ファイル ファイルupload_maxk フィルター find_detached first_comment first_comment_author first_comment_url first_name first_page first_post found_post_id fwidth

global_terms_enabled GLOBALS gmt_offset GUID

高さ hh hidden hidden_​​aa hidden_​​jj hidden_​​mm hidden_​​mn hidden_​​hh 履歴 ホスト名 時間 html-アップロード

id ID ids id_base illegal_names insert-gallery insertonlybutton 仮ログイン item-object item-type

jj json json_data

last_name limited_email_domains link_id link_image link_name link_rss link_url link_visible linkcheck ロケール ロックされたログ Logged_in_cookie

m media media_type menu menu_items menu-item menu-item-attr-title menu-item-classes menu-item-db-id menu-item-description menu-item-object menu-item-object-id menu-item-parent- id menu-item-position menu-item-target menu-item-title menu-item-type menu-item-url menu-item-xfn menu-locations menu-name メッセージ meta metakeyinput metakeyselect metavalue 分 mm mn モード monthnum more move multi_number

name nav-menu-locations new new_role new_slug new_title newcat newcomment_author newcomment_author_email newcomment_author_url newcontent newuser ニックネーム no_placeholder noapi noconfirmation noredir 番号

オフセット otar オプション option_page order orderby

p pb page page_columns page_id page_options paged pagegen_timestamp pagename parent_id pass1 pass2 password permalink_structure photo_description photo_src phperror ping_status plugin plugin_status ポインター 位置 post post_category post_data post_format post_ID post_id post_mime_type post_password post_status post_title post_type post_view postid posts preview primary_blog private_key ps public_key publish pwd

クエリ

reassign_user reauth リダイレクト redirect_to refreferredby 登録 registrationnotification rememberme remove-background removeheader removewidget reset-background resetheader review rich_editing robots role

s 同じ 保存 savewidget savewidgets 画面スクロール 検索 2 番目のセクション selectall 選択 send send_password 文 短い show_sticky サイドバー サイドバー signup_for signup_form_id site_id サイト名 サイト名 サイズ スキップクロッピング スパム スパム src ss ステージ開始 静的ステータス スティッキー subdomain_install サブポスト subpost_id super_admin を送信

tab tag tag_ID tag-name tag_base tags_input tax tax_input tag-name target taxonomy tb term text-color the-widget-id theme theme_status 親指 timezone_string time_format time_format_custom title サムネイル ID ゴミ箱 ゴミ箱タイプ

undismiss unspam unspammed untrash untrashed url update_home_url 更新された upgrade upload_filetypes upload_space_check_disabled use_ssl user user_id user_login user_name username users

バージョンの確認と削除の可視性

w weblog_titlewelcome_emailwelcome_user_email widget_id widget_number widget-id widget-recent-comments widget-rss width withcomments withoutcomments wp_customize wp_http_referer wp_screen_options wp-preview WPLANG

x1

y1年

于 2015-04-26T16:52:25.877 に答える