web-dev-qa-db-ja.com

カスタマイズされたphp機能を起動するための複数の送信ボタンの使用

私はこれを完全に間違った方法で進めているかもしれませんが、私と一緒にいてください...私はforeachテーブルを使って自動的に移入される長いゲストリストを持っています。

管理者でなくてもイベントの主催者が(クライアント側)「表示しない」をクリックしてチケット(カスタム投稿)メタを「noshow」に更新できるように、このゲストリストに「表示しない」ボタンを付けたい。

私が見つけた多くの例は、コードにリンクして実行するための送信ボタンのための新しい.phpページを作ることを意味します - 明らかにそれはサーバー側の言語だからです - 最初の問題はそれらが送信ボタンをクリックするとイベントに戻るのではなく、空白のページ(実際のHTML出力はありません)に移動します...これはそれほど大きな問題ではありません - リダイレクトを入れることができますが、少し不格好に思えます。

2番目の問題はまた、これらの例の多くがA)自動的に生成されなければならない複数の送信ボタンを考慮に入れていないことです。B)それぞれのために引き起こされる異なるPHPコード...

これが私が必要としていることの要旨です。

        <form onsubmit="return confirm('Do you want to mark <?php echo $FullName ?> as a 'No Show' - this cannot be undone unless you are an admin');" method="post" action="<?php HELP ?>">
        <input name="NoShow<?php echo $IDuser?>" type="submit" value="No Show" class="button" /> //$IDuser is their user ID to give the values something different on the page. Could also be ticket [post] numbers?
        </form>

今サーバー側で私は実行するためにこのようなものが必要です。

    $tixID = $ticket['id']; //This gets the ticket [custom post] ID number
            $StateKey = state; //This is the meta_key that needs changing
            $NoShowing = noshow; //This is what it needs to change to.
                  update_post_meta($tixID , $StateKey , $NoShowing ); #This is the code to change the State: to No Show
            ?>

それで私は私が次の行に沿って何かを使う必要があることを集める

if(isset($_POST['SUBMIT-BUTTON'])) { 
some_function_called_here(); 
} 

しかし、これは固定されており、特定の名前を探しています - 個々のチケットを変更するため、異なる送信ボタンの名前を入力するのは物理的に不可能です - そのうちの約6,000はすでにサイトで販売されています...また、呼び出される関数は、それを呼び出したボタンに固有のものでなければなりません。

私はこれらのブログ記事のいくつかと一緒に一周するつもりでいるように私が感じるのでどんな輝く光も素晴らしいでしょう。

編集:申し訳ありません - 説明のために。

私がする必要があるのは….

  1. トリガー - ユーザーはクライアント側のボタンのリストの中の1つのボタンを押します。それはphpとそのイベントで購入したチケットをリストするforeachを使ってテーブルに生成されます。 <input name="noshow<?php echo $ticketID ?>" type="submit" value="No Show" class="button" />

  2. アクション - ボタンごとに特定のチケットに対応するボタンをクリックすると、そのチケットに対してメタデータを編集するコードが実行されます(サーバー側)。 update_post_meta($ticketID , 'state' , 'noshow' );これはキーState:noshowに更新します

  3. 結果 - ページがリロードされ、あなたは同じイベントページに留まります

これがスクリーンショットの視覚的な例です。

Screenshot Example of scenario

1
Bysander

新しいページにリダイレクトする代わりに、次のような基本的なロジックを使って、すでにアクセスしているページを使用できます。

if ( !empty( $_POST['ticket_action'] && ( $_POST['ticket_action'] == 'noshow' ) ) {
    $ticket_post_id = $_POST['ticket_post_id'];
    ... you probably want to check if the user is logged in or check for a valid nonce here ...
    // do whatever it is with the ticket post that you wanted to do here
    ?>
    <p>Success!! Or Error, or some other message dependent on what happened in form processing</p>
    <?php
}
 .... later on ...
    ?>
    <form method="post" action="">
        <input type="hidden" name="ticket_post_id" value="<?php the_ID();?>" />
        ... you should probably put a nonce here too, search this site for examples and explanations on what they are ...
        <input type="hidden" name="ticket_action" value="noshow" />
        <input type="submit" value="no show" />
    </form>
    <?php

おそらく、あなたは各ボタンのためのフォーム、あるいは単一のフォームを持つでしょう、その部分はこのサイトの範囲を超えた一般的なPHP/HTMLの質問です(スタックオーバーフローは適切な場所でしょう)

2
Tom J Nowell