Как обновить базу данных с помощью флажка в столбце таблицы? - PullRequest
0 голосов
/ 16 марта 2020

Я новичок в PHP и только начал изучать JS, как это требуется на данном этапе проекта. У меня есть база данных с именем asms table с именем - filtersms столбец с именем - filter_op. В этом столбце таблицы у меня есть флажок для каждой строки, и мое требование состоит в том, чтобы ввести «да» в столбец filter_op после того, как я установлю флажок и останется «нет», если не отмечен. Я попытался сделать это, используя PHP, но оказалось невозможным обновить таблицу нажатием кнопки-флажка. Поскольку я новичок в JS, не могли бы вы помочь мне пройти через это. Вот так выглядит таблица filtersms,

|id  |vendor  |alarm_name           |filter_op|       
|1   |HUAWEI  | communication fault |no       |
|2   |HUAWEI  | STP link fault      |no       |
|3   |ZTE     | Battery discharge   |no       |
|4   |ZTE     | AC power off        |no       |

Ниже приведен код PHP, который я написал до сих пор, чтобы добавить флажок к каждой строке и отобразить таблицу.

<!-- Begin Page Content -->
<div class="container-fluid">

  <!-- Page Heading -->
  <h1 class="h2 mb-2 text-gray-800">Filter SMS</h1>

  <!-- DataTales Example -->
  <div class="card shadow mb-4">
    <div class="card-header py-3">
      <h4 class="m-0 font-weight-bold text-primary">Filtered SMS Summary</h4>
    </div>
    <div class="card-body">

    <?php
      //Table select query for database
      require('include/connection.php');

      $query1="SELECT* FROM  filtersms ";
      $result_set=mysqli_query($connection,$query1);


     // require('include/filtercheck.php');

    ?>

      <div class="table-responsive">
        <table class="table table-bordered" id="dataTable" width="100%" cellspacing="0">
          <thead>
            <tr>
              <th>Vendor</th>
              <th>Alarm</th>
              <th>Filter Option</th>

            </tr>
          </thead>
          <tfoot>
            <tr>
              <th>Vendor</th>
              <th>Alarm</th>
              <th>Filter Option</th>
            </tr>
          </tfoot>
          <tbody>

          <?php
            while($row=mysqli_fetch_assoc($result_set))  {
           ?> 

              <tr>
                <td><?php echo $row["vendor"];  ?></td>
                <td><?php echo $row["alarm_name"];  ?></td>
                <td>
                    <form action="include/filtercheck.php" method="POST">
                        <div class="form-check">
                            <input type="checkbox" class="form-check-input" value="yes" name="filter_check" id="filter_check"/>
                            <label class="form-check-label" for="filter_check">Filter Alarm</label>
                        </div>
                    </form>
                </td>
              </tr>   

             <?php
              }
             ?>

Ответы [ 3 ]

0 голосов
/ 16 марта 2020

Вы можете использовать jQuery.post().

Для каждой строки используйте:

<tr>
  <td><?php echo $row["vendor"]; ?></td>
  <td><?php echo $row["alarm_name"]; ?></td>
  <td>
    <input type="checkbox" value="2" class="js-checkbox-filter" <?php echo ($row["filter_op"] == "yes" ? "checked" : NULL) ?> />
  </td>
</tr>

Эти флажки теперь идентифицируются классом js-checkbox-filter и вы можете использовать его для привязки к нему обработчика событий jQuery.change().

var checks = $(".js-checkbox-filter")

checks.change(function() {
  $.post("filtercheck.php", {
    id: this.value,
    filtered: this.checked ? "yes" : "no"
  })
})

Вам также придется изменить файл filtercheck.php. Он должен получить параметры id и filtered ("yes" / "no") через переменную $ _POST. Используйте их для обновления таблицы базы данных.

0 голосов
/ 16 марта 2020

Вы можете попробовать что-то подобное, если я правильно понимаю ваш вопрос. При этом используется jQuery, поэтому вам нужно включить скрипт CDN. Это в основном передает данные через AJAX, указывая новые параметры фильтра для строки, отмеченной или не отмеченной. Это делает мою публикацию массива в виде filter_op_post с индексом 0 = true или false и индексом 1, равным id строки в базе данных. Вы можете обработать это в файле filtercheck. php, хотя я включил небольшой фрагмент. Дайте мне знать, если это работает для вас.

Этот ответ AJAX находится в «данных», так что вы можете вернуть все, что захотите, и обработать это по мере необходимости.

POST:

filter_op_post [] […] 0 true 1 2

ОТВЕТ:

["true", "2"] например,

index. php page:

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js" integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo=" crossorigin="anonymous">
</script>
<!-- Begin Page Content -->
<div class="container-fluid">
<!-- Page Heading -->
    <h1 class="h2 mb-2 text-gray-800">
        Filter SMS
    </h1>
<!-- DataTales Example -->
    <div class="card shadow mb-4">
        <div class="card-header py-3">
            <h4 class="m-0 font-weight-bold text-primary">
                Filtered SMS Summary
            </h4>
        </div>
        <div class="card-body">
<?php
$Config = array(
    'DB_TYPE' => 'mysql',
    'DB_HOST' => '127.0.0.1',
    'DB_NAME' => 'alarmfilter',
    'DB_USER' => 'root',
    'DB_PASS' => 'root',
    'DB_PORT' => '3306',
    'DB_CHARSET' => 'utf8'
);
$options = array(PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_OBJ, PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING, PDO::ATTR_EMULATE_PREPARES => true );
try {
$database = new PDO($Config['DB_TYPE'] . ':host=' . $Config['DB_HOST'] . ';dbname=' . $Config['DB_NAME'] . ';port=' . $Config['DB_PORT'] . ';charset=' . $Config['DB_CHARSET'], $Config['DB_USER'], $Config['DB_PASS'], $options);
}

catch (PDOException $e) {

                // Echo custom message. Echo error code gives you some info.
                echo 'Database connection can not be estabilished. Please try again later.' . '<br>';
                echo 'Error code: ' . $e->getCode();

                // Stop application :(
                // No connection, reached limit connections etc. so no point to keep it running
                exit;
}

$query="SELECT* FROM filtersms ";
$parameters = [];
$stmt = $database->prepare($query);
$stmt->execute($parameters);
$result_set =  $stmt->fetchAll(PDO::FETCH_ASSOC);

?>
            <div class="table-responsive">
                <table class="table table-bordered" id="dataTable" width="100%" cellspacing="0">
                    <thead>
                        <tr>
                            <th>Vendor</th>
                            <th>Alarm</th>
                            <th>Filter Option</th>
                        </tr>
                    </thead>
                    <tfoot> 
                    <tr>
                        <th>Vendor</th>
                        <th>Alarm</th>
                        <th>Filter Option</th>
                    </tr>
                    </tfoot> 
                    <tbody>
<?php
            foreach ($result_set as $row)  {
           ?>
                        <tr>
                            <td><?php echo $row["vendor"];  ?>
                            </td>
                            <td><?php echo $row["alarm_name"];  ?>
                            </td>
                            <td> 
                            <form>
                                <div class="form-check">
<?php $checked = ($row["filter_op"] == "true")?"checked":""; ?>
                                    <input 
<?php echo $checked;  ?>
                                    type="checkbox" class="form-check-input filter_check" id ="filter_op_id
<?php echo $row["id"];  ?>
                                    "/> 
                                    <input type="hidden" name="filter_op_post[]" value="<?php echo $row[" filter_op"]; ?>
                                    "/> 
                                    <input type="hidden" name="filter_op_post[]" value="<?php echo $row[" id"]; ?>
                                    "/> <label class="form-check-label" for="filter_check">Filter Alarm</label> 
                                </div>
                            </form>
                            </td>
                        </tr>
<?php
              }
             ?>
                    </tbody>
                </table>
            </div>
        </div>
    </div>
</div>
<style> table, table tr, table td {
    border:black 1px solid;
    border-collapse: collapse;
</style>
<script>
    $(".filter_check").on("click", function(e) {

        $(this).next().val($(this).prop("checked"));
        formdata = $(this).closest("form").serialize();

            $.ajax({

                type: "POST",
                url: 'include/filtercheck.php',
                dataType: "json",
                data: formdata,
                beforeSend: function(e) {
                    // $("#spinner").css("display", "block");
                },
            })
            .done(function(data, textStatus, jqXHR) {
                alert(data);
            })
            .fail(function( jqXHR, textStatus, errorThrown) {
            })
            .always(function(jqXHR, textStatus) {
                $("#spinner").css("display", "none");
            });
    });
</script>

include / filtercheck. php page:

<?php

$rowid = $_POST['filter_op_post'][1];
$filter_op_value = $_POST['filter_op_post'][0];
echo json_encode($_POST['filter_op_post']);


?>
0 голосов
/ 16 марта 2020

Вы можете использовать форму с кнопкой отправки.

    <form method="POST">
    <input type="checkbox" class="form-check-input" value="true" name="filter_check" id="filter_check"/>
    <label class="form-check-label" for="filter_check">
    <button type="submit" name"submit" value="Submit">Submit</button>
    </form>

При этом вы можете обновить базу данных, используя метод Post

if(isset($_POST['submit']))
{
   /* update database here 
   /* your value of the checkbox is &_POST['filter_check']
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...