【问题标题】:how to name the text field generated by jquery for php $_POST to fetch variables如何命名 jquery 为 php $_POST 生成的文本字段以获取变量
【发布时间】:2012-11-09 17:01:20
【问题描述】:

我有一个 jquery 表单微调器脚本,它可以根据用户输入生成文本字段,并且运行良好。但我需要弄清楚如何命名这些字段,以便我可以使用 php $_POST 获取变量值..

请注意:根据用户输入的任何数字,每行会生成五个输入文本字段,这些字段是姓名、电话、电子邮件、性别和职位。 以下是我喜欢给每个输入字段起的名字:

cand_name, cand_phone, cand_email, cand_sex, cand_pos

请在下面的链接中找到 jquery 表单微调器脚本

http://o2decor.com/form_scripts/jquery.fspin.js

下面是html的链接

<head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Form Spinner Test</title>
        <script type="text/javascript" src="jquery-1.7.2.min.js"></script>
        <script type="text/javascript" src="jquery.fspin.js"></script>
        <script type="text/javascript">
            $(function(){
                //you have to use the ID not the name of the fields we're interested in
                jQ_Form_Spinner('#container','#myrel',jQ_Form_Spinner_data);
            });
        </script>
    </head>

<body>


<form action="course_reg.php" method="post">
<p>
<label><strong>No of Candidates</strong></label>
<label><input type="text" id="myrel" name="cand_no" placeholder="Type Your Number of Candidates" /></label>
  <div class="clear"></div>
</p>

<div style="width:660px; float: left; border: 1px solid #ccc; padding:3px 3px;" id='container'>

</div>


</form>

下面是查看运行 jscript 的表单页面的链接(它运行良好)

http://o2decor.com/form_scripts/form.php

抱歉,我无法在此处粘贴 jquery 代码,stackoverflow 不会接受我的问题,因为我没有很好地格式化代码或其他什么...如果有人可以帮助解决这个问题,将不胜感激...谢谢

【问题讨论】:

    标签: php jquery html


    【解决方案1】:

    看看这个DEMO

    下面的 JavaScript (form.php) 在使用以下命名约定提交表单时重命名字段:candidate[X][Y] — 其中 X 是行号, Y 是字段名称。

    因此,例如,第一行中的 phone 字段将命名为 candidate[0][phone],第二行中的 email 字段将命名为 candidate[1][email]

    <script>
    $(function(){
        var fields = ['name', 'phone', 'email', 'sex', 'pos'];
        $('form').on('submit', function(e){
            $('#container tbody tr').each(function(i){
                $(this).find('td').each(function(j){
                    var field = fields[j];
                    $(this).find(':input').attr('name', 'candidate[' + i + '][' + field + ']');
                });
            });
        });
    });
    </script>
    

    您在 PHP 端 (course_reg.php) 得到的是一个单一变量 ($_POST['candidate']),它以多维数组的形式包含结构化格式的所有数据。

    array(2) {
      [0]=>
      array(5) {
        ["name"]=>
        string(8) "Jane Doe"
        ["phone"]=>
        string(12) "123-555-4567"
        ["email"]=>
        string(18) "jane.doe@email.add"
        ["sex"]=>
        string(6) "female"
        ["pos"]=>
        string(3) "CEO"
      }
      [1]=>
      array(5) {
        ["name"]=>
        string(8) "John Doe"
        ["phone"]=>
        string(12) "234-555-6789"
        ["email"]=>
        string(18) "john.doe@email.add"
        ["sex"]=>
        string(4) "male"
        ["pos"]=>
        string(3) "CTO"
      }
    }
    

    使用上述数据填充的表单是什么样的:http://i.imgur.com/6yxbe.gif

    您可以使用下面的 PHP 读入这些数据。 (注意:这只是一个演示。我将把安全问题留给你。)

    <?php
    
    $candidates = array();
    
    foreach ($_POST['candidate'] as $i => $can)
    {
        $candidates[$i] = array();
    
        foreach ($can as $key => $value)
        {
            $candidates[$i][$key] = $value;
        }
    }
    
    echo '<pre>';
    var_dump($candidates);
    

    当然,var_dump($candidates) 将产生与var_dump($_POST['candidate']) 完全相同的输出,因为我们保持相同的结构。

    如何构建数据取决于您。

    更新:

    我创建了这个包含 form.phpcourse_reg.php 的 ZIP 存档:[Download]

    1. 将这两个文件上传到您的服务器。
    2. 通过网络浏览器访问 form.php
    3. 填写表单。
    4. 点击“提交”按钮。
    5. course_reg.php 现在应该会显示填充的数据。

    告诉我进展如何。

    【讨论】:

    • 对不起,我无法早点回复...感谢您的帮助,非常感谢。但我仍然无法使用“候选”数组获取表单数据。在我看来,“候选”数组不存在或 $_POST 无法找到或连接它...我知道考虑到您在上面所做的事情,我会要求太多,但如果您可以运行脚本,这将真的很有帮助在演示 (jsfiddle.net/4BEe7) 中输入一些测试数据 (John Doe),使用 php 提交并获取这些数据,然后打印或回显表单数据...再次感谢您的帮助...
    • @user1630911 我已经用下载链接更新了我的答案(朝向底部)。请查看并回复我。
    • @Coby...你就是那个男人!谢谢一万亿...你做得很好...谢谢...只是在想如何表达我的感激之情...你有一个项目网站可以让我捐款吗?或者,如果您不介意,我们可以私下讨论这个问题...您可以给我发一封电子邮件,我的 yahoo id 是 odelesamson 'at' yahoo.com...我的 Skype 名称是“sam_odele”...希望读你...谢谢!
    【解决方案2】:

    因此,您遇到的问题是您拥有动态数量的电话号码,例如,您想在帖子中捕获所有电话号码。但问题是它们都具有相同的名称。

    name="phone_number";
    

    所以你可以将它作为一个数组传递

    name="phone_number[]"
    

    然后在 php 提交页面中循环遍历它。

    我说的对吗?

    【讨论】:

    • 是的,我知道我必须使用 for 循环将值插入数据库。但在运行循环之前,我需要这些输入字段的名称,然后使用 $_POST 捕获它们。我遇到的问题是如何从 jquery 脚本(jquery.fspin.js)中命名这些输入字段...我无法在 HTML 中命名这些输入字段,并且很难在 php 提交脚本中捕获这些字段 bcos 这些输入字段是从上面的 jquery 脚本内部生成的......我不擅长 jquery,我希望你能帮助解决这个问题......谢谢
    【解决方案3】:

    您遇到的问题是您使用的 jQ_Form_Spinner 插件很烂:)

    查看它为每个表单元素创建的 name 和 id 属性:

    <input type="text" name="textfield_0" id="textfield_0" placeholder="Enter your full name" style="margin-right: 12px;" class="">
    

    配置甚至不允许您将这些名称更改为其他任何名称。基于此,您将很难让它发挥作用。

    您需要修改插件,以便jQ_Form_Spinner_getField 函数为每个表单元素创建合理的名称和id 属性。

    我的建议是摆脱 jQ_Form_Spinner 插件。你不需要它。手动编写 Javascript/jQuery 代码时,您尝试做的事情(动态创建表单)是微不足道的。如果您只是学习编码,那么这将是一个很好的开始。

    试一试,如果遇到困难,可以再问一些问题。

    【讨论】:

      猜你喜欢
      • 2011-08-29
      • 1970-01-01
      • 2022-01-17
      • 2012-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-10
      相关资源
      最近更新 更多