【问题标题】:Form Issue on cloning value of one input to other input with same name将一个输入的值克隆到具有相同名称的另一个输入的表单问题
【发布时间】:2023-04-03 21:45:01
【问题描述】:

我的表单中有两个同名的输入(我使用 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 端我会得到一个空字符串,因为它总是检索隐藏字段值。

【问题讨论】:

  • 不要使用同名的输入字段。 display:none 对发布的值没有影响。
  • 你为什么不给输入不同的名字呢?然后在您的 PHP 代码中确定您要使用哪一个。
  • 我之所以要这样做是因为php端不仅仅是我放在这里的东西,那只是一个调试草稿,但我曾经给它们起了不同的名字但不能在 php 方面完成工作(我在某些时候遇到错误..)

标签: php jquery html forms post


【解决方案1】:

你好,你可以这样试试

       <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脚本来检查数组是否为空并获取填充的key。

更新

这是检查数组并获取填充键的方法

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

    $emails = $_POST['email'];

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

        if (!is_null($email)) {

            echo $email;
            break;
        }
    }
}

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

【讨论】:

  • 谢谢,好吧,我不知道如何在 php 中执行此操作 .. ?你会帮忙吗?
  • 检查答案。
【解决方案2】:

您的 jQuery 代码中有几处错误,例如:

  • 修剪输入文本字段的值后,您直接将其与0 进行比较,这是错误的。相反,您应该将它的 length0 进行比较。
  • $('... #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()));
        }
    })
});

使用上面的 sn-p,填写哪个输入文本字段都没有关系,另一个字段也会自动更新为相同的值。一旦您点击提交按钮,您将只收到一个带有 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";
}

【讨论】:

  • "你的代码中没有元素的 id 等于 envoyez" - 对;那是id="send" 的法语;-) 也许他们是从某个地方的教程中获取的,却忘记将其翻译成他们给定的语言。
  • @Fred-ii- 啊,就是这样。 :-) OP 一定忘记在 jQuery 代码中翻译它了。
  • 这就是我的想法(发生了)。
  • 谢谢!对于 id "envoyez",实际上我的没问题,我可能在这篇文章中更改了它。我要试试这个。
  • 好的,谢谢我使用了 jQuery 部分,终于可以使用了!!谢谢
猜你喜欢
  • 1970-01-01
  • 2014-11-28
  • 2021-10-07
  • 1970-01-01
  • 1970-01-01
  • 2014-12-19
  • 1970-01-01
  • 2017-07-19
  • 2016-07-09
相关资源
最近更新 更多