簡體   English   中英

PHP / AJAX復選框值

[英]PHP / AJAX checkbox values

我試圖獲取所有選中的復選框值,並使用AJAX將其解析為我的php functin。

我使用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來獲取每個復選框的值,以便在按下Delete按鈕時可以刪除所選的復選框。

我的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 ...當我獲得復選框的值並將其發布時,我認為它在checkedTokens ID內僅獲得1值。

我的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代碼。

您可以發送已檢查項目的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';
    } 
}

在html中,不允許將相同的ID分配給多個標簽。 (如評論中已經提到的。)

如果將復選框放在<form id="some_id"> ,並為每個復選框指定唯一的名稱和ID,則可以使用函數$('#some_id').serialize()來獲取表單的數據,並將其發布到服務器。

暫無
暫無

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

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