2012-04-03 113 views
4

enter image description here结合JQuery/PHP来将点击记录到数据库中?

附图显示了我正在构建的搜索引擎的结果页面。对于每个返回结果,用户可以点击结果(即“食品科学”),并且将展开手风琴风格以揭示关于该特定结果的信息。

我想记录每次用户点击结果(出于学习/情报的目的),并将其存储在我已创建的数据库表中,该表存储会话ID,查询,结果的位置以及用户点击该项目的顺序。我已经有一个函数,将拉动被点击的结果的标题,我有它设置我想要记录点击的位置,但我不知道如何做,因为JQuery是客户端和PHP是服务器端。

如何使用JQuery触发PHP函数,以便我可以查询数据库以将点击日志插入到我的表中?

以下是JQuery函数。

$(document).ready(function() { 
    $('.accordionButton').click(function(e) { 
     if($(this).next().is(':hidden') == true) { 
      $(this).addClass('on'); 
      $(this).next().slideDown('normal'); 
      $(this).next().slideDown(test_accordion); 
      // SEND CLICK ACTION TO LOG INTO THE DATABASE 
      alert($(this).find('h3:last').text()); // displays the title of the result that was just clicked 
     } 
     else { 
      $(this).removeClass('on'); 
      $(this).next().slideUp('normal'); 
      $(this).next().slideUp(test_accordion); 
     } 
    }); 
} 
+0

如果你有预算,宁愿不推倒重来,我建议HTTP:/ /www.clicktale.com – AlienWebguy 2012-04-03 20:44:51

+0

有趣。我宁愿自己建造它。我已经建立了一个数据库并且已经有了一个学习算法,所以我需要做的就是找出一些方法来查看用户点击的内容。不过谢谢你的建议! – Jon 2012-04-03 20:46:27

+0

使用AJAX !! http://api.jquery.com/jQuery.ajax/ – 2012-04-03 20:50:24

回答

3

你可以做这样的事情(未经测试):

定义JavaScript变量来跟踪的顺序在点击功能之外的点击:

var order = 0; 

添加这个到您的点击功能,在底部:

order++; 
var sessionID = $("input[name='sessionID']").val(); // assuming you have sessionID as the value of a hidden input 
var query = $("#query").text(); // if 'query' is the id of your searchbox 
var pos = $(this).index() + 1;  // might have to modify this to get correct index 
$.post("logClick.php", {sessionID:sessionID, query:query, pos:pos, order:order}); 

在你所谓的“logClick.php” php脚本(在同一个目录):

<?php 
    // GET AJAX POSTED DATA 
    $str_sessionID = empty($_POST["sessionID"]) ? '' ; $_POST["sessionID"]; 
    $str_query = empty($_POST["query"]) ? '' ; $_POST["query"]; 
    $int_pos = empty($_POST["pos"]) ? 1 ; (int)$_POST["pos"]; 
    $int_order = empty($_POST["order"]) ? 1 ; (int)$_POST["order"]; 

    // CONNECT TO DATABASE 
    if ($str_sessionID && $str_query) { 
     require_once "dbconnect.php"; // include the commands used to connect to your database. Should define a variable $con as the mysql connection 

     // INSERT INTO MYSQL DATABASE TABLE CALLED 'click_logs' 
     $sql_query = "INSERT INTO click_logs (sessionID, query, pos, order) VALUES ('$str_sessionID', '$str_query', $int_pos, $int_order)"; 
     $res = mysql_query($sql_query, $con); 
     if (!$res) die('Could not connect: ' . mysql_error()); 
     else echo "Click was logged."; 
    } 
    else echo "No data found to log!"; 
?> 

您可以添加一个回调函数作为$。员额()方法阿贾克斯第三个参数,如果你想看看错误的脚本发生:

$.post("logClick.php", {sessionID:sessionID, query:query, pos:pos, order:order}, 
    function(result) { 
     $('#result').html(result); // display script output into a div with id='result' 
     // or just alert(result); 
    }) 
); 

编辑:如果你需要的顺序变量的值来PERSI因为您对结果进行了分页,因此您可以使用GET或POST在页面之间传递此变量的值。然后,您可以将该值保存在隐藏的输入中,并使用jQuery轻松读取它。 (或者你也可以使用cookies)。

范例(把这在每一个结果页面):

<?php 
    $order = empty($_POST["order"]) ? $_POST["order"] : "0"; 
    $html="<form id='form_session' action='' name='form_session' method='POST'> 
     <input type='hidden' name='order' value='$order'> 
    </form>\n"; 
    echo $html; 
?> 

在你的jQuery,只是改变var order = 0;

var order = $("input[name='order']").val(); 

然后,当用户点击一个网页链接,阻止默认链接操作,设置订单值和表单动作,然后使用javascript/jQuery提交表单:

$("a.next_page").click(function(event) { 
    event.preventDefault(); 
    var url = $(this).attr("href"); 
    $("input[name='order']").val(order); 
    $("#form_session").attr('action', url).submit(); 
}); 

所有'next'和'previous'分页链接必须被赋予相同的类(即'next_page'(在本例中))。

编辑:如果您的分页如下:

<div class='pagination'> 
    <ul><li><a href='page1.url'>1</a></li> 
     <li><a href='page2.url'>2</a></li> 
    </ul> 
</div> 

则只是改变这一点:

$("div.pagination a").click(function(event) { 
etc. 
+0

这工作完美,但只有*的事情错误仍然是订单变量。由于结果是分页的,因此我希望保持点击顺序处于活动状态,直到他们启动新的搜索。所以不知何故,我需要全球性地存储“订单”数量,但我不知道如何。有任何想法吗? – Jon 2012-04-04 17:01:18

+0

@Jon:上面代码中的'order'变量是全局的。我认为只需要在用户提交新查询时重置。换句话说,您只需要捕获搜索框提交按钮的'click'事件,或者在按'Enter'时捕获,然后在您的accordionButton的click方法之外重置此变量,例如'$(document).keypress(函数(e){if(e.keyCode == 13)order = 0;});' – Stefan 2012-04-04 17:26:47

+0

@Jon:你的意思是,当他们加载一个带有结果的新页面时,页面被重新加载?是的,那么上面使用的订单价值就会丢失。解决方案:1.使用jQuery,只需用新结果加载div或加载新页面。 2.您可以通过GET参数在新页面url中传递order变量,然后或者直接用javascript读取它的值,或者使用php将其值存储在隐藏输入中,然后使用jQuery从中读取值。 – Stefan 2012-04-04 17:32:28

1

使用jQuery AJAX发送请求到PHP页面。在这里看到更多的信息(这是非常简单):

http://api.jquery.com/jQuery.ajax/

在这种特定情况下,你不需要任何回报,它可能是最好只使用POST或GET在jQuery方法:

http://api.jquery.com/jQuery.post/ http://api.jquery.com/jQuery.get/

喜欢的东西:

$.ajax({ 
  type: "POST", 
  url: "some.php", 
  data: "name=John&location=Boston" 
    success: function(data){ 
    alert('done'); 
}); 
+0

完美!这很有意义。谢谢! – Jon 2012-04-03 21:18:36

1

这个很容易,你需要一个PHP脚本来处理你的搜索页面发送的AJAX请求。

在您的搜索页面中,您需要添加一个.ajax来为脚本创建一个AJAX请求。 您需要了解的关于AJAX的一切信息可以在这里找到:http://api.jquery.com/jQuery.ajax/

在您的PHP脚本中,您将处理数据库操作,使用GET或POST数据为脚本提供Ajax标识。

1

使用Ajax。编写一个简单的php脚本,将点击写入数据库。我不知道如何完全记录数据库中的点击次数,但是您可以将单击的项目唯一标识符通过ajax发送到php脚本,例如通过POST变量。

一个小例子,在点击:

$.post(
'count_click.php', 
{ id: "someid" }, 
function(data) { 
// data = everything the php-script prints out 
}); 

PHP的:

if (isset($_POST['id'])) { 
// add a click in the database with this id 
}