web-dev-qa-db-fra.com

Aide aux formulaires et aux nonces

J'essaie de créer un nonce à utiliser avec un formulaire (destiné au public).

Ci-dessous mon code:

function my_form() {
    if (isset($_POST['submit'])) { 

    $name = $_POST['name'];
    $description = $_POST['description'];
    $output_form = false;

        if (wp_verify_nonce($_POST['added'], 'add-item') )
        {
        //validate
        echo 'form submitted with nonce correctly';
        }

    } else {
       $output_form = true;
    }
    if ($output_form) {
    ?>
    <form method="post" action="">
        <?php wp_nonce_field('add-item','added'); ?>
            <label>Title:</label><br/>
            <input type="text" name="name" value="<?php echo $name; ?>"/><br/>
            <label>Description:</label><br />
            <textarea name="description" rows="3" cols="10"><?php echo $description; ?></textarea><br/>
            <input type="submit" name="submit" value="submit">
        </form>
    <?php
    }   

}

add_shortcode('PODS FORM', my_form);

Je peux voir mon formulaire sur ma page, mais lorsque je le soumets (et le remplis correctement) au lieu de voir mon message "correct", je ne vois que la page blanche.

1
redconservatory

Vous devez passer la valeur du champ nonce en tant que premier argument de wp_verify_nonce . Vous devez donc modifier la partie vérification de nonce dans votre code.

De plus, si vous utilisiez des noms de champs de formulaire en conflit avec les vars de requête wordpress internes, vous devez les préfixer avec quelque chose d'unique afin qu'ils ne soient pas en conflit avec wordpress. Voir l'exemple suivant:

function my_form() {
    if (isset($_POST['pf_submit'])) { 

    $name = $_POST['pf_name'];
    $description = $_POST['pf_description'];
    $output_form = false;

        if (isset( $_POST['pf_added'] ) && wp_verify_nonce($_POST['pf_added'], 'add-item') )
        {
        //validate
        echo 'form submitted with nonce correctly';
        }

    } else {
       $output_form = true;
       $name = "";
       $description = "";
    }
    if ($output_form) {
    ?>
    <form method="post" action="">
        <?php wp_nonce_field('add-item','pf_added'); ?>
            <label>Title:</label><br/>
            <input type="text" name="pf_name" value="<?php echo $name; ?>"/><br/>
            <label>Description:</label><br />
            <textarea name="pf_description" rows="3" cols="10"><?php echo $description; ?></textarea><br/>
            <input type="submit" name="pf_submit" value="submit">
        </form>
    <?php
    }   

}

add_shortcode('PODS FORM', my_form);
2
Hameedullah Khan