0

我在我的网站上观察到一个奇怪的行为。实际上它是一个简单的表单,带有一个基本的 PHP 脚本,它将在我的 dB 中插入填充的数据。

我没有设法在我的计算机上重现该问题,但我在客户端计算机上(在远程连接上)观察到它。

奇怪的是,有时我的脚本会收到一个完全为空的 $_POST ......而我确信表格已经填好了。其余时间它确实正常工作。

我注意到在问题发生之前提交的等待时间更长。

这是一些代码(如您所见,它是一个 WP):

表格 :

<form id="filmform" action="<?php bloginfo('url'); ?>/post-film" method="post" enctype="multipart/form-data">
    <fieldset>
        <p>
            <label for="titre_film">Titre du film *</label>
            <input type="text" name="titre_film" id="titre_film" value="<?php echo (isset($_SESSION["form"]["titre_film"])) ? $_SESSION["form"]["titre_film"] : "" ?>" style="width:300px"/>
        </p>
        <p>
            <label for="affiche">Affiche du film</label>
            <input type="file" name="affiche" id="affiche" />
        </p>
        <p>
            <label for="nom_realisateur">Nom du/des réalisateur(s) *</label>
            <input type="text" name="nom_realisateur" id="nom_realisateur" value="<?php echo (isset($_SESSION["form"]["nom_realisateur"])) ? $_SESSION["form"]["nom_realisateur"] : "" ?>" style="width:200px" />
        </p>
        <p>
            <label for="nationalite_realisateur">Nationalité du/des réalisateur(s) *</label>
            <input type="text" name="nationalite_realisateur" id="nationalite_realisateur" value="<?php echo (isset($_SESSION["form"]["nationalite_realisateur"])) ? $_SESSION["form"]["nationalite_realisateur"] : "" ?>" style="width:200px" />
        </p>
        <p>
            <label for="societe_production">Société de production *</label>
            <input type="text" name="societe_production" id="societe_production" value="<?php echo (isset($_SESSION["form"]["societe_production"])) ? $_SESSION["form"]["societe_production"] : "" ?>" style="width:200px" />
        </p>[...]

<input type="hidden" name="action" value="wp_handle_upload" />
        <p><input type="submit" name="wp-submit" value="Inscription" /> - <input type="button" value="Imprimer" onclick="window.print()" style="cursor:pointer" /> - <input type="reset" value="Remettre le formulaire à 0" style="cursor:pointer" /></p>
    </fieldset>
</form>

我的脚本:

<?php
/*
Template Name: Récupération données formulaire film
*/

$array_field_required = array(
"categories_inscription",
"titre_film",
"reglement",
"reglement2",
"nom_realisateur",
"email_societe_production",
"societe_production_luxembourgeoise",
"nationalite_realisateur",
"producteur_delegue",
"distribution"
);
$no_meta_for_those_fields = array(
"categories_inscription",
"titre_film",
"reglement",
"reglement2",
"action",
"wp-submit",
"email_societe_production",
"redirect_to"
);

$array_errors = array();
$message_admin = "";

foreach( $_POST as $key => $value )     {
    $_SESSION["form"][$key] = $value;
}

foreach( $array_field_required as $required_field )     {
    if ( !isset( $_POST[$required_field] ) || empty( $_POST[$required_field] ) )    {
        $array_errors[] = $required_field;
    }
}

if ( sizeof( $array_errors ) > 0 )  {
    wp_redirect( get_bloginfo('url') . "/inscrire-un-film?errors=" . implode(";", $array_errors) );
    exit();
}

$post = array(
"post_type"         => "film",
"post_category"     => $_POST["categories_inscription"],
"post_name"         => $_POST["titre_film"],
"post_title"        => $_POST["titre_film"]
);
$post_id = wp_insert_post( $post, false );

if($post_id)    {
$unique = true;
foreach( $_POST as $key => $value )     {
    if ( !in_array( $key, $no_meta_for_those_fields ) )     {
        add_post_meta( $post_id, $key, $value, $unique );
    }
}
add_post_meta( $post_id, 'actif', 0, true );

if ( ! function_exists( 'wp_handle_upload' ) ) require_once( ABSPATH . 'wp-admin/includes/file.php' );
$uploadedfile = $_FILES['affiche'];
$upload_overrides = array( 'test_form' => false );

$movefile = wp_handle_upload( $uploadedfile, $upload_overrides );
$attachment = array(
    'post_mime_type' => $movefile["type"],
    'guid' => $movefile["url"],
    'post_parent' => $post_id,
    'post_title' => $_FILES['affiche']["name"],
    'post_content' => "",
);
$attach_id = wp_insert_attachment($attachment, $movefile, $post_id);
if ( $attach_id ) {
    set_post_thumbnail( $post_id, $attach_id );
}
wp_redirect( get_bloginfo('url')."/droits-d-inscription" );
}   else    {
    wp_redirect( get_bloginfo('url')."/inscrire-un-film" );
}

exit();

你有什么想法可以帮助我吗?

谢谢,朱利安

4

3 回答 3

1

如果您有名为“submit”的提交输入标签,您可以这样做:

if (!isset($_POST['submit'])) {
// or
if (!array_key_exists('submit', $_POST)) {
于 2013-10-11T08:19:42.987 回答
0

我试图找到有关您的问题的解决方案。我在 PHP 手册上搜索了有关 $_POST 的信息。我发现了这条评论:

IE6、Apache2 和 mod_auth_sspi 中的严重错误。本质上,如果用户太快按下提交按钮,$_POST(和等价物)就会返回空。解决方法是将 Apache 的 KeepAliveTimeout 设置为 1。这意味着用户需要在一秒钟内推送提交才能触发问题。

我希望它可以帮助!

斯蒂芬

于 2013-10-13T21:28:33.393 回答
0

您可以在 POST 上添加双重检查以查看它是否为空。如果它是空的,您可以添加一个重定向到表单页面并通知表单提交没有像预期的那样工作,请再试一次。

如果您发布它的一些代码,我们可以检查我们是否可以复制它。

于 2013-10-11T08:16:52.377 回答