Je dois compter les clics sur le lien et transmettre le résultat au fichier php. Je pense que c'est le cas à force d'ajax-query.

<a class='link' href='www.site.com'>Open</a>

<script>
var count=0;
$('.link').on('click',function(){
count+=1;
});
</script>

Que dois-je faire ensuite ? Comment puis-je passer le nombre au tableau POST ou Get ?

1
Alexey_Danilov 17 mars 2019 à 15:34

2 réponses

Meilleure réponse

Si vous souhaitez compter les clics sur un lien, vous devez utiliser un fichier ou une base de données pour enregistrer la valeur, car PHP n'enregistre pas l'état.

Ici, je donne un exemple d'utilisation d'une base de données pour cela :

L'Ajax

$('.link').on('click',function(){
  $.ajax({
      url:"<?php echo 'Your url to incrementCount() method';?>",
      method:"POST",
      data:{},
      success:function(response){
          // on success do something
      }                    
  });
});

La méthode PHP

public function incrementCount(){
  $UpdateQuery = "UPDATE link_counts SET link_count=link_count + 1 WHERE id=1";
  // here 'link_counts' is table name and 'link_count' is the column name to update
  $result = mysql_query($UpdateQuery );
}

La table 'link_counts'

-------+------------+
|  id  | link_count |
-------+------------+

Ici, la valeur de la colonne link_count est 0 par défaut. Par cela, vous pouvez mettre à jour le champ sur l'occurrence de l'événement de clic de la classe .link.

Alternativement, vous pouvez utiliser user_id pour compter quel utilisateur a cliqué sur la classe .link. Pour ce faire, vous devez ajouter une condition where à la requête de mise à jour.

Si vous voulez le faire avec un fichier, changez la méthode PHP par le code ci-dessous-

Méthode PHP pour la gestion des fichiers

$file = 'link_counter.txt';

// default the counter value to 1
$counter = 1;

// add the previous counter value if the file exists    
if (file_exists($file)) {
    $counter += file_get_contents($file);
}

// write the new counter value to the file
file_put_contents($file, $counter);

J'espère que cela t'aides.

0
Foysal Nibir 17 mars 2019 à 13:30

Pour compter les clics sur un lien, vous devez passer quelque chose comme l'ID du lien (de la base de données) ou un autre identifiant que vous pouvez utiliser pour incrémenter le compte sur le serveur - si vous essayez d'envoyer le compte mis à jour depuis le client, il serait vulnérable aux abus ~ il serait très facile de modifier le nombre si vous le souhaitez.

Vous pouvez utiliser ajax comme dans l'exemple suivant, non testé - cela pourrait vous donner une idée de la façon de procéder.

<?php

    /* test.php */

    if( $_SERVER['REQUEST_METHOD']=='POST' && !empty( $_POST['id'] ) && !empty( $_POST['url'] ) ){
        $id=$_POST['id'];
        $url=$_POST['url'];

        $sql='update `links` set `count`=`count`+1 where `id`=? and `url`=?';
        $stmt=$db->prepare($sql);

        if( $stmt ){
            $stmt->bind_param('is', $id, $url );
            $res=$stmt->execute();

            exit( $url );
        }
        exit( false );
    }


?>

Et les extraits html et javascript

<a id=1 href='www.site.com' class='link'>Open Site</a>
<a id=2 href='www.example.com' class='link'>Open Example</a>
<a id=3 href='www.banana.com' class='link'>Open Banana</a>
<a id=4 href='www.spitfire.com' class='link'>Open Spitfire</a>
<a id=5 href='www.hellcat.com' class='link'>Open Hellcat</a>


<script>
    const ajax=function( url, params, callback ){
        with( new XMLHttpRequest() ){
            onreadystatechange=function(e){
                if( this.status==200 && this.readyState==4 )callback.call( this, this.response )
            }
            open( 'POST', url, true );
            setRequestHeader('Content-Type','application/x-www-form-urlencoded');
            send( params );
        }
    };

    const clickcallback=function(r){
        if( r )window.open( r )
    };

    const clickhandler=function(e){
        e.preventDefault();
        let url='test.php';
        let params='id='+e.target.id+'&url='+encodeURI( e.target.href );
        ajax.call( this, url, params, clickcallback  )
    };


    Array.prototype.slice.call( document.querySelectorAll('a.link') ).forEach( a=>{
        a.addEventListener('click', clickhandler );
    })
</script>
0
Professor Abronsius 17 mars 2019 à 13:36