2016-12-31 4 views
0

データベースから取得したリンクのリストをエコーするループがありますが、リンクのクリック数を追跡したいと思います。ページ上の各リンクがクリックされた回数を追跡する

フォーム

link1 
link2 
link3 
link4 
link5 

link1 (2) 
link2 (7) 
link3 (3) 
link4 (4) 
link5 (1) 

ので、リンク1がクリックされるたびに、そのリンク1を記録し、次のリンクに表示されるべきでクリックされた回数の量。

これはこれまでのコードです。

echo "<table>"; 
while($row = mysql_fetch_array($result)){ 
//echo "<tr><td>" . $row['title'] . "</td><td>" . $row['url'] . "</td></tr>"; 
echo "<tr><td> <a href='" . $row['url'] . "' ' target='_blank'>" . $row['title'] . "</a> </td></tr>"; 
} 
echo "</table>"; 
+0

まず、リンクのクリックを追跡する必要があります。あなたはどうやってそれをしますか?あなたがそれらを追跡していない場合、それらを表示しようとする点はありません。 –

+0

あなたが望むことをしようとするコードはありません。あなたが持っているのは、リンクをレンダリングするコードだけです。あなたの説明から、クリック情報を保持する方法と、それを表示したいとき(同じユーザー、別のユーザー、など) –

+0

リンクがクリックされるたびにその番号が更新されるようにしてください。どのユーザーでも同じでなければなりません。何もない。私はそれがまっすぐになることを望んでいた。私はコードのロジックが必要です。 –

答えて

0

あなたは、あなたが永続的にそれを保存するには、このような何かを行うことができ、すべてのclics

var counter = {}; 
 

 
function manageClicks(url) { 
 
\t if (! counter[url]) counter[url] = 0; 
 
\t counter[url] ++; 
 
\t alert('you clicked '+counter[url]+' '+url); 
 
    
 
    // return location.href = url; 
 
\t return false; 
 
}
<p> 
 
Click some link: 
 
</p> 
 
<a href="#" onclick='manageClicks("url1")'> url1 </a><br> 
 
<a href="#" onclick="manageClicks('url2')"> url2 </a><br> 
 
<a href="#" onclick="manageClicks('url3')"> url3 </a><br>

+0

しかし、クライアントがリロードまたはリダイレクトされると、レコードは保持されません。これは実際に記録を残しているわけではなく、個々のクライアントがそのページをクリックしている間の一時的なログを保持しているだけです。これは非常に悪い解決策です。 – NewToJS

+0

どうすればそのダイアログからページに移動できますか?私は病気がこれを使うと思う。 –

+0

また、私はデータベースにそれを格納する必要があります。そこに何かヒントはありますか? –

0

を管理するためのJavaScript関数を使用することができます。これはコードの少しの基本的なアイデアです。私はではなく、をテストしました。

また、データベースに適切なセルを取得するには、リンクと一意のIDへのマッピングが必要です。

フロントエンドのもの:ユーザーがリンクをクリックした場合

<a href="http://yoururl.com/" onclick="handleLinkClick(this, 'a-unique-id')"> 
    Your link <span class="counter">(<?php echo getLogCount('a-unique-id') ?></span>) 
</a> 

は今、あなたはこれを行うことができます:

function handleLinkClick(element, urlId) { 
    $.ajax({ 
     url: '/logurl.php', 
     method: 'POST', 
     data: { 
      id: urlId 
     } 
    }); 

    // Count up immediately. You could also wait for a valid response. 
    var counterEl = element.querySelector('.counter'); 
    var currentCount = parseInt(counterElement.innerHTML); 

    counterEl.innerHTML = (currentCount + 1).toString(); 
} 

バックエンドのもの:

のために"getLogCount"あなた

:あなたの「logurl.php」ファイルはこのようになります。データベース内のユーザーのクリックを記録するために今すぐ

function getLogCount($urlId) { 
    $result = 0; 

    // @todo: Request to the database and get the count of the "$urlId". 
    // And save the result it in "$result" 

    return $result; 
} 

:(PHPで)データベースからのクリックを返す関数を定義することができ

$urlId = intval($_POST['id']); 

// @todo: Update/Create a new entry in the database for the urlId. 
// Maybe the columns could look something like: urlId (unique), clicks 

私はこれがあなたの問題を少し助けてくれることを願っています。

関連する問題