создайте php-функцию, которая подсчитывает клики и сохраняет значение в cookie

#php #cookies #count #click

#php #файлы cookie #подсчитывать #нажмите

Вопрос:

В настоящее время пытаюсь сохранить количество кликов по кнопкам и флажкам в cookie или сеансе и там после сохранить его в базе данных. Моя идея состоит в том, чтобы создать функцию подсчета для каждой кнопки и флажка.

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

1. PHP запускается на сервере задолго до того, как происходят какие-либо клики. Если вы хотите, чтобы PHP делал это, вы могли бы вызвать его с помощью AJAX и сохранить там в БД — в противном случае я бы посоветовал вам использовать Javascript для этой задачи

2. Спасибо, я попробую!

Ответ №1:

Для достижения цели записи обращений к элементам страницы вам нужно будет использовать некоторую форму http-запроса для связи с PHP-сервером, на котором будет записано обращение — либо в базе данных, либо в энергозависимом сеансе, либо в файле. В приведенном здесь примере используется простая ajax функция, хотя вместо этого вы могли бы использовать более гибкий fetch api.

Эта демонстрация должна дать вам основы для создания решения, которое ведет журнал в db…

 <?php
    session_start();
    /* store the click in a session or log to DB */
    /*
        using a session will only give accurate information for a single user and a single session
        so to actually record this information for all users and across time and space you really
        need to use a database or, at least some sort of file.

    */
    if( $_SERVER['REQUEST_METHOD']=='POST' amp;amp; isset( $_POST['action'], $_POST['name'], $_POST['value'] ) amp;amp; $_POST['action']=='log-click' ){

        $name=$_POST['name'];
        $value=$_POST['value'];
        $svar='clicks';

        /* create the session variable to record hits */
        if( !isset( $_SESSION[ $svar ] ) ) $_SESSION[ $svar ]=new stdClass;

        /* assign initial value or increment hit count */
        if( !isset( $_SESSION[ $svar ]->{$name} ) )$_SESSION[ $svar ]->{$name}=1;
        else $_SESSION[ $svar ]->{$name}  ;

        /* send something back to the ajax callback - to be processed however suits */
        exit( json_encode( array( 
                'name'      =>  $name,
                'value'     =>  $value,
                'time'      =>  time(),
                $svar       =>  $_SESSION[ $svar ]->{$name}
                )
            )
        );
    }


?>
<!DOCTYPE html>
<html>
    <head>
        <script>
            /* very simple ajax function */
            const ajax=function(m,u,p,c,o){
                with( new XMLHttpRequest() ){
                    onreadystatechange=function(e){
                        if( this.status==200 amp;amp; this.readyState==4 ){
                            c.call( this, this.response, this.getAllResponseHeaders(), o )
                        }
                    }
                    let params=Object.keys( p ).map( k=>{
                        return [k,p[k]].join('=')
                    }).join('amp;');

                    if( m.toUpperCase()=='GET' ){
                        u='?' params;
                        params=null;                        
                    }
                    open( m.toUpperCase(), u, true );
                    setRequestHeader('Content-Type','application/x-www-form-urlencoded');
                    send( params );
                }
            };


            document.addEventListener('DOMContentLoaded',e=>{
                /* Find elements of these types and bind an event listener to each */
                let col=document.querySelectorAll( 'input[type="button"], input[type="checkbox"]' );

                /* iterate through each DOM element and assign listener */
                Array.prototype.slice.call( col ).forEach( input=>{
                    input.addEventListener('click', e=>{
                        /* construct arguments for ajax request */
                        let method='post';
                        let url=location.href;
                        let params={ action:'log-click', name:e.target.name, value:e.target.value };
                        let callback=function(r){
                            document.querySelector( 'output' ).innerText=r
                        }
                        let options={};

                        /* make the ajax request */
                        ajax.call( this, method, url, params, callback, options )
                    })
                })
            });
        </script>
    </head>
    <body>
        <form method='post'>
            <fieldset>
                <input type='button' name='bttn_1' value='Click here to win a mystery prize' />
                <input type='checkbox' name='checkbox_1' value=1 />
            </fieldset>

            <fieldset>
                <input type='button' name='bttn_2' value='Click here to win luxury items' />
                <input type='checkbox' name='checkbox_2' value=1 />
            </fieldset>

            <fieldset>
                <input type='button' name='bttn_3' value='Click here to win a car' />
                <input type='checkbox' name='checkbox_3' value=1 />
            </fieldset>

            <fieldset>
                <input type='button' name='bttn_4' value='Click here to win a dream holiday' />
                <input type='checkbox' name='checkbox_4' value=1 />
            </fieldset>
        </form>

        <output></output>
    </body>
</html>
  

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

1. Большое вам спасибо за этот фрагмент, я постараюсь создать свою собственную версию!

Ответ №2:

Вы можете использовать javascript XHR (ajax) для отправки данных о кликах в php-скрипт или использовать установленные файлы cookie javascript…

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

1. Спасибо, Вайбхав, я попробую и посмотрю, смогу ли я в этом разобраться!

Ответ №3:

Вам нужно добавить код javascript, который отслеживает событие нажатия, и при каждом нажатии вы можете запускать ajax-вызов для обновления счетчика в базе данных.

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

1. Спасибо за ответ, Сачин, я рассмотрю это!