刷新页面时表单重新提交的问题-在Wordpress中预览页面时

古龙

我将WordPress作为CMS运行。我整理了一个简单的多部分表单,效果很好,可以从前端发布。它分为两部分,第一部分是他提交数据的地方,第二部分是他预览刚提交的数据的地方。提交的数据按预期在wp中创建了一个不错的草稿帖子。

这是表单页面模板中的第一部分代码,用于显示表单。在代码的下部,您会注意到一个PREVIEW一节阅读代码中的注释),其中显示了刚刚提交的数据。所有这些工作都非常好,提交后,我什至能够检索图像

     <?php
            global $wpdb;
            $this_page  =   $_SERVER['REQUEST_URI'];
            $page       =   $_POST['page'];
            if ( $page == NULL ) { ?> 

        <form method="POST" id="test_form" name="test_form" enctype="multipart/form-data" action="">

        <div>LOCATION : <input type="text" name="location" id="location"/></div>

        <div>DESCRIPTION : <textarea id="details" cols="80" rows="10 maxlength="600" name="details" rows="20"></textarea></div>

        <div>UPLOAD IMAGE : <input type="file" name="loc-image" id="loc-image" tabindex="25" /></div>


        <input type="hidden" value="1" name="page" />
        <input type="hidden" name="action" value="post_action" />
        <input type="submit" name="submit" id="submit" value="PROCEED"/>
        </form>

        <?php 
        } else if ( $page == 1 ) { ?> 

        <?php include_once('validate_first_step.php'); ?>
        <?php if (isset($_POST['submit']) && (!empty($error))) { ?>

                    <h3>Submission Failed.  Errors highlighted below.</h3><br/>
                    <a href="javascript:history.go(-1)">GO BACK</a><br/><br/>
                    <?php echo $error . '</br>';
                    } else { ?>


<?php echo 'h2>'.'YOUR SUBMISSION IS ACCEPTED. PREVIEW.'. '</h2>';?>

    <?php  //PREVIEW SECTION OF THE FORM BEGINS 
    $location=$_POST['location'];
    $description=$_POST['details'];
    ?>

    <?php
    echo 'Location : ' . $location . '</br>';
    echo 'Details  : ' . $description . '</br>'; 
    ?>
    <?php echo wp_get_attachment_image( $newupload,'medium' ); ?>

    <?php //PREVIEW ENDS
    }
    }
    ?>

这是处理表单的方式。实际的代码非常复杂,我刚刚在这里输入了传达想法的必要条件。用于插入wordpress的相当标准的东西。

if( 'POST' == $_SERVER['REQUEST_METHOD'] &&  !empty( $_POST['action'] ) && $_POST['action'] == "post_action") {


    // Do some minor form validation to make sure there is content
    if (isset($_POST['submit'])) {
            $error = "";

        if ($_POST['details'] != null) {
            $description = trim(strip_tags($_POST['details']));
        } else {
            $error .= 'Put description.</br>';
        }

        if ($_POST['location'] != null) {
            $location = trim(strip_tags($_POST['location']));
        } else {
            $error .= 'Put location.</br>';
        }

    }  



            if (empty($error)) {   
            $new_post = array(   //insert form inputs, set var and define array
            'post_title'    =>  $location, 
            'post_content'  =>  $description,
            'post_status'   =>  'draft',
            'post_author'   =>  '2',    
            'post_type' =>  'post'  
            // assigning tags and categories are no issue
            );

            $pid = wp_insert_post($new_post);


                    //attachment helper function    
                    function insert_attachment($file_handler,$post_id,$setthumb='false') {

                    if ($_FILES[$file_handler]['error'] !== UPLOAD_ERR_OK){ return __return_false(); 
                    } 
                    require_once(ABSPATH . "wp-admin" . '/includes/image.php');
                    require_once(ABSPATH . "wp-admin" . '/includes/file.php');
                    require_once(ABSPATH . "wp-admin" . '/includes/media.php');

                    $attach_id = media_handle_upload( $file_handler, $post_id );

                    //set post thumbnail
                    if ($setthumb) update_post_meta($post_id,'_thumbnail_id',$attach_id);
                    return $attach_id;
                    }


                    //INSERT OUR MEDIA ATTACHMENTS
                    if ($_FILES) {
                    foreach ($_FILES as $file => $array) {
                    $newupload = insert_attachment($file,$pid);
                    }
                    } 

        } //end of if empty error
    }

问题:这是我在测试表格时注意到的问题。在我处于“预览”部分时提交表单后,当我刷新页面时,数据将按预期正确显示,但是将同一数据再次提交到wordpress中,从而创建了重复的草稿。

尝试过的事情:我知道重定向解决方案,并且能够使用wp_redirect,但是重定向并不是我想要的,因为我需要向他们展示预览。我已经花了几个小时寻找解决方案和替代方案,并且仍在继续。

请求:请让我知道如何阻止这种情况的发生。我不能指望人们不要单击刷新,他们基本上会做他们想做的事。因此,我想使用服务器端php来代替javascript通知。即使禁用了javascript,它也会执行,其余的代码也会执行。基本上,我需要一种解决方案,该解决方案在提交后完全忽略刷新。请给我建议代码或正确方向的提示,以使之成为可能。非常感谢。


更新:正如@ user2758004所建议的,我尝试了比较方法,它起作用了。我将以下代码放在处理器顶部。

$location=$_POST['location'];

$args = array(
        'post__not_in'=> array($id),
        'post_type' => 'post',
        'post_status' => array('publish','pending','draft','future','private'),
        'meta_query' => array(
        'relation' => 'AND',

        array(
        'key' => 'location',
        'value' => $location,
        'compare' => '='
        ),
    )
);

现在在处理器中,我检查meta_key'full_name'的meta_value是否已经存在。如果确实如此,则表单将显示错误并仅停止该过程。希望它能帮助某人。

    $existingMeta = get_posts( $args );
        if(!empty($existingMeta)){ 
    $error .= 'Bummer, ' .$location. ' is already in database.</br>';
        return;

} 
        else { 
                  //check for rest of the errors
    } 
火星

可能有两种方法:

  1. 在将表单数据添加到数据库之前,请检查用户最后提交的表单数据,将它们进行比较(如果它们相同),然后拒绝。

  2. 使用jquery的ajax帖子将数据提交到特定的处理脚本,然后即使用户刷新,浏览器也不会显示“您是否想再次提交?” 小费。(我目前正在使用此技巧,并且效果很好)

PS。第一个解决方案很容易提出,但并不是完美的,当用户不小心刷新页面时,丑陋的“您想再次提交吗?” 仍然显示,我认为最好将这两种方法结合起来以增加安全性。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

用户在JSP中刷新页面时如何避免重新提交表单

来自分类Dev

在刷新页面时停止重新提交数据,PHP

来自分类Dev

MVC 5阻止表单提交时刷新页面

来自分类Dev

PHP:无效表单提交时刷新页面

来自分类Dev

表单是否在提交时刷新页面?

来自分类Dev

无需重新提交表单即可刷新页面

来自分类Dev

提交表单而不刷新页面

来自分类Dev

在提交表单重定向到另一个页面时刷新页面

来自分类Dev

提交表单时如何避免刷新页面而又不致使页面滞后?

来自分类Dev

在React中阻止提交时刷新页面

来自分类Dev

如何停止刷新页面中的表单提交按钮?

来自分类Dev

在React前端中提交表单时重定向和刷新页面

来自分类Dev

使用Jquery,Ajax提交表单而不刷新页面时无法读取数据库

来自分类Dev

每次提交表单后刷新页面时,用户都会被注册

来自分类Dev

当我点击提交按钮 django 时,无法验证表单并刷新页面

来自分类Dev

在提交时更新DIV,而无需刷新页面

来自分类Dev

在刷新页面时重新创建数据

来自分类Dev

在刷新页面时重新创建数据

来自分类Dev

刷新页面时如何重新加载mysql表

来自分类Dev

验证并提交表单,而无需刷新页面

来自分类Dev

提交表单而不刷新页面ajax,php,javascript?

来自分类Dev

表单提交刷新页面上的jQuery

来自分类Dev

为什么我的表单提交仍然刷新页面?

来自分类Dev

Ajax提交表单而不刷新页面

来自分类Dev

提交表单后,CodeIgniter刷新页面

来自分类Dev

在提交时停止重新整理数组,但在刷新页面时继续重新整理数组

来自分类Dev

我需要帮助才能在php页面上获取表单,以在提交时强制刷新页面

来自分类Dev

提交刷新页面中的jQuery

来自分类Dev

单击链接时刷新页面

Related 相关文章

  1. 1

    用户在JSP中刷新页面时如何避免重新提交表单

  2. 2

    在刷新页面时停止重新提交数据,PHP

  3. 3

    MVC 5阻止表单提交时刷新页面

  4. 4

    PHP:无效表单提交时刷新页面

  5. 5

    表单是否在提交时刷新页面?

  6. 6

    无需重新提交表单即可刷新页面

  7. 7

    提交表单而不刷新页面

  8. 8

    在提交表单重定向到另一个页面时刷新页面

  9. 9

    提交表单时如何避免刷新页面而又不致使页面滞后?

  10. 10

    在React中阻止提交时刷新页面

  11. 11

    如何停止刷新页面中的表单提交按钮?

  12. 12

    在React前端中提交表单时重定向和刷新页面

  13. 13

    使用Jquery,Ajax提交表单而不刷新页面时无法读取数据库

  14. 14

    每次提交表单后刷新页面时,用户都会被注册

  15. 15

    当我点击提交按钮 django 时,无法验证表单并刷新页面

  16. 16

    在提交时更新DIV,而无需刷新页面

  17. 17

    在刷新页面时重新创建数据

  18. 18

    在刷新页面时重新创建数据

  19. 19

    刷新页面时如何重新加载mysql表

  20. 20

    验证并提交表单,而无需刷新页面

  21. 21

    提交表单而不刷新页面ajax,php,javascript?

  22. 22

    表单提交刷新页面上的jQuery

  23. 23

    为什么我的表单提交仍然刷新页面?

  24. 24

    Ajax提交表单而不刷新页面

  25. 25

    提交表单后,CodeIgniter刷新页面

  26. 26

    在提交时停止重新整理数组,但在刷新页面时继续重新整理数组

  27. 27

    我需要帮助才能在php页面上获取表单,以在提交时强制刷新页面

  28. 28

    提交刷新页面中的jQuery

  29. 29

    单击链接时刷新页面

热门标签

归档