页面重新加载后提交页面时,刷新问题POST被复制

时间:2012-11-28 作者:Monika

我的网站上有一个表单,可以从前端创建帖子。因此,每次刷新页面时,我都会首先收到以下消息:

您正在查找输入的已用信息的页面。返回该页面可能会导致重复您所做的任何操作。是否要继续?

若页面被刷新,则会执行上一个操作,即创建具有与上一个帖子中相同条目的帖子。代码为:

<form action="" method="post" name="story_form" onsubmit="return vedioform()"  enctype="multipart/form-data">
    <label>Add link to your video</label><br />
    <input type="text" class="input-big" name="cntnt"/>                                       
    <label>Name</label><br />
    <input type="text" class="input-box" name="fname" />                
    <label>Email</label><br />
    <input type="text" class="input-box" name="email"  />
    <label>Your Wix website</label><br />
    <input type="text" class="input-box" name="title"/>
    Excerpt::<input type="text" class="input-box" name="excerpt"/>
    custom:::<input type="text" class="input-box" name="custom"/>
    <label>Your picture (Type: jpeg, jpg, png, gif)</label><br />
    <input type="file" size="60" id="BrowserHidden" onchange="getElementById(\'FileField\').value = getElementById(\'BrowserHidden\').value;" name="thumbnail"/>
    <input type="text" id="FileField" name="filefield" />
    <input type="submit"  class="form-submit" id="submit" value="SUBMIT" name="submit-video"/><br />
</form>

<?php
$title = $_POST[\'title\']; //from your form...
$content=$_POST[\'cntnt\'];
$excerpt=$_POST[\'excerpt\'];
$custom = $_POST[\'custom\'];
//-- Set up post values
$myPost = array(
    \'ID\' => \'\',
    \'post_title\' => $excerpt,
    \'post_excerpt\' => $excerpt,
    \'post_status\' => \'publish\',
    \'post_type\' => \'post\',
    \'post_author\' => $authorID,
    \'post_content\' =>$content,
    \'comment_status\' => \'closed\',
    \'ping_status\' => \'closed\',          
    \'post_category\' => array(\'7\'),
);

$new_post = wp_insert_post( $myPost);
add_post_meta($new_post, \'rating\', $custom, true);
?>

1 个回复
SO网友:s_ha_dum

或多或少是这样的post 作品您需要做的是WordPress在后端所做的事情。

提交表单,处理表单,重定向回原始页面post 数据这个过程有一个名字,但我现在记不起它是什么了。

get 顺便说一下,不会发出警告,但会“双重插入”。

您的问题很大一部分是代码的编写方式,每次加载页面时,您都在构建$myPost 变量和运行wp_insert_post( $myPost); 你甚至没有检查一下$_POST 进行此操作之前,请先查看数据。无论表单是否已提交,您都在尝试插入帖子。幸运的是wp_insert_post 如果缺少几个关键参数,它就会死掉。至少你应该。。。

if (!empty($_POST)) {
    $title = $_POST[\'title\']; //from your form...
    $content=$_POST[\'cntnt\'];
    $excerpt=$_POST[\'excerpt\'];
    $custom = $_POST[\'custom\'];
    //-- Set up post values
    $myPost = array(
        \'ID\' => \'\',
        \'post_title\' => $excerpt,
        \'post_excerpt\' => $excerpt,
        \'post_status\' => \'publish\',
        \'post_type\' => \'post\',
        \'post_author\' => $authorID,
        \'post_content\' =>$content,
        \'comment_status\' => \'closed\',
        \'ping_status\' => \'closed\',          
        \'post_category\' => array(\'7\'),
    );

    $new_post = wp_insert_post( $myPost);
    add_post_meta($new_post, \'rating\', $custom, true);
}
至少这不会在每次加载页面时都运行。但是,在使用元素之前,您应该真正检查它们。。。

$title = (isset($_POST[\'title\'])) ? $_POST[\'title\'] : \'\';
我会尽力sanitize it 也然后,您应该在页面的早期而不是底部处理表单,并使用wp_safe_redirect, 如果表单提交成功。由于这是前端,这意味着您需要在get_header 功能,以便在将任何内容发送到浏览器之前进行重定向。

真的,我无意冒犯你,但你的问题比你想象的要严重。您在那里的代码设计非常糟糕,有几种不同的方式。

结束

相关推荐

Getting posts by taxonomy

我想根据现有的分类术语从CPT获取一组帖子。我想我应该使用WP的get\\u posts()函数:$结果=获取文章(数组$选项);当我指定我感兴趣的CPT时,此函数工作正常:$results=get\\u posts(数组(\'post\\u type\'=>\'my\\u cpt\\u name\');但后来我用我的UOM自定义post类型尝试了这一点,并尝试使用公制进行筛选,公制是一种称为“UOM\\U system”的分类法:$results=get\\u posts(数组(\'post\\u