0

I am searching for a way to update my sql database without refreshing the page by selecting the checkbox. I am trying to achieve the id to be passed to the dolead.php when the user selects the checkbox and than check whether the id is higher than 0 it must pass the value 1 otherwise the value 0. Afther that check i need the database to be updated with the where clause the posted id. Below my code, what am i doing wrong? i get no errors in my logs and i have the error logging stated as followed: mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

PHP the user is seeing to select the switch box to trigger a select and the jquery to trigger the post.

<head>

<script src="jquery-3.2.1.min.js"></script>
<link rel="stylesheet" href="switch.css" type="text/css">


</head>

<body>

    <table id="myTable" align='left' class="deftable">
    <thead>
    <tr>
    <th style="width:10px !important;">!!</th>
    <th>Name</th>
    <th>Notes</th>
    <th>Category</th>
    </tr>
    </thead>
    <tbody>
    
    <?  //Selecteer accounts.
    
    $stmt = $mysqli->prepare("SELECT * FROM account WHERE purpose = 'Crew4' AND level <= ? AND betaald = 'yes' 
    AND group_name = ? AND secret = 'no' ");
    $stmt->bind_param("is", $status,$groupname);
    $stmt->execute();
    $result = $stmt->get_result(); //only works when nd_mysli is set on the server!

    while ($row = $result->fetch_assoc()) {
  ?>  
    <tr>
       <td class="footer"> 
  <label class="switch">
  <input type="checkbox" <?php if($row['do_lead']=='1')  {
                 echo 'checked="checked"';
 } ?> value="<?php echo filter_var($row['id'], FILTER_VALIDATE_INT); ?>" />
  <div class="slider round">
    <span class="on">ON</span>
    <span class="off">OFF</span>
  </div>
</label></td>
    <td><?= htmlspecialchars($row['name']) ?></td>
    <td><?= htmlspecialchars($row['notes']) ?></td>
    <td><?= htmlspecialchars($row['purpose']) ?></td>
 
    
   

    </tr>
    <? } ?>
    </table>


</body>

<script>

$(document).ready(function()

{

var x=$("input[type=checkbox]").length;

$('input[type=checkbox]').on('change', function(i)

{

if($(this).is(':checked'))

{

x-=1;

if(x==0)

{

var val = [];

$(':checkbox:checked').each(function(i)

{

val[i] = $(this).val();

});

var jsonString = JSON.stringify(val);

$.ajax(

{

type: "POST",

url: "dolead.php",

data: {checkbox_value:jsonString},

cache: false,

success: function(data)

{

/* alert if post is success */

}

});

}

}

else

{

x+=1;

}

});

});

</script>

</html>

The dolead.php to retrieve the post value and update the database;

$data = json_decode(stripslashes($_POST['checkbox_value']));

foreach($data as $d){

    if($d > 0){$leadupdate = 1;}
    if($d == ''){$leadupdate = 0;}
        
    $stmt48 = $mysqli->prepare("UPDATE account SET do_lead = ? WHERE id = ? ");
    $stmt48->bind_param("ii", $leadupdate,$d);
    $stmt48->execute();
    $stmt48->close();       

}


?>

PS: the connection file is included but not shown here..

8
  • What about JS errors? Have you checked the Developer Toolbar console? Commented Nov 28, 2020 at 0:07
  • Yes. No errors are shown. Commented Nov 28, 2020 at 0:09
  • What about the Network tab? Have you determined that the AJAX call takes place? What do you get as the response? Commented Nov 28, 2020 at 0:12
  • Hmm. I see no activity there when i select the boxes.. Commented Nov 28, 2020 at 0:18
  • It looks like the call is not taking place.. What is wrong with the script..?? Commented Nov 28, 2020 at 0:26

1 Answer 1

1

You could add a class to the input and set the value dynamically:-

View:-

<input class="active" type="checkbox" value="$row['do_lead']" >

jQuery/AJAX Call:-

    <script type="text/javascript" src="https://code.jquery.com/jquery-3.4.1.min.js"></script>

<script type="text/javascript">
$(document).ready(function(e){ 
    $("input.active").click(function() {
    // store the values from the form checkbox, then send via ajax below
    var check_active = $(this).is(':checked') ? 1 : 0;
    var check_id = $(this).attr('value');
    
        $.ajax({
            type: "POST",
            url: "dolead.php",
            data: {id: check_id, active: check_active}
            success: function(response){
                alert('Data Updated Successfully');
    
            }
        });
    return true;
    });
});
</script>

PHP:-

// CLIENT INFORMATION
$active = mysqli_real_escape_string($_POST['active']);
$id = mysqli_real_escape_string($_POST['id']);

//update query.
//execute query.

Note:- for more info regarding click()

https://api.jquery.com/click

Sign up to request clarification or add additional context in comments.

5 Comments

Thanks for your reaction! When trying above solution i get the following error in my console log. Uncaught SyntaxError: Unexpected identifier. it seems there is womething wrong with the succes code. ` data: {id: check_id, active: check_active} success: function(response){ alert('Data Updated Successfully'); }`
Update. There was a , missing. The code executes but it does not pass any values? Maybe because the table generates multiple checkboxes with the same class? I get no errors just empty values.
@newtocss can you get check_active & check_id on chechkbox click??
Sorry i dont know what you are asking. Since the post is empty i guess nog? In the consol i can see that row id is filled and i see that the script you presented is sending the 1 or 0 value, if i inderstand correctly as i am new to ajax..
Hi Kumar. Many thanks your sollution worked after a few changes. The values where empty because of the real escape string so it seemed. When i removed those the update happend and the values where passed!

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.