2016-11-17 63 views
-1

我希望插入员工考勤。当我检查更多,然后一个复选框它需要两个复选框值1和其他复选框值0。我怎么能解决这个请帮助我。这是我的表单代码当我选择多个选中的复选框时,不会保留所有值

<form action="coll.php" method="post" name="create_grading" id="create_grading"> 
     <table width="30%" border="0" cellpadding="2" cellspacing="3" class="mainTable"> 
      <tr> 
       <th><input type="checkbox" id="selectall" /></th> 
       <th>name</th> 
      </tr> 
      <?php 
      $sql = "select * from employee"; 
      $query = mysqli_query($con, $sql); 
      while ($row = mysqli_fetch_array($query)) { 
       ?> 
       <tr> 
        <td><input type="hidden" name="eid[]" value="<?php echo $row['eid']; ?>"/> 
         <input name="status[]" class="case" type="checkbox" value="1" /><input name="status[]" class="case" type="hidden" value="0" /></td> 
        <td align="center"><?php echo $row['employee_name'] ?></td> 
       </tr> 
      <?php }; ?> 

      <tr> 
       <td></td> 
       <td><input type="submit" name="Submit" id="Submit" value="Submit" /></td>  
      </tr> 
     </table> 
    </form> 

这是我的插入代码

$host = "localhost"; 
$user = "root"; 
$pass = ""; 
$db = "multiple_row_insert"; 
$con = mysqli_connect($host, $user, $pass, $db); 


if (isset($_POST['Submit'])) { 
    $eid = $_POST['eid']; 
    $count = count($eid); 
    for ($i = 0; $i < $count; $i++) { 
     $status = $_POST['status'][$i]; 
     $eid2 = $_POST['eid'][$i]; 
     $query = "INSERT INTO time(eid,status) VALUES ('$eid2','$status')"; 
     $query = mysqli_query($con, $query); 
    } 
} 
+0

你只需要知道1复选框是否被选中,这就是全部,在这种情况下你不需要两个复选框。 – Asfo

+1

[Little Bobby](http://bobby-tables.com/)说*** [你的脚本存在SQL注入攻击风险。](http://stackoverflow.com/questions/60174/how-can- ***)了解[MySQLi](http://php.net/manual)[准备](http://en.wikipedia.org/wiki/Prepared_statement)声明/en/mysqli.quickstart.prepared-statements.php)。即使[转义字符串](http://stackoverflow.com/questions/5741187/sql-injection-that-gets-around-mysql-real-escape-string)是不安全的! [不相信吗?](http://stackoverflow.com/q/38297105/1011527) –

回答

0
if(isset($_POST['checkbox'])) 
//then is checked... 
else 
//is not checked 

所以基本上你只需要1个复选框,你可以改变你的输入名称。然后在你的后端使用类似于:

$_POST['status_'.$i] 

在每种情况下,并检测是否检查其$ _POST的“isset”。

编辑:

你的代码看起来应该是这样的(未测试,对不起,如果有任何语法错误,你可以反正解决这些问题):

$host = "localhost"; 
$user = "root"; 
$pass = ""; 
$db = "multiple_row_insert"; 
$con = mysqli_connect($host, $user, $pass, $db); 


if (isset($_POST['Submit'])) { 
    $eid = $_POST['eid']; 
    $count = count($eid); 
    for ($i = 0; $i < $count; $i++) { 
     $status = 0; 
     if(isset($_POST['status_'.$i])) //check if checkbox is setted (value 1/checked) 
      $status = 1; 
     $eid2 = $_POST['eid'][$i]; 
     $query = "INSERT INTO time(eid,status) VALUES ('$eid2','$status')"; 
     $query = mysqli_query($con, $query); 
    } 
} 

而且你的前端代码:

<form action="coll.php" method="post" name="create_grading" id="create_grading"> 
     <table width="30%" border="0" cellpadding="2" cellspacing="3" class="mainTable"> 
      <tr> 
       <th><input type="checkbox" id="selectall" /></th> 
       <th>name</th> 
      </tr> 
      <?php 
      $sql = "select * from employee"; 
      $query = mysqli_query($con, $sql); 
      $i = 0; 
      while ($row = mysqli_fetch_array($query)) { 
       ?> 
       <tr> 
        <td><input type="hidden" name="eid[]" value="<?php echo $row['eid']; ?>"/> 
         <input name="status_<?php echo $i; ?>" class="case" type="checkbox" value="0" /></td> 
        <td align="center"><?php echo $row['employee_name']; ?></td> 
       </tr> 
      <?php $i++; } ?> 

      <tr> 
       <td></td> 
       <td><input type="submit" name="Submit" id="Submit" value="Submit" /></td>  
      </tr> 
     </table> 
    </form>    
+0

我不能解决这个问题,所以如果给我完整的代码.....它会帮助我很多 –

+0

请帮我导致我不能忍受什么必须要解决这个问题 –

+0

只要用你的逻辑伙计,我不知道为什么AbraCadaver删除了他的评论,但基本上在你的内部,$ status = $ _POST ['status “] [$ i]于; < - 在这一行,只需将其更改为if(isset($ _ POST ['status _'。$ i])){--- code ---}并在您的内部更改您的行 to ”class =“case”type =“checkbox”value =“0”/> ...终于别忘了包含$ i = 0;和$ i ++;为你的时间。 – Asfo