0

我有一个 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 不会接受我的问题,因为我没有很好地格式化代码或其他什么...如果有人可以帮助解决这个问题,将不胜感激...谢谢

4

3 回答 3

0

您遇到的问题是您使用的 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 代码时,您尝试做的事情(动态创建表单)是微不足道的。如果您只是学习编码,那么这将是一个很好的开始。

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

于 2012-11-12T19:40:06.420 回答
0

看看这个演示

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

因此,例如,第一行中的电话字段将被命名candidate[0][phone],第二行中的电子邮件字段将被命名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 存档:[下载]

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

让我知道事情的后续。

于 2012-11-09T19:02:45.953 回答
0

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

name="phone_number";

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

name="phone_number[]"

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

我对么?

于 2012-11-09T17:08:08.293 回答