2017-07-15 113 views
0

我试图让所有选中的复选框值和解析它们到我的php functin使用AJAX。PHP/AJAX复选框的值

我使用foreach尝试获取选中复选框的每个ID。

我的问题是,当我尝试更新数据库时,它不返回'1',我回应成功。

当我把我的foreach代码出来,它的工作原理。

我的删除按钮是:

<form class="form -dark" id="form-inline" method="POST"> 
    <div class="btn-group"> 
     <button type="button" onclick="deleteSelectedTokens()" class="btn -dark" style="margin-left: 5px;" title="Delete all selected tokens"><i class="fa fa-trash"> </i></a> 
    </div> 
</form> 

我复选框HTML/PHP代码为:

<table class="table -dark -striped"> 
<thead> 
    <tr> 
     <th style="text-align: center;"><input type="checkbox" id="selectall"/></th> 
     <th style="text-align: center;">Token</th> 
     <th style="text-align: center;">Date/Time Generated</th> 
     <th style="text-align: center;">Status</th> 
     <th style="text-align: center;">Durbaility</th> 
    </tr> 
</thead> 
    <tbody> 
     <tr> 
     <?php 

     $username = $_SESSION['username']; 
     $token_result = mysqli_query($con, "SELECT id, token, used, time_generated, durability FROM tokens WHERE user_id = '$username' ORDER BY used"); 
     if(mysqli_num_rows($token_result) > 0) { 
      while($token_row = mysqli_fetch_array($token_result)) { 

      $result = array($token_row['durability']); $sub_struct_month = ($result[0]/30) ; $sub_struct_month = floor($sub_struct_month); $sub_struct_days = ($result[0] % 30); $sub_struct = "<i>".$sub_struct_month."</i> month(s) <i>".$sub_struct_days."</i> day(s)"; 

      echo '     
      <tr style="text-align: center;"> 
      <td> 
      <center><input type="checkbox" id="checkedTokens" class="checkbox" value='.($token_row['id']).'></center> 
      </td> 
      <td> 
      '.$token_row['token'].' 
      </td> 
      <td> 
      '.($token_row['time_generated']).' 
      </td> 
      <td> 
      '.($token_row['used'] == "0" ? "<span class='label label-primary'><i class='fa fa-check'></i> Valid </span>" : "<span class='label label-primary'><i class='fa fa-fa fa-times'></i> Used </span>").' 
      </td> 
      <td> 
      '.$sub_struct.' 
      </td> 
      '; 
      } }else{ ?> 

      <tr> 
      <td colspan="12" style="padding: 30px;"> 
      <div class="alert -dark"> 
       <div class="alert-icon _text-danger"> 
        <i class="fa fa-exclamation-circle"></i> 
       </div> 
       No tokens in your account 
      </div> 
      </td> 
      </tr> 

      <?php } ?> 
     </tr> 
    </tbody> 

通知我需要使用的foreach来获取每个复选框的值,以便在按下删除按钮时删除所选的复选框。

我的AJAX发送到PHP函数是:

<script> 
function deleteSelectedTokens() { 
    var selectedTokens = document.getElementById("checkedTokens").value; 

    $.ajax({ 
     type: "POST", 
     url: "includes/form_submit.php", 
     data: { 
     deleteSelectedTkns: true, 
     checked_id: selectedTokens 
     }, 
     success: function(msg){ 
     if(msg == 1) { 
      update_myDays_success(); 
     } else { 
      general_error_forms(); 
     } 
     }, 
    }); 
return false; 
} 
</script> 

我认为这个问题是JavaScript ...当我得到的复选框的价值,并张贴他们,我认为这是只得到1的值在checkedTokens id内。

我的PHP接收代码(这不是问题):

$username  = $_SESSION['username']; 
$selectedTokens = mysqli_real_escape_string($con, $_POST['checked_id']); 
foreach($selectedTokens as $id) { 
    $doUpdateDelete = 'DELETE FROM tokens WHERE id = "'.$id.'" AND user_id = "'.$username.'"'; 
    $result = $con->query($doUpdateDelete) or die("Error"); 
    if($result) 
    { 
     echo '1'; 
    } 
    else 
    { 
     echo 'Failed'; 
    } 
} 

我的console.log并没有错误。就像我所说的,我认为这是用于获取我的复选框值的JavaScript代码没有获得所有值。

+0

您正在重复ID,以多个复选框,这不是您获得所有复选框值的方式,请详细说明您的“ids”,即它们对于所有元素都不应该是相同的。 –

+0

@FarrukhAyyaz不,我使用的是各行的ID在我的数据库中的每个文本框的值。 – Benza

+0

在您的代码中,复选框ID,您在JavaScript中的分配和使用与每个复选框相同。它不是你的桌面ID。 –

回答

1

您可以将检查的项目的JSON:

<script> 
    var selectedTokens = []; 
    $('#checkedTokens:checked').each(function(key, value){ 
     selectedTokens.push($(value).val()); 
    }); 
    $.ajax({ 
     type: "POST", 
     url: "includes/form_submit.php", 
     data: { 
      deleteSelectedTkns: true, 
      checked_id: JSON.stringify(selectedTokens) 
    }, 
    success: function(msg){ 
     if(msg == 1) { 
     update_myDays_success(); 
     } else { 
     general_error_forms(); 
     } 
    }, 
    }); 
    </script> 

而且你的PHP代码mysqli_real_escape_string只给我们应该转换JSON获得数组字符串:

$selectedTokens = json_decode($_POST['checked_id']); 
foreach($selectedTokens as $id) { 
    $doUpdateDelete = 'DELETE FROM tokens WHERE id = "'.$id.'" AND user_id = "'.$username.'"'; 
    $result = $con->query($doUpdateDelete) or die("Error"); 
    if($result) 
    { 
     echo '1'; 
    } 
    else 
    { 
     echo 'Failed'; 
    } 
} 
+0

哇。它非常完美!你怎么知道这会起作用?你能解释它为什么起作用吗? – Benza

+0

在客户端和服务器之间发送要发送的数据时,请使用JSON或XML。 您可以获得检查项目的值。并转换为json。 在服务器上获取json并转换为对象。 –

0

在html中,不允许将相同的id分配给多个标签。 (如已经在评论中提到。)

如果放在一个<form id="some_id">你的复选框,并给每一个复选框一个唯一的名称和编号,你可以使用函数$('#some_id').serialize()获取表单的数据,并将其发布到服务器。