I have a PHP page that retrieves data from a MYSQL select statement to populate 8-12 rows of a HTML table. Each row has a server name and a status represented by a bootstrap toggle switch for either condition on or off. When the toggle is changed, I want to POST the servername and desired state for that server to action.php. I was able to use some AJAX scripts I found to get the POST info to change the condition from 1 to 2, but only for the last row. I have not be able to figure out how to get the servername for each row to the script. How can I achieve this?
<table class="table table-hover" > <thead> <tr> <th class="all"> Server </th> <th class="all"> Status </th> </tr> </thead> <tbody> <?php include '../includes/DBConn.php'; $sql="SELECT name FROM ServerList WHERE active = 1 AND location = 3"; $result = $conn->query($sql); if ($result->num_rows > 0) { // output data of each row while($row = $result->fetch_assoc()) { $ServerName = $row['name']; ?> <tr> <td> <?php echo $ServerName;?> </td> <td> <?php if($condition1 !== false ) { ?> <input id="toggle-event" checked type="checkbox" data-toggle="toggle" data-onstyle="success" data-offstyle="danger" data-size="small" > <?php }elseif($condition2 == false) { ?> <input id="toggle-event" type="checkbox" data-toggle="toggle" data-onstyle="success" data-offstyle="danger" data-size="small"> <?php } ?> </td> </tr> <?php } }else { echo "0 results"; } $conn->close(); ?> </tbody> </table>
My attempt at ajax. This will POST to the desired page for the last row only and only if toggle is checked (condition1).
<table class="table table-hover"> <thead> <tr> <th class="all"> Server </th> <th class="all"> Status </th> </tr> </thead> <tbody> <?php include '../includes/DBConn.php'; $sql="SELECT name FROM ServerList WHERE active = 1 AND location = 3"; $result = $conn->query($sql); if ($result->num_rows > 0) { // output data of each row while($row = $result->fetch_assoc()) { $ServerName = $row['name']; ?> <tr> <td> <?php echo $ServerName;?> </td> <td> <?php if($condition1) !== false ) { ?> <form id="toggle-form1-<?php echo $ServerName; ?>" name="myForm" action="action.php" method="post"> <input id="toggle-event1<?php echo $ServerName;?>" checked type="checkbox" data-toggle="toggle" data-onstyle="success" data-offstyle="danger" data-size="small"> </form> <div id="console-event"></div> <script> var serverName = '<?=$ServerName?>';</script> <?php }elseif($condition2) == false) { ?> <input id="toggle-event2" type="checkbox" data-toggle="toggle" data-onstyle="success" data-offstyle="danger" data-size="small"> <?php } ?> </td> </tr> <?php } }else { echo "0 results"; } $conn->close(); ?> </tbody>
<script> $(function() { $('#toggle-event1' + serverName).change(function() { $('#console-event').html('Toggle: ' + $(this).prop('checked')); console.log(serverName); var mode= $(this).prop('checked'); $.post("/action.php", { mode:mode, desire:0, server:serverName, }); }) }) </script>
Advertisement
Answer
Inside the while loop you have:
<script> var serverName = '<?=$ServerName?>';</script>
which is why the last one is only picked up.
<script> $(function() { $('.toggle-event').change(function() { var serverName = $(this).data('server-name'); var mode = $(this).prop('checked'); $(this).siblings('.console-event').html('Toggle: ' + mode); console.log(serverName); $.post("/action.php", { mode:mode, desire:0, server:serverName, }); }) }) </script>
<table class="table table-hover" > <thead> <tr> <th class="all"> Server </th> <th class="all"> Status </th> </tr> </thead> <tbody> <?php include '../includes/DBConn.php'; $sql="SELECT name FROM ServerList WHERE active = 1 AND location = 3"; $result = $conn->query($sql); if ($result->num_rows > 0) { // output data of each row while($row = $result->fetch_assoc()) {?> <tr> <td> <?php echo $row['name'];?> </td> <td> <input data-server-name="<?php echo $row['name']?>" class="toggle-event" <?php echo ($condition1 !== false) ? "checked" : "" ?> type="checkbox" data-toggle="toggle" data-onstyle="success" data-offstyle="danger" data-size="small" /> <div class="console-event"></div> </td> </tr> <?php } } else { echo "0 results"; } $conn->close(); ?> </tbody> </table>