it-swarm.com.de

Helfen Sie mit Formularen und Nonces

Ich versuche, eine Nonce zu erstellen, die mit einem (öffentlich zugänglichen) Formular verwendet werden kann.

Unten ist mein 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);

Ich kann mein Formular auf meiner Seite sehen, aber wenn ich es abschicke (und es richtig ausfülle), anstatt meine "richtige" Nachricht zu sehen, sehe ich nur eine leere Seite.

1
redconservatory

Sie müssen den Wert des Feldes nonce als erstes Argument an wp_verify_nonce übergeben. Sie müssen also den Nonce-Überprüfungsteil in Ihrem Code ändern.

Außerdem haben Sie Formularfeldnamen verwendet, die mit internen WordPress-Abfragevariablen in Konflikt stehen. Sie sollten ihnen ein eindeutiges Präfix voranstellen, damit sie nicht mit WordPress in Konflikt stehen. Siehe folgendes Beispiel:

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