Help with forms and nonces

时间:2011-07-29 作者:redconservatory

我正在尝试创建一个用于(面向公众的)表单的nonce。

下面是我的代码:

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);
我可以在我的页面上看到我的表格,但当我提交(并正确填写)时,我看到的不是我的“正确”信息,而是空白页面。

1 个回复
最合适的回答,由SO网友:Hameedullah Khan 整理而成

你需要通过value of the nonce field 作为的第一个参数wp_verify_nonce. 因此,您需要修改代码中的nonce验证部分。

此外,您使用的表单字段名称与内部wordpress查询变量冲突,您应该在它们前面加上唯一的前缀,这样它们就不会与wordpress冲突。请参见以下示例:

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

结束

相关推荐

为什么我需要在使用wp_nonce_field()之前检查它是否存在

我真的不明白为什么在运行nonce函数之前要检查它是否存在。。。if ( function_exists(\'wp_nonce_field\') ) wp_nonce_field(\'gmp_nonce_check\'); 我理解它的向后兼容性。。。还要注意您是如何验证wp_nonce_field 函数在尝试调用它以实现向后兼容性之前已存在但如果我在邮件背面检查,它会不会破裂if ( isset($_POST[\'submit\']) ) { check_a