Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/239.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 页面刷新时表单重新提交问题-在wordpress预览页面时_Php_Wordpress_Forms - Fatal编程技术网

Php 页面刷新时表单重新提交问题-在wordpress预览页面时

Php 页面刷新时表单重新提交问题-在wordpress预览页面时,php,wordpress,forms,Php,Wordpress,Forms,我将wordpress作为CMS运行。我已经建立了一个简单的多部分表单,它工作得很好,允许从前端发布。这是一个由两部分组成的表单,第一部分是他提交数据的地方,第二步是他获得他刚刚提交的数据的预览。提交的数据如预期的那样在wp中创建了一个不错的草稿帖子 下面是表单页面模板中的第一段代码,用于显示表单。在代码的下半部分,您将看到一个预览部分(阅读代码中的注释),其中显示了刚刚提交的数据。所有这些工作都非常好,我甚至能够,在提交之后 <?php global $

我将wordpress作为CMS运行。我已经建立了一个简单的多部分表单,它工作得很好,允许从前端发布。这是一个由两部分组成的表单,第一部分是他提交数据的地方,第二步是他获得他刚刚提交的数据的预览。提交的数据如预期的那样在wp中创建了一个不错的草稿帖子

下面是表单页面模板中的第一段代码,用于显示表单。在代码的下半部分,您将看到一个预览部分(阅读代码中的注释),其中显示了刚刚提交的数据。所有这些工作都非常好,我甚至能够,在提交之后

     <?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
    }
    }
    ?>
现在在处理器中,我检查meta_键“full_name”的meta_值是否已经存在。如果出现错误,表单将显示错误并简单地停止该过程。希望它能帮助别人

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

} 
        else { 
                  //check for rest of the errors
    } 
$existingMeta=get_posts($args);
如果(!empty($existingMeta)){
$error.='Bummer',.$location.'已在数据库中。
'; 返回; } 否则{ //检查其余的错误 }
可能有两种方法:

  • 在将表单数据添加到数据库之前,检查用户上次提交的表单数据,比较它们,如果它们相同,则拒绝

  • 使用jquery的ajaxpost将数据提交到特定的处理脚本,那么即使用户刷新,浏览器也不会显示“您想再次提交吗?”提示。(我目前正在使用此技巧,效果很好)

  • 附言。 第一种解决方案很容易想出,但并不完美,当用户意外刷新页面时,丑陋的“您想再次提交此内容吗?”仍然会显示出来,我认为最好将这两种方法结合起来以添加额外的安全性。

    if(isset($\u POST['submit'])){
    
    if (isset($_POST['submit'])) {
                $error = "";
    session_start(); // just to make sure you have an active session
    
            if ($_POST['details'] != null) {
                $_SESSION['description'] = trim(strip_tags($_POST['details']));
            } else {
                $error .= 'Put description.</br>';
            }
    
            if ($_POST['location'] != null) {
                 $_SESSION['location'] = trim(strip_tags($_POST['location']));
            } else {
                $error .= 'Put location.</br>';
            }
    
        }  
    
    $error=“”; 会话_start();//只是为了确保您有一个活动会话 如果($\u POST['details']!=null){ $_SESSION['description']=trim(strip_标签($_POST['details']); }否则{ $error.='Put description.
    '; } 如果($_POST['location']!=null){ $_SESSION['location']=trim(strip_标签($_POST['location']); }否则{ $error.='Put location.
    '; } }
    我们并不是在第一步向数据库提交数据。只需将其保存在会话中,以便在步骤2中使用

    <?php echo 'h2>'.'YOUR SUBMISSION IS ACCEPTED. PREVIEW.'. '</h2>';?>
    
        <?php  //PREVIEW SECTION OF THE FORM BEGINS 
        $location=$_SESSION['location'];
        $description=$_SESSION['description'];
        ?>
    
        <?php
        echo 'Location : ' . $location . '</br>';
        echo 'Details  : ' . $description . '</br>'; 
        ?>
        <?php echo wp_get_attachment_image( $newupload,'medium' ); ?>
    
        <?php //PREVIEW ENDS
        }
        }
        ?>
    
    
    

    在第二步中,您可以将数据提交到数据库

    第一步在会话中保存数据,第二步检索数据以显示预览效果如何?我正在尝试执行您的建议,但无法获取图像,我只知道wordpress挂钩。不知道如何从会话中存储和提取映像。有什么想法吗?在会话中存储图像是复杂的,不建议使用,因为它会占用更多内存。。您可以在会话中存储图像的url,并在保存数据时使用它检索图像。您可以在会话中存储图像的url,并在保存数据时使用它检索图像,我如何做到这一点?最好举个例子,或者给我指出一个说明线程。感谢当我们提交多部分表单时,通过表单发送的所有文件都保存在全局变量
    $\u文件中
    ,类似于
    $\u POST
    对变量所做的操作。这是温度。将图像存储在某个本地目录中,以便您可以将上载的文件移动到所需位置,并将该位置存储在会话中。(听起来比实际情况更复杂。我选择了第一个解决方案和viola。请看更新。@gurung第一个解决方案很容易想出,但并不完美,当用户意外刷新页面时,丑陋的“你想再次提交吗?”尽管如此,我认为最好结合这两种方法来增加额外的安全性。这只是让您开始使用会话变量的想法,因为您将获得更少的服务器负载。干杯!
    if (isset($_POST['submit'])) {
                $error = "";
    session_start(); // just to make sure you have an active session
    
            if ($_POST['details'] != null) {
                $_SESSION['description'] = trim(strip_tags($_POST['details']));
            } else {
                $error .= 'Put description.</br>';
            }
    
            if ($_POST['location'] != null) {
                 $_SESSION['location'] = trim(strip_tags($_POST['location']));
            } else {
                $error .= 'Put location.</br>';
            }
    
        }  
    
    <?php echo 'h2>'.'YOUR SUBMISSION IS ACCEPTED. PREVIEW.'. '</h2>';?>
    
        <?php  //PREVIEW SECTION OF THE FORM BEGINS 
        $location=$_SESSION['location'];
        $description=$_SESSION['description'];
        ?>
    
        <?php
        echo 'Location : ' . $location . '</br>';
        echo 'Details  : ' . $description . '</br>'; 
        ?>
        <?php echo wp_get_attachment_image( $newupload,'medium' ); ?>
    
        <?php //PREVIEW ENDS
        }
        }
        ?>