簡體   English   中英

MySQL PHP更新多個復選框

[英]MySQL PHP update multiple checkboxes

我想更新mysql中兩個表的詳細信息,其中一個包含服務器詳細信息的表正在正確更新,但是我在努力更新復選框的值(嘗試在mysql中的復選框表中刪除或插入),從而用戶選擇了所需的復選框添加或從數據庫中刪除。

這是我的表格:

         <form role="form" method="post" action="update_serv.php" >
                                    <div class="form-group">
                                        <label>Server IP:</label>
                                        <input class="form-control" id="ip" name="ip" value="<?php echo $server_ip;?>" required>
                                        <p class="help-block">Example 192.168.100.12</p>
                                    </div>
                                    <div class="form-group">
                                        <label>Server Name:</label>
                                        <input class="form-control" id="na" name="na" value="<?php echo $server_name;?>" required>
                                        <p class="help-block">Example Email Server</p>
                                    </div>
                                    <div class="form-group">
                                        <label>Server Description:</label>
                                        <input class="form-control" id="de" name="de" value="<?php echo  $server_description;?>" required>
                                    </div>
                                    <div class="form-group">
                                    <label>Server Ports:</label>
                                    <label class="checkbox-inline" id="po">
                                            <input type="checkbox" value="None" >None
                                    </label>
                                    <?php 
                                    // Get Server Information
                                        $query = "SELECT port_no FROM _servers WHERE (server_id = '$servid') ";
                                        $result = mysql_query($query)or die ('Unable to run query:'.mysql_error());
                                        while($row = mysql_fetch_assoc($result)){

                                        $sport_no = $row['port_no'];

                                    }



                                    $query = "SELECT id, name, port_no FROM ports ORDER BY name ASC";
                                        $result = mysql_query($query)or die ('Unable to run query:'.mysql_error());

                                            while($row = mysql_fetch_assoc($result)){

                                                $port_id = $row['id'];
                                                $port_no = $row['port_no'];
                                                $port_name = $row['name'];

                                    ?>

    <label class="checkbox-inline"><input type="checkbox" name="po[]" type="checkbox" id="po[]" value="<?php echo $row['port_no'] ;?>" <?php if ($port_no == $sport_no) {

    echo 'checked';

    }?>><?php echo $row['port_no'] ;?> (<?php echo $row['name'] ;?>)</label>
    <?php
    }
    ?>  
                                    </div>
                                    <input type="hidden" name="u" id="u" value="<?php echo $servid;?>" />
                                    <button type="submit" class="btn btn-success">Update Server</button> 
                                </form>

這是我的更新腳本:

<?php
// Update Server Details
// Get Server ID
$servid = $_POST['u'];
// Get Server IP
$servip = $_POST['ip'];
// Get Server NAME
$servname = $_POST['na'];
// Get Server DESCRIPTION;
$servdescription = $_POST['de'];
// Get Server PORTS
$servports = $_POST['po'];

// Include Configuration File
include ("_data/_conf.php");

        ///// Update Server Details
        $sql="UPDATE servers SET server_ip = '$servip', server_name = '$servname', server_description = '$servdescription' WHERE unique_id = '$servid'";
        $result=mysql_query($sql)or die ('Unable to run query:'.mysql_error());

        ///// Update Ports in Table _servers
        //for ($i=0; $i<sizeof($servports);$i++) { 
        //$sql="UPDATE _servers SET server_name = '$servname', server_ip = '$servip', port_no = ".$servports[$i]." WHERE server_id = '$servid'";
        //$result=mysql_query($sql)or die ('Unable to run query:'.mysql_error());

        $portCount = count($_POST["po"]);
        for($i=0;$i<$portCount;$i++) {
        mysql_query("UPDATE _servers SET server_name='" . $_POST["na"][$i] . "', server_ip='" . $_POST["ip"][$i] . "', server_id='" . $_POST["u"][$i] . "', port_no='" . $_POST["po"][$i] . "' WHERE server_id='" . $_POST["u"][$i] . "'");
}

//  }   

        header('Location: u_serv.php?u='.$servid.'&updated=true');
exit();
?>

服務器詳細信息正在正確更新,但是表單中來自checboxes的信息未在其mysql表中更新。

問題是,如果不選中該復選框,那么您需要像這樣進行檢查:

for ($i = 0; $i < $portCount; $i++) {
    $checked = 0;
    if (!empty($_POST["po"][$i])) {
        $checked = 1;
    }
    mysql_query("UPDATE _servers SET server_name='" . $_POST["na"][$i] . "', server_ip='" . $_POST["ip"][$i] . "', server_id='" . $_POST["u"][$i] . "', port_no='" . $checked . "' WHERE server_id='" . $_POST["u"][$i] . "'");
}

注意:

  • 正如對方在評論中所說。 不要使用mysql_ *函數,它們已被棄用。 改用mysqli_ *或PDO。

  • 通過在查詢中轉義變量來避免SQL注入!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM