从复选框计数在DB中插入查询

时间:2016-07-25 10:11:34

标签: php html sql checkbox

我的HTML页面中有一些复选框。当用户选择例如六个复选框时,我想将其保存到数据库中,例如1表示第一个复选框,2表示第二个....和6表示最后一个复选框:

foreach ($tape as $tap) {
    //some variables
    // I have tried this but it gives me 1 everytime. 
    $i = 1;
    $i = sprintf('%02d', $i);
    $array = array($the_date, $i);
    $ref = implode(".Tape.", $array); // for 2016_73_98.Tape.01

    $stmt = $pdo->prepare(
            "INSERT INTO test (server, tape, 'date', reference, tape_name) 
         VALUES (:server, :tape, :the_date, :reference, :tape_name)"
    );
    $stmt->bindParam(':server', $server);
    $stmt->bindParam(':tape', $tap);
    $stmt->bindParam(':the_date', $the_date);
    $stmt->bindParam(':reference', $my_tape);
    $stmt->bindParam(':tape_name', $ref);

    $result = $stmt->execute();
    $i++;
}

我尝试使用$count的for循环来计算已检查元素的数量,但它为6个输入中的每一个插入相同选择的6倍。 image

我想替换" tape_name" column,01 with(01表示第一个MA0001,02表示MA0002 ....)它与引用没有任何关系,它必须跟随已选中复选框的数量。

<?php

for ($i = 1; $i < 101; $i++): //adjust this number to whatever number of checkboxes you want
    echo '<div class="each_checkboxes">';
    echo '<label for="checkbox' . $i . '">' . $i . '</label>';
    echo '<input type="checkbox" name="tape[]" id="checkbox' . $i . '" value="' . $i . '"/>';

    echo '</div>';

endfor;
?>

1 个答案:

答案 0 :(得分:0)

你甚至不需要在这里使用$i增量,因为你已经在增加的数字中存储了增加的数字。

您只需要像这样获取所选的复选框值。

foreach ($tape as $tap) {
    //some variables
    // I have tried this but it gives me 1 everytime. 
    $i = sprintf('%02d', $tap);
    $array = array($the_date, $i);
    $ref = implode(".Tape.", $array); // for 2016_73_98.Tape.01

    $stmt = $pdo->prepare(
            "INSERT INTO test (server, tape, 'date', reference, tape_name) 
             VALUES (:server, :tape, :the_date, :reference, :tape_name)");

    $stmt->bindParam(':server', $server);
    $stmt->bindParam(':tape', $tap);
    $stmt->bindParam(':the_date', $the_date);
    $stmt->bindParam(':reference', $my_tape);
    $stmt->bindParam(':tape_name', $ref);

    $result = $stmt->execute();
}

<强>被修改

现在,如果您仅选择了第5个复选框和第10个复选框,则第5个选中的复选框将获得磁带01和第10个选中复选框将获得磁带02.在该方案中,以下代码将非常有用

$i = 1;
foreach ($tape as $tap) {
    //some variables
    // I have tried this but it gives me 1 everytime. 
    $i = sprintf('%02d', $i);
    $array = array($the_date, $i);
    $ref = implode(".Tape.", $array); // for 2016_73_98.Tape.01

    $stmt = $pdo->prepare(
            "INSERT INTO test (server, tape, 'date', reference, tape_name) 
             VALUES (:server, :tape, :the_date, :reference, :tape_name)");

    $stmt->bindParam(':server', $server);
    $stmt->bindParam(':tape', $tap);
    $stmt->bindParam(':the_date', $the_date);
    $stmt->bindParam(':reference', $my_tape);
    $stmt->bindParam(':tape_name', $ref);

    $result = $stmt->execute();
    $i++;
}

让我知道它是否适合你。

了解进一步的要求后编辑

在脚本中添加以下jquery代码

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script>
$(document).ready(function () {

    $("input[type='checkbox']").click(function(){

       var cnt = Number($("#store_count").val());

        var checked_index = $(this).val(); alert("checked_index:" + checked_index);

        if($(this).is(":checked")){

            $(this).val(cnt); $("#store_count").val(cnt + 1);
        }
        else{

            $(this).val("");

            $("input[type='checkbox']:checked").each(function(){

                if( $(this).val() > checked_index ){ $(this).val(Number($(this).val()) - 1); }
            });

            $("#store_count").val(cnt - 1);
        }
    });
});
</script>

然后在HTML代码中进行以下更改,我们需要一个隐藏字段来跟踪计数器。

<?php
for ($i = 1; $i < 10; $i++): //adjust this number to whatever number of checkboxes you want

    echo '<div class="each_checkboxes">';
    echo '<label for="checkbox' . $i . '">' . $i . '</label>';
    echo '<input type="checkbox" name="tape[]" id="checkbox' . $i . '" value=""/>';
    echo '</div>';

endfor;

echo '<input type="hidden" id="store_count" value="1" />';
?>

最后将数据插入数据库代码

你甚至不需要在这里使用$ i增量,因为你已经将增加的数字存储在复选框中。

您只需要像这样获取所选的复选框值。

foreach ($tape as $tap) {
    //some variables
    // I have tried this but it gives me 1 everytime. 
    $i = sprintf('%02d', $tap);
    $array = array($the_date, $i);
    $ref = implode(".Tape.", $array); // for 2016_73_98.Tape.01

    $stmt = $pdo->prepare(
            "INSERT INTO test (server, tape, 'date', reference, tape_name) 
             VALUES (:server, :tape, :the_date, :reference, :tape_name)");

    $stmt->bindParam(':server', $server);
    $stmt->bindParam(':tape', $tap);
    $stmt->bindParam(':the_date', $the_date);
    $stmt->bindParam(':reference', $my_tape);
    $stmt->bindParam(':tape_name', $ref);

    $result = $stmt->execute();
}