2014-11-06 133 views
0

我想更新mysql中的两个表中的细节,与服务器的详细信息更新正确,但即时通讯努力更新复选框值(尝试删除或插入到mysql中的复选框表)由此用户选择需要添加或从数据库中移除的复选框。MySQL的PHP​​更新多个复选框

这里是我的FORM:

  <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表。

+1

我是第一个说你不应该使用mysql_ *函数,因为它们被折旧。尝试使用PDO或mysqli。 – 2014-11-06 15:22:46

+1

你很容易受到[sql注入攻击](http://bobby-tables.com)的影响。高枕无忧。你的服务器很快就会pwn3d,并且让你的问题没有意义。 – 2014-11-06 15:24:52

回答

2

的问题是,如果不选中复选框,所以你需要检查是这样的:

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注入!