Использование переменных сеанса с AJAX - PullRequest
0 голосов
/ 11 февраля 2019

Я хочу использовать ajax для вставки фрагмента HTML / PHP.Каждый раз, когда он вставляет, он увеличивает переменную, чтобы подсчитать, сколько раз он был добавлен (тикеты).Затем я обрабатываю все данные в process.php.Как я могу это сделать?Я не хочу переписывать все в JS.

<form name="form1" method="post" action="process.php">
<table id="dynamic_field">

<?php
$ticket = 0;
$_SESSION["ticket"] = -1;

$line = 1;
echo '  <tr>';
while($line <= 7) {
  $number = 1;
  while($number <= 5) {
    echo'<td><input id="num" name="num'.$ticket.$line.$number.'" maxlength="2" size="1" value="'. ${"num".$ticket.$line.$number}.'"></td>';  
    $number++;
  }
  echo'<td><input type="checkbox" name="checked'.$ticket.$line.'"></td>';
  $line++;
echo'  </tr>';
}
echo'  </br>';

echo'<td><button type="button" name="add" id="add" class="btn btn-danger btn_remove">Add</button></td>';

echo'</table>';
?>
<input type="submit" name="submit" />
</form>



<script>

 $(document).ready(function(){  
      var i=1;  
      $('#add').click(function(){  
           i++;  
           $('#dynamic_field').append('<?php session_start(); $_SESSION["ticket"]++;  $line = 1;
echo '  <tr>';
while($line <= 7) {
  $number = 1;
  while($number <= 5) {
    echo'<td><input id="num1" name="num'.$ticket.$line.$number.'" maxlength="2" size="1" value="'. ${"num".$ticket.$line.$number}.'"></td>';  
    $number++;
  }
  echo'<td><input type="checkbox" name="checked'.$ticket.$line.'"></td>';
  $line++;
echo'  </tr>';
}
echo'  </br>';

?>');  
      });  
 }); 

1 Ответ

0 голосов
/ 11 февраля 2019

Чтобы помочь вам решить вашу проблему, я быстро собрал простую демонстрацию, которая, при изучении и анализе, должна помочь вам найти ваше решение, я надеюсь.

Нет jQuery, потому что я не используюэто - вместо этого есть некоторые основные функции javascript ванили и несколько очень простых PHP.

Обзор при начальной загрузке страницы, переменная сеанса создается со значением по умолчанию, равным нулю.Для кнопки назначен простой event listener, который при нажатии запускает запрос ajax.Ajax-запрос обрабатывается PHP, который увеличивает счетчик и отправляет обратно html-контент.

<?php
    /* start a session */
    session_start();

    /* create the variable to count tickets */
    if( empty( $_SESSION['tickets'] ) )$_SESSION['tickets']=0;

    /* process ajax request - increment session variable and send some html back for the callback to mangle */
    if( $_SERVER['REQUEST_METHOD']=='POST' && !empty( $_POST['action'] ) && $_POST['action']=='add-ticket' ){

        ob_clean();


        /* increment the counter */
        $_SESSION['tickets']++;



        /* send some new HTML back with content */
        exit( 
            sprintf(
                '<tr>
                    <td>%d</td>
                    <td>%s</td>
                </tr>',
                $_SESSION['tickets'],
                date( 'Y-m-d H:i:s' )
            )
        );
    }
?>
<!DOCTYPE html>
<html lang='en'>
    <head>
        <meta charset='utf-8' />
        <title>PHP Sessions and Tickets</title>
        <script>
            const ajax=function(url,params,callback){
                let xhr=new XMLHttpRequest();
                xhr.onload=function(){
                    if( this.status==200 && this.readyState==4 )callback.call( this, this.response )
                };
                xhr.onerror=function(e){
                    alert(e)
                };
                xhr.open( 'POST', url, true );
                xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
                xhr.setRequestHeader('X-Requested-With','XMLHttpRequest');
                xhr.send( buildparams( params ) );
            };
            const buildparams=function(p){
                if( p && typeof( p )==='object' ){
                    p=Object.keys( p ).map(function( k ){
                        return typeof( p[ k ] )=='object' ? buildparams( p[ k ] ) : [ encodeURIComponent( k ), encodeURIComponent( p[ k ] ) ].join('=')
                    }).join('&');
                }
                return p;
            };




            document.addEventListener('DOMContentLoaded',function(){
                let bttn=document.querySelector('input[type="button"][name="add"]');
                let tbl=document.querySelector('form > table');
                let span=document.querySelector('div > span');

                bttn.addEventListener( 'click', function(e){
                    ajax.call( this, location.href,{ action:'add-ticket' }, function(r){
                        tbl.querySelector('tbody').insertAdjacentHTML( 'beforeend', r );
                        span.innerText++;
                    })
                },false );
            },false );

        </script>
        <style>
            table{width:80%;border:1px solid black;float:none;margin:auto;}
            th,td{padding:1rem;text-align:center;background:white;}
            input{width:100%;padding:1rem;margin:1rem auto}
        </style>
    </head>
    <body>
        <form>
            <table>
                <tr>
                    <th>Ticket Count</th>
                    <th>Datetime</th>
                </tr>
            </table>
            <input type='button' name='add' value='Add Ticket' />
        </form>
        <?php   
            printf( '<div>The current ticket count is: <span>%d</span></div>', empty( $_SESSION['tickets'] ) ? 0 : $_SESSION['tickets'] );
        ?>
    </body>
</html>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...