表单循环数据库插入+ javascript更改

时间:2010-03-13 08:32:04

标签: php javascript html-form

在重写所有代码之前,我基本上需要检查是否有更简单的方法来执行此操作。我有一个相当大的表单,我的每个输入都以[]的名称命名,所以我可以通过php循环以便于插入。

            <input type="hidden" name="currentdate[]" value="<?php echo date('mdY'); ?>">
                <td><input style="width: 50px" type="text" name="jackname[]" /></td>
                <td><input style="width: 20px" type="text" name="jackkey[]" /></td>
                <td><input style="width: 50px" type="text" name="jackbeg[]" /></td>
                <td><input style="width: 50px" type="text" name="jackend[]" /></td>
                <td><input style="width: 50px" type="text" name="jackbegveh" /></td>
                <td><input style="width: 50px" type="text" name="jackbegmon[]" /></td>
                <td><input style="width: 50px" type="text" name="jackendveh" /></td>
                <td><input style="width: 50px" type="text" name="jackendmon[]" /></td>
                <td><input style="width: 50px" type="text" name="jacktx" disabled /></td>

还有更多的领域,但你明白了。然后我用

foreach ($_POST['jackname'] as $row=>$name) 
{ 
    $jackname = $name;
    $date = $_POST['currentdate'][$row];
    $jackkey = $_POST['jackkey'][$row];
    $jackbeg = $_POST['jackbeg'][$row];
    $jackend = $_POST['jackend'][$row];
    $jackbegveh = $_POST['jackbegveh'][$row];
    $jackbegmon = $_POST['jackbegmon'][$row];
    $jackendveh = $_POST['jackendveh'][$row];
    $jackendmon = $_POST['jackendmon'][$row];
    $jacktx = $_POST['jacktx'][$row];
    if ($jacktx == '') { 
        $jacktx = '0'; 
    }

    if (empty($jackkey)) {
        echo 'Skipped empty! <br />';

    } else {
        mysql_query("INSERT INTO `ticket_counts_jackson` VALUES('', '" . $date . "', '" . $jackname . "', '" . $jackkey . "', '" . $jackbeg . "', '" . $jackend . "', '" . $jackbegveh . "', '" . $jackbegmon . "', '" . $jackendveh . "', '" . $jackendmon . "', '" . $jacktx . "')", $mysql_link) or die(mysql_error()); 
        echo 'Added the info the db! <br />';

    }
} 

我使用上面的方法遍历表单并将其添加到数据库中。现在我的主要问题。我还想添加一些javascript来做一些数学运算。基本上($jackendveh - $jackbegveh) - ($jackendmon - $jackbegmon)并在jacktx中显示。目前我知道添加数学计算的唯一方法是将每个输入重命名为唯一名称,然后将插入从1个插入重写为8个插入。

3 个答案:

答案 0 :(得分:1)

我会为每个输入字段添加一个ID,如此

        <td><input id="jackname" style="width: 50px" type="text" name="jackname[]" /></td>
        <td><input id="jackkey" style="width: 20px" type="text" name="jackkey[]" /></td>
        <td><input id="jackbeg" style="width: 50px" type="text" name="jackbeg[]" /></td>
        <td><input id="jackend" style="width: 50px" type="text" name="jackend[]" /></td>
        <td><input id="jackbegveh" style="width: 50px" type="text" name="jackbegveh" /></td>
        <td><input id="jackname" style="width: 50px" type="text" name="jackbegmon[]" /></td>
        <td><input id="jackname" style="width: 50px" type="text" name="jackendveh" /></td>
        <td><input id="jackendmon" style="width: 50px" type="text" name="jackendmon[]" /></td>
        <td><input id="jacktx" style="width: 50px" type="text" name="jacktx" disabled /></td>

然后使用jQuery你应该能够这样做

$(document).ready(function(){
   $("input").change(function(){
      var value = $("#jackendveh").val() - $("#jackbegveh").val() - $("#jackendmon").val() - $("#jackbegmon").val();
      $("#jacktx").val(value);
   });
});

答案 1 :(得分:0)

我认为这很简单

// Function to save sql in array
function save_sql($table,$data,$ref)
    {
    if(!empty($data)) foreach($data as $k => $v) $str .= "$k = '$v',"; $str = substr($str,0,-1);
    $sql = "INSERT INTO $table SET $str";
    $run = mysql_query($sql) or die(mysql_error() . "-Ref# $ref");
    return $run;
    }
// Extract post arrays into variables
extract ($_POST);

foreach ($_POST['jackname'] as $row=>$name) 
{ 
    $jackname = $name;
    $date = $currentdate[$row];
    if ($jacktx[$row] == '') { 
        $jacktx[$row] = '0'; 
    }

    if (empty($jackkey)) {
        echo 'Skipped empty! <br />';

    } else {
    save_sql("ticket_counts_jackson",array('date'=>$currentdata[$row],
                                            'jackname'=>$name,'jackkey'=>$jackkey[$row],
                                            'jackbeg'=>$jackbeg[$row], 'jackend'=>$jackend[$row])
                                            ,"An error while process your request");
    }
} 

答案 2 :(得分:0)

我从@Travis获取并修改了他的jquery以适应我的情况如下:

<script type="text/javascript">
$(document).ready(function(){
       $("input").change(function(){
              var value = $("#jackendveh").val() - $("#jackbegveh").val();
              var valuetwo = $("#jackendmon").val() - $("#jackbegmon").val();
              var valuethree = value - valuetwo;
              $("#jacktx").val(valuethree);
           });
        });
</script>

所以我将在每个表单部分都有唯一的id,并为每个表单部分分别使用jquery函数并使用我原来的sql循环。