选择框在数据库

时间:2015-05-26 12:33:01

标签: php sql loops pdo mysqli

这就是页面的样子:

What the current page looks like

这就是数据库的样子:

Database

现在,我将这一切都与文本字段一起使用。 (按保存时,文本字段将插入bogie_nr
现在,我不想要文本字段,只有复选框 因此,如果我选择前2个复选框,请按保存。我希望数据库按1 1和2插入数字axle_nr 现在,我希望禁用前两个框(因此您无法再次检查它们)。

现在,当您选择第3和第4个框时,请按保存。我希望数据库在第3和第4 2位置插入数字axle_nr

当所有内容都填写完毕后,我想要一个按钮,将我重定向到新页面。 我该怎么做?

代码(仅限复选框):

<tr>
    <?php   
        $show_axle = $database->bogies($_GET['train_id']);
        foreach($show_axle as $bogiebox){ ?>
            <input type='hidden' name='bogie_id[<?php echo $bogiebox['bogie_id']?>]' value='<?php echo $bogiebox['bogie_id']?>'>
            <td>
                <input type='checkbox' id="bogie_axle_fields" name='bogie_nr[<?php echo $bogiebox['bogie_id']?>]' placeholder = "enter bogie number">
            </td>
    <?php
        } 
    ?>
</tr>

功能:

function bogies($id){
        $sql = "SELECT * FROM bogie WHERE train_id = :id2";
        $sth = $this->pdo->prepare($sql);
        $sth->bindParam(":id2", $id, PDO::PARAM_STR);
        $sth->execute();
        return $sth->fetchAll();
    }

修改

我的保存按钮后面是一个页面:end_result.php。就在那里,我有一个功能:

function update_bogie($id) {
        $sql = "UPDATE bogie SET bogie_nr = :bogie_nr WHERE bogie_id = :bogie_id";
        $sth = $this->pdo->prepare($sql);
        $sth->bindParam(':bogie_id', $id, PDO::PARAM_INT);
        $sth->bindParam(":bogie_nr", $_POST['bogie_nr'][$id], PDO::PARAM_STR);
        $sth->execute();
    }

这会更新转向架表(当我将复选框更改为文本字段时工作)

我现在想要的是什么: 复选框。当我检查前2个框时,按保存。我希望数字1在轴1中插入2次,在数据库中插入2 之后,我希望选中前两个框。因此,您无法再次选择它们。

修改

ids的样子: enter image description here

几乎正在进行的编辑:

好的,所以复选框现在插入数据库中。当它们插入数据库时​​它们也被禁用。现在只有一些问题:

  1. 当我第一次插入它们时。值= 1.但是在 第二次插入它也是1.而它应该是2.
  2. 我需要刷新页面才能看到选择框是什么 禁用。我希望这会立即发生。
  3. 当我插入新值时。旧的(已禁用)返回NULL。但它应该保留旧的价值。
  4. 我现在的代码:

    <form method='POST'>
    <input type="hidden" value="true" id="y" name="y">
        <div id="axle_bogie_border">
            <div id="train_adjusted">
                <h2>
                    Train
                </h2>
            </div>
            <table id="distance_margin">
                <div id="bogiebox">
                    <tr> 
                        <?php    
                            $x = 1;  
                            foreach($show_axle as $bogiebox){ ?>
                            <input type='hidden' name='bogie_id[<?php echo $bogiebox['bogie_id']?>]' value='<?php echo $bogiebox['bogie_id']?>'>
                            <td>
                                <?php 
                                    if($bogiebox['bogie_nr'] == ''){
                                ?>
                                    <input type='checkbox' id="bogie_axle_fields" value="<?= $x ?>" name='bogie_nr[<?php echo $bogiebox['bogie_id']?>]' placeholder = "enter bogie number"></td>
                                <?php
                                    }
                                    else{ 
                                ?>
                                    <input type='checkbox' id="bogie_axle_fields" checked disabled value="<?= $x ?>" name='bogie_nr[<?php echo $bogiebox['bogie_id']?>]' placeholder = "enter bogie number"></td><?php } }
                        ?>
                    </tr>
                </div>
            </table>
            <input type='submit' id="add_train_button1" value='Save'>
    
            <?php 
                if(isset($_POST['y'])){
                $validbogies = false;
                        //validate
                        if(($_POST['bogie_id']) >0){
                                if($_POST['bogie_id'] >0){
                                        $validbogies = true;
                                }elseif($_POST['bogie_id'] <= 0){
                                    echo "Error!";
                                }
                                else{
                                        echo "Error!." . "<br>";
                                }
                        }else{
                                echo "Error!" . "<br>";
                        }
    
                        //If valid, then insert.
                        if($validbogies){
                            foreach($_POST['bogie_id'] as $id) {
                                $update_axle = $database->update_bogie($id);
                            }
                                $x++;
                                unset($_POST['y']);  
                                echo "Yea! Things have been moved to the database :)";
    
                        }
                }
            ?>
        </div>
    </form>
    

    该功能仍然与旧功能相同。

    修改
    这是一个例子:

    example

2 个答案:

答案 0 :(得分:0)

<?php   
        $show_axle = $database->bogies($_GET['train_id']);

        // First question : When everything is filled in, 
        // i want a button that redirects me to a new page.

        if(count($show_axle) == 4)
           echo "<button type=\"button\" onClick=location.href=''>Click Me!</button>";

          // Second question :
         // WE display the missing checkboxes
        // We will display until we found the first value axle_nr
       // (i.e. the checkbox the user click last time)
      //  when we found we need to move to the next value of axle_nr
        else
        {
            $j = 0;
            for($i = 0; $i < 4; ++$i)
            {
                 if($show_axle[$j]['axle_nr'] != ($i + 1))
                 {
                    echo "<input type='hidden' name='bogie_id[" . 
                          $bogiebox['bogie_id']. "]' value='" .  
                          $bogiebox['bogie_id'] . "'><td>";

                    echo "<input type='checkbox' id='bogie_axle_fields' 
                            name='bogie_nr[" . $bogiebox['bogie_id'] . 
                            "]' placeholder='enter bogie number'></td>";

                 }
                 else
                   ++$j;
           }
?>

应该这样做(mb在回声上有些错误,但算法没问题。)

答案 1 :(得分:0)

在保存按钮后面的代码中尝试以下操作:(我假设您的复选框的ID是这样的:bogie_nr [455]

    function update_bogie($id) {
            $sql = "UPDATE bogie SET bogie_nr = :bogie_nr WHERE bogie_id = :bogie_id";
            $sth = $this->pdo->prepare($sql);
            $sth->bindParam(':bogie_id', $id, PDO::PARAM_INT);
            if(isset($_POST['bogie_nr' . '[' . $id .']' ]){
              $sth->bindParam(":bogie_nr", $_POST['bogie_nr' . '[' . $id .']' ], PDO::PARAM_STR);
            }
            else {
              $sth->bindParam(":bogie_nr", 'NULL', PDO::PARAM_STR);
            }
            $sth->execute();
    }

编辑正确的号码: 让你的号码尝试做这样的查询:

SELECT COUNT(*)
FROM bogie
WHERE train_id = @youridhere;

这将返回您已经为该列车提供的转向架数量,只需要+1或+2,具体取决于您添加的元素数量(在for循环中使用计数器)并且您有正确的数字要插入