Как использовать $ _POST без необходимости ввода текстового поля

#php #html #sql #ajax

#php #HTML #sql #ajax

Вопрос:

Я кратко изложу свою цель, используя псевдокод и фрагменты, чтобы легко показать, чего я хотел бы достичь:

Столбец таблицы:

        <td data-target="scheduled">

         <?php
           if ($row['scheduled'] == 1) {
          ?>

          <a href="#" data-role="update" data-id="<?php echo $row['id'] ;?>">YES</a>

         <?php
           } else if ($row['scheduled'] == 0) {
           ?>
          <a href="#" data-role="update" data-id="<?php echo $row['id'] ;?>">NO</a>
         <?php
           }
          ?>
       </td>
  

Это столбец таблицы, где кнопка зависит от значения, которое равно 1 (ДА) и 0 (НЕТ)

sched

Модальный:

 <div id="myModal" class="modal fade" role="dialog">
  <div class="modal-dialog">

    <!-- Modal content-->
    <div class="modal-content">
      <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal">amp;times;</button>
      </div>
      <div class="modal-body">
        <div class="form-group">
          <label>UPDATE SCHEDULED?</label>
          <input type="text" id="scheduled" class="form-control">
        </div>
        <input type="hidden" id="userId" class="form-control">

      </div>
      <div class="modal-footer">
        <a href="#" id="save" class="btn btn-primary pull-right">Update</a>
        <button type="button" class="btn btn-default pull-left" data-dismiss="modal">Close</button>
      </div>
    </div>

  </div>
</div>
  

Этот модал появляется всякий раз, когда нажимаются кнопки «ДА» или «НЕТ»

модальный

Прямо сейчас я мог бы изменить текстовое поле на 1 или 0, чтобы на выходе был показан соответствующий результат.

Я пытаюсь получить «$ scheduled = $_POST[‘по расписанию’];» получите ввод автоматически по щелчку, $ _POST станет 1, если столбец равен 0, и 0, если столбец равен 1.

Ajax:

 <script>
  $(document).ready(function(){

      $(document).on('click','a[data-role=update]',function(){
            var id  = $(this).data('id');
            var scheduled  = $('#' id).children('td[data-target=scheduled]').text();

            $('#scheduled').val(scheduled);
            $('#userId').val(id);
            $('#myModal').modal('toggle');
      });


       $('#save').click(function(){
          var id  = $('#userId').val();
          var scheduled = $('#scheduled').val();

          $.ajax({
              url      : 'connection.php',
              method   : 'post',
              data     : {scheduled: scheduled , id: id},
              success  : function(response){

                             $('#' id).children('td[data-target=scheduled]').text(scheduled);
                             $('#myModal').modal('toggle');

                         }
          });
       });
  });
</script>
  

Это текущий ajax-код, в котором он получает значение в текстовом поле.

SQL:

 if(isset($_POST['id'])){

    $id = $_POST['id'];
    $scheduled = $_POST['scheduled'];

    $result  = mysqli_query($connection , "UPDATE user SET scheduled = '$scheduled' WHERE id='$id'");
}
?>
  

Код SQL, который обновляет столбец с помощью ajax.

Подведение итогов с помощью псевдокода: (ручного ввода текстового поля не будет, просто кнопка прямого перехода к обновлению с помощью ajax)

Модальный:

  if ($row['scheduled'] == 1) {
    textfield input is 0
} else if ($row['scheduled'] == 0) {
    textfield input is 1
}
  

Я думаю, что если я смогу заставить работать оператор if в моем модальном, ajax и SQL сделают все остальное при обновлении, и я получу отзывчивую кнопку, которая изменяет текст (ДА или НЕТ).

Буду признателен за любую помощь.

Комментарии:

1. Я немного запутался в том, чего вы пытаетесь достичь. Можете ли вы обобщить пользовательский поток? («Я хочу, чтобы пользователь нажал на X, а затем произошло Y …»)

2. Я хочу, чтобы пользователь щелкнул по запланированному столбцу («ДА» или «НЕТ»), затем значение изменится на другое с помощью ajax и SQL update

Ответ №1:

Поскольку в вопросе использовались фрагменты псевдокода, использование фрагментов псевдокода для ответа казалось бы уместным — возможно, это должно помочь.

Очень легко переключать состояние элемента, использование dataset атрибутов очень помогает с такими задачами, и я вижу, что вы их уже используете, так что это должно быть легко. Если состояние элемента равно 1 , то для переключения состояния достаточно просто 1 minus current state

Пример

     <a href='#' data-scheduled=1 data-id=303 data-role='update'>Yes</a>
    <a href='#' data-scheduled=1 data-id=404 data-role='update'>Yes</a>
    <a href='#' data-scheduled=1 data-id=505 data-role='update'>Yes</a>

<script>
    let links=Array.prototype.slice.call( document.querySelectorAll('a[data-scheduled]') );
    let matrix={
        1:'YES',
        0:'NO'
    }
        links.forEach( a=>{
            a.addEventListener('click', e=>{
                /* Toggle the state of the link */
                e.target.dataset.scheduled = 1 - parseInt( e.target.dataset.scheduled );
                e.target.textContent=matrix[ e.target.dataset.scheduled ];
                alert( 'send ajax request using ' e.target.dataset.scheduled ' as the value for button/link of id ' e.target.dataset.id )
            })
        })
</script>
  

Нажатие на каждую ссылку изменит атрибут dataset scheduled либо на 1, либо на 0 — поиск в текстовой матрице с использованием этого значения используется для соответствующей настройки текста ссылки. В примере будет использоваться alert , но в этот момент вам захочется отправить ajax-запрос.

При начальной загрузке страницы вы должны установить значение data-scheduled на основе значений базы данных, чтобы начальное состояние не обязательно всегда было равно 1. Я уверен, вы можете понять, как соответствующим образом изменить логику, чтобы установить либо YES , либо NO для каждой ссылки при загрузке страницы … $text=$row['scheduled']==1 ? 'YES' : 'NO'; и т. Д

Надеюсь, это поможет.

полный пример:

 <!DOCTYPE html>
<html lang='en'>
    <head>
        <meta charset='utf-8' />
        <title>toggle state</title>
        <style>
            body{font-family:calibri,verdana,arial;}
            *{box-sizing:border-box;}
            [data-scheduled]{margin:0.5rem;padding:0.25rem;border:1px solid rgba(133,133,133,0.25);}
            [data-scheduled="0"]{background:rgba(255,0,0,0.1)}
            [data-scheduled="1"]{background:rgba(0,255,0,0.1)}
        </style>
        <script>
            document.addEventListener('DOMContentLoaded', e=>{
                let links=Array.prototype.slice.call( document.querySelectorAll('a[data-scheduled]') );
                let matrix={
                    1:'YES',
                    0:'NO'
                }
                links.forEach( a=>{
                    a.addEventListener('click', e=>{
                        e.preventDefault();
                        e.target.dataset.scheduled = 1 - parseInt( e.target.dataset.scheduled );
                        e.target.textContent=matrix[ e.target.dataset.scheduled ];
                        console.info('send ajax request using ' e.target.dataset.scheduled ' as the value ( or "' matrix[ e.target.dataset.scheduled ] '" )for button/link of id ' e.target.dataset.id);
                    })
                })
            });
        </script>
    </head>
    <body>
        <?php
            for( $i=1; $i <= 25; $i   ){

                $scheduled=rand(0,1);
                $text=$scheduled==1 ? 'YES' : 'NO';

                printf(
                    '<a href="#" data-scheduled=%d data-id=%d data-role="update">%s</a>',
                    $scheduled,
                    $i,
                    $text
                );
            }
        ?>
    </body>
</html>
  

Комментарии:

1. Я понимаю концепцию примера, но я не уверен, как он будет подключаться к столбцу моей таблицы SQL «запланировано».

2. ваша страница выполняет поиск в базе данных при загрузке страницы, поэтому используйте набор записей, чтобы помочь создать соответствующую структуру html?