web-dev-qa-db-fra.com

Utiliser plusieurs boutons de soumission pour déclencher des fonctions php personnalisées

Je vais peut-être dans ce sens complètement faux, mais gardez avec moi ... J'ai une longue liste d'invités qui est automatiquement renseignée à l'aide d'une table foreach.

Je voudrais mettre un bouton "No Show" sur cette liste afin que, sans être administrateur, l'hôte de l'événement puisse cliquer (côté client) sur "No Show" et mettre à jour le méta (message personnalisé) du ticket (état personnalisé): "noshow"

Un grand nombre d'exemples que j'ai trouvés impliquent de créer une nouvelle page .php pour le bouton d'envoi vers lequel effectuer le lien et exécuter le code [de toute évidence, car il s'agit d'un langage côté serveur] - le premier problème est alors, une fois qu'ils ont cliqué sur le bouton d'envoi, il va vers une page vierge (sans véritable sortie HTML) plutôt que de revenir à leur événement ... Ce n'est pas un gros problème - je peux mettre une redirection, je suppose, mais cela semble un peu maladroit.

Le deuxième problème est également que beaucoup de ces exemples ne prennent pas en compte A) Plusieurs boutons de soumission à produire automatiquement B) Un code PHP différent à déclencher pour chacun d'eux ...

Voici le résumé de ce que je dois faire ci-dessous:

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

Maintenant, côté serveur, j'ai besoin de quelque chose comme ceci pour fonctionner:

    $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
            ?>

Donc, je suppose que je dois utiliser quelque chose dans le sens de

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

Mais ceci est corrigé et cherche un certain nom - il me serait physiquement impossible de saisir les différents noms des boutons de soumission car il modifierait des tickets individuels - dont environ 6 000 ont déjà été vendus sur le site ... De plus, la fonction appelée devrait être unique pour le bouton qui l’appelle.

N'importe quelle lumière brillante serait géniale car je sens que je tourne en rond avec certains de ces articles de blog.

EDIT: Désolé - pour clarification.

Ce qu'il me faut, c'est ...

  1. Déclencheur - L'utilisateur appuie sur un bouton dans une liste de boutons côté client. Il est généré dans un tableau utilisant php et un foreach qui répertorie les billets achetés pour cet événement. <input name="noshow<?php echo $ticketID ?>" type="submit" value="No Show" class="button" />

  2. Action - Chaque bouton correspond à un ticket particulier. Une fois que le bouton est cliqué pour ce ticket, il exécute le code permettant de modifier les métadonnées de ce ticket, côté serveur. update_post_meta($ticketID , 'state' , 'noshow' ); Ceci met à jour la clé State: à noshow

  3. Résultat - La page est rechargée et vous restez sur la même page d'événement.

Voici un exemple visuel de la capture d'écran

Screenshot Example of scenario

1
Bysander

Au lieu de rediriger vers une nouvelle page, vous pouvez utiliser celle que vous utilisez déjà avec une logique de base similaire à celle-ci:

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

Peut-être aurez-vous un formulaire pour chaque bouton, ou un formulaire unique, cette partie est une question générique PHP/HTML dépassant le cadre de ce site (le débordement de pile serait l'endroit approprié)

2
Tom J Nowell