在表单内循环复选框数组

时间:2015-06-02 09:34:19

标签: php forms checkbox

我制作了一个表单,从数据库中提取数据,然后将其作为可由用户编辑的表格查看。数据库中的数据只包含1个长度整数,1和0.如果DB中的数据为1,则选中复选框,否则,不检查它。

查询数据并查看数据的代码如下所示:

<table class="tabel-lebar">
    <tr>
        <th width="30px">ID</th>
        <th width="80px">LEVELMN</th>
        <th>NAMA</th>
        <th>STATUS</th>
        <th>ENTRY</th>
        <th>VIEW</th>
        <th>MODIFY</th>
        <th>DELETE</th>
        <th>APPROVAL</th>
    </tr>
    <?php
        $lpd = new lvl_permission_dtl();
        $perms = $lpd->getDetail($pdo, 'viewormod', $_GET['id']);
        $colLength = 9;  //hard-coded column length nya (bukan total kolom nya, tapi kolom yang mau diambil aja

        //print_r($perms[0][1]);
        for($row=0; $row<count($perms); $row++){
            echo "<tr>";
            echo "<td width='30px'> <input readonly type='text' name='idnya[]' id='idnya[]' value='". $perms[$row][0] ."' /> </td>";
            echo "<td width='80px'> <input disabled type='text' name='levelmn' id='levelmn' value='". $perms[$row][1] ."' /> </td>";
            echo "<td> <input disabled type='text' name='namanya' id='namanya' value='". $perms[$row][2] ."' /> </td>";
            echo "<td> <input type='checkbox' value='". $perms[$row][3] ."' name='statusnya[]' id='statusnya[]'". (($perms[$row][3]==1) ? 'checked' : '') ." /> </td>";
            echo "<td> <input type='checkbox' value='". $perms[$row][4] ."'name='entrynya[]' id='entrynya[]'". (($perms[$row][4]==1) ? 'checked' : '') ."/> </td>";
            echo "<td> <input type='checkbox' value='". $perms[$row][5] ."'name='viewnya[]' id='viewnya[]'". (($perms[$row][5]==1) ? 'checked' : '') ." /> </td>";
            echo "<td> <input type='checkbox' value='". $perms[$row][6] ."'name='modifynya[]' id='modifynya[]'". (($perms[$row][6]==1) ? 'checked' : '') ." /> </td>";
            echo "<td> <input type='checkbox' value='". $perms[$row][7] ."'name='deletenya[]' id='deletenya[]'". (($perms[$row][7]==1) ? 'checked' : '') ." /> </td>";
            echo "<td> <input type='checkbox' value='". $perms[$row][8] ."'name='approvalnya[]' id='approvalnya[]'". (($perms[$row][8]==1) ? 'checked' : '') ." /> </td>";
            echo "</tr>";
        }   
    ?>
</table>
<div class="clear"></div>
<input type="submit" name="btnSubmit" id="btnSubmit" value="Save" />

当用户更改表单中的数据(通过复选框)时,数据应在DB中更新。但是有一个问题,无论我在哪里编辑复选框,提交的数据都没有改变。我知道通过打印包含表单值的数组..

我所制作的代码如下:

$details = array(); 
$details_length = 13; //jumlah detail yang ada di form nya
for($i=0; $i<$details_length; $i++){ //masukin objek Permision_dtl nya ke array $details
    $pdtl = new Permission_dtl();
    $pdtl->setID($_POST['idnya'][$i]);
    $pdtl->setStatus((!empty($_POST['statusnya'][$i])) ? 1 : 0);
    $pdtl->setEntry((!empty($_POST['entrynya'][$i])) ? 1 : 0);
    $pdtl->setView((!empty($_POST['viewnya'][$i])) ? 1 : 0);
    $pdtl->setModify((!empty($_POST['modifynya'][$i])) ? 1 : 0);
    $pdtl->setDelete((!empty($_POST['deletenya'][$i])) ? 1 : 0);
    $pdtl->setApproval((!empty($_POST['approvalnya'][$i])) ? 1 : 0);

    $details[$i] = $pdtl;
    //$statDetails = $pdtl->changeDetail($pdo, 'all', '');
}

print_r($details[0]);

任何人都可以帮我吗? :)

2 个答案:

答案 0 :(得分:0)

好吧,我终于解决了它

在数据显示的表上,我在每个循环上添加了数组索引,代码现在看起来像这样

<table class="tabel-lebar">
                <tr>
                    <th width="30px">ID</th>
                    <th width="80px">LEVELMN</th>
                    <th>NAMA</th>
                    <th>STATUS</th>
                    <th>ENTRY</th>
                    <th>VIEW</th>
                    <th>MODIFY</th>
                    <th>DELETE</th>
                    <th>APPROVAL</th>
                </tr>
                <?php
                    $lpd = new lvl_permission_dtl();
                    $perms = $lpd->getDetail($pdo, 'viewormod', $_GET['id']);
                    $colLength = 9;  //hard-coded column length nya (bukan total kolom nya, tapi kolom yang mau diambil aja

                    //print_r($perms[0][1]);
                    for($row=0; $row<count($perms); $row++){
                        echo "<tr>";
                        echo "<td width='30px'> <input readonly type='text' name='idnya[$row]' id='idnya[$row]' value='". $perms[$row][0] ."' /> </td>";
                        echo "<td width='80px'> <input disabled type='text' name='levelmn' id='levelmn' value='". $perms[$row][1] ."' /> </td>";
                        echo "<td> <input disabled type='text' name='namanya' id='namanya' value='". $perms[$row][2] ."' /> </td>";
                        echo "<td> <input type='checkbox' value='". $perms[$row][3] ."' name='statusnya[$row]' id='statusnya[$row]'". (($perms[$row][3]==1) ? 'checked' : '') ." /> </td>";
                        echo "<td> <input type='checkbox' value='". $perms[$row][4] ."'name='entrynya[$row]' id='entrynya[$row]'". (($perms[$row][4]==1) ? 'checked' : '') ."/> </td>";
                        echo "<td> <input type='checkbox' value='". $perms[$row][5] ."'name='viewnya[$row]' id='viewnya[$row]'". (($perms[$row][5]==1) ? 'checked' : '') ." /> </td>";
                        echo "<td> <input type='checkbox' value='". $perms[$row][6] ."'name='modifynya[$row]' id='modifynya[$row]'". (($perms[$row][6]==1) ? 'checked' : '') ." /> </td>";
                        echo "<td> <input type='checkbox' value='". $perms[$row][7] ."'name='deletenya[$row]' id='deletenya[$row]'". (($perms[$row][7]==1) ? 'checked' : '') ." /> </td>";
                        echo "<td> <input type='checkbox' value='". $perms[$row][8] ."'name='approvalnya[$row]' id='approvalnya[$row]'". (($perms[$row][8]==1) ? 'checked' : '') ." /> </td>";
                        echo "</tr>";
                    }   
                ?>
            </table>
            <div class="clear"></div>
            <input type="submit" name="btnSubmit" id="btnSubmit" value="Save" />

另外,我仍然不知道为什么,但是isset()对我有用而不是空()

$details = array(); 
            $details_length = 13; //jumlah detail yang ada di form nya
            for($i=0; $i<$details_length; $i++){ //masukin objek Permision_dtl nya ke array $details
                $pdtl = new Permission_dtl();
                $pdtl->setID($_POST['idnya'][$i]);
                (isset($_POST['statusnya'][$i])) ? ($pdtl->setStatus(1)) : ($pdtl->setStatus(0));        //(($perms[$row][3]==1) ? 'checked' : '')
                (isset($_POST['entrynya'][$i])) ? ($pdtl->setEntry(1)) : ($pdtl->setEntry(0));
                (isset($_POST['viewnya'][$i])) ? ($pdtl->setView(1)) : ($pdtl->setView(0));
                (isset($_POST['modifynya'][$i])) ? ($pdtl->setModify(1)) : ($pdtl->setModify(0));
                (isset($_POST['deletenya'][$i])) ? ($pdtl->setDelete(1)) : ($pdtl->setDelete(0));


        (isset($_POST['approvalnya'][$i])) ? ($pdtl->setApproval(1)) : ($pdtl->setApproval(0));

                    $details[$i] = $pdtl;
                    //$statDetails = $pdtl->changeDetail($pdo, 'all', '');
                }
print_r($details[0]);

答案 1 :(得分:0)

当您发布值时使用

isset(),例如输入字段或提交按钮。 检查值的变量时会使用empty(),例如选择查询。

empty:

    if ( empty( $query ) {
     run again 
    }
    else{
    echo " Good job ";
    }

isset:

    if ( isset ( $_POST['submit'] ) ){
    echo " Hello World ";
    }