表单有关将一个输入克隆到具有相同名称的其他输入的值的问题

时间:2017-09-03 19:02:09

标签: php jquery html5 forms post

我的表单中有两个相同名称的输入(我使用css根据屏幕大小显示一个或另一个),但在表单子目录中,只获取最后一个值,即对我来说是一个问题,因为如果display:none它可以为空。我想出了一个技巧,其中包括克隆输入值,这个输入值对另一个非空,所以当我将POST变量发送给PHP时,任何人都可以返回输入的值。

这是我的HTML代码:

    <form id="form" class="form" name="postuler" method="post" action="receive-post.php" enctype="multipart/form-data" novalidate>
    <div class="not-hidden">
           <label for="mail">Email address <span class="required">*</span></label>
               <input type="email" class="email" placeholder="ex: jdoe@exelcia-it.com" name="email" id="email" maxlength="40" />
    </div>

    <div class="hidden-fields">
           <label for="mail">Email address <span class="required">*</span></label>
               <input type="email" class="email" placeholder="ex: jdoe@exelcia-it.com" name="email" id="email" maxlength="40"/>
    </div>
                    <input type="submit" name="upload" id="send" value="Submit" class="postu"/>
</form>

这是我的jQuery代码:

$(document).ready(function(){
    $('#envoyez').on('click', function () {
        if($.trim($('.hidden-fields #email').val())==0){
            $('.hidden-fields #email').val()==$.trim($('.not-hidden #email').val())
        } else if ($.trim($('.not-hidden #email').val())==0){
            $('.not-hidden #email').val()==$.trim($('.hidden-fields #email').val())
        }
    })
})

这是我的PHP代码:

if(!empty($_POST['email'])){
    var_dump($_POST['email']);
} else {
    echo "Theres a problem somewhere" ;
}

我得到的问题是,如果我填充not-hidden字段,在php端我得到一个空字符串,因为它总是检索隐藏字段值。

2 个答案:

答案 0 :(得分:2)

您好,您可以尝试这样

       <input type="email" class="email" placeholder="ex: jdoe@exelcia-it.com" name="email[]" id="email" maxlength="40" />
       <input type="email" class="email" placeholder="ex: jdoe@exelcia-it.com" name="email[]" id="email" maxlength="40"/>

然后你可以在php脚本中循环检查数组是否为空并获取填充的密钥。

<强>更新

以下是检查数组并获取填充密钥的方法

if (isset($_POST['email'])) {

    $emails = $_POST['email'];

    foreach ($emails as $key => $email) {

        if (!is_null($email)) {

            echo $email;
            break;
        }
    }
}

这是基本检查,您可以将电子邮件保存在变量中或执行其他检查,但这是获取值的基础

答案 1 :(得分:1)

您的jQuery代码中存在一些错误,例如:

  • 在调整输入文本字段的值后,您将直接将其与0进行比较,这是错误的。相反,您应该将其长度0进行比较。
  • $('... #email').val()==$.trim($...)==用于比较,=用于分配。

所以你的jQuery代码应该是这样的:

$(document).ready(function(){
    $('#envoyez').on('click', function () {
        if($.trim($('.hidden-fields #email').val()).length == 0){
            $('.hidden-fields #email').val($.trim($('.not-hidden #email').val()));
        } else if ($.trim($('.not-hidden #email').val()).length == 0){
            $('.not-hidden #email').val($.trim($('.hidden-fields #email').val()));
        }
    })
});

使用上面的代码段,填写哪个输入文本字段无关紧要,另一个字段也会自动更新相同的值。点击提交按钮后,您只需获得一个包含POST请求的电子邮件ID。

另一种方法是将name属性用作name='email[]'两个电子邮件输入字段。这里没有必要使用任何jQuery。

<input type="email" class="email" placeholder="ex: jdoe@exelcia-it.com" name="email[]" id="email" maxlength="40" />   
<input type="email" class="email" placeholder="ex: jdoe@exelcia-it.com" name="email[]" id="email" maxlength="40"/>

这样,您可以通过以下方式访问提交的电子邮件ID(与填写哪个输入文本字段无关),

if(isset($_POST['email'])){
    $email = array_values(array_filter($_POST['email']));
    if(count($email))
        echo $email[0];
    else
        echo "Theres a problem somewhere";
}