2017-07-15 9 views
0

Ich versuche, alle Checkbox-Werte zu bekommen und sie mit AJAX auf meine PHP-Funktion zu analysieren.PHP/AJAX Checkbox Werte

Ich benutze foreach, um zu versuchen und jede ID der Checked Checkbox zu bekommen.

Mein Problem ist, dass wenn ich versuche, die Datenbank zu aktualisieren, gibt es nicht "1" zurück, die ich bei Erfolg widerhallen.

Wenn ich meinen foreach-Code herausnehme, funktioniert es.

Meine Löschtaste ist:

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

Meine Checkbox html/PHP-Code ist:

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

Hinweis I foreach verwenden, müssen hole jeden check-checkbox-Wert, damit ich die ausgewählten entfernen kann, wenn ich die delete-Taste drücke.

Meine AJAX PHP-Funktion senden ist:

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

Ich denke, das Problem ist die Javascript ist ... wenn ich den Wert des Kontrollkästchen erhalten und nach ihnen, ich denke, es wird immer nur 1 Wert innerhalb der checkedTokens ID.

Mein php erhalten Code (das ist nicht das Problem):

$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'; 
    } 
} 

Meine console.log hat Fehler nicht. Wie ich schon sagte, ich denke, es ist der JavaScript-Code, um den Wert meiner Checkbox nicht alle Werte zu erhalten.

+0

Sie wiederholen die ID mehrere Kontrollkästchen, Dies ist nicht die Art, wie Sie alle Checkbox-Werte erhalten, seien Sie bitte spezifisch mit Ihren 'ids', dh sie sollten nicht für alle Elemente gleich sein. –

+0

@FarrukhAyyaz Nein, ich verwende die IDs jeder Zeile in meiner Datenbank für den Wert jedes Textfelds. – Benza

+0

In Ihrem Code sind die Checkbox-IDs, Ihre Zuweisung und Verwendung in Ihrem Javascript identisch mit jedem Kontrollkästchen. Es ist nicht Ihr Tisch-IDs. –

Antwort

1

Sie können json von markierten Produkte senden

$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

Wow. Es hat perfekt funktioniert! Woher weißt du, dass das funktionieren würde? Kannst du erklären, warum es funktioniert? – Benza

+0

Wenn Sie Daten zwischen Client und Server zum Senden senden, verwenden Sie JSON oder XML. Sie erhalten Wert von überprüften Elementen. Und zu json konvertieren. Auf dem Server erhalten Sie JSON und konvertieren in Objekt. –

0

In HTML ist es nicht erlaubt, die gleiche ID mehreren Tags zuzuweisen. (Wie bereits in den Kommentaren erwähnt.)

Wenn Sie Ihre Kontrollkästchen auf einem <form id="some_id"> platzieren, und geben jedem Kontrollkästchen einen eindeutigen Namen und id, können Sie die Funktion $('#some_id').serialize() verwenden, um die Daten des Formulars zu erhalten und per Post an die Server. mysqli_real_escape_string geben nur String

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

Und Ihre PHP-Code, den wir json Array zu erhalten umwandeln sollte:

Verwandte Themen