这是我需要完成的工作。当您单击链接时,我希望运行PHP中的脚本,以记录用户单击链接的内容并将信息保存到SQL表或文件中。
有什么想法吗?
答案 0 :(得分:1)
您可以开始添加onclick elem。我建议使用jquery,但在普通的php中你可以使用:
<elem onlcick="log(this)">
然后你定义(最好的地方在html标题中作为js函数)。你需要通过ajax(再次提出jQuery)来调用php脚本:
function log(element){
// for debugging
console.log(element.name);
// AJAX call
...
// if you are just logging, you probably want to return always true
return true;
}
答案 1 :(得分:0)
PHTML
<input type="hidden" value="<?php echo $this->username; ?>" id="username"></input>
<a href="google.com" class="track" data-value="google">Google</a>
的jQuery
$('.track').click(function(e){
$.ajax({
url: "mysite.com/track",
type: "POST",
data: {
track: $(e.currentTarget).attr('data-value'),
username: $('#username').value();
}
});
});
PHP
public function track() {
$query = "insert into trackingTable ('track','username') values ({$_POST['track']},{$_POST['username']});
$mysql->query($query);
}
答案 2 :(得分:0)
简单....
只需将ajax帖子附加到链接
即可 $('a.pdf').click(function(e){
e.preventDefault();
var id = $('#userid').val();
var href = $(this).attr('href');
$.post("countingpage.php",{ user: id, page: href}).done(function() {
//on success of posting to database, it directs to download
window.location.assign(href);
})
});
然后在你的链接中...如果你可以通过SESSION中的php访问用户ID ....那么只需将该ID插入隐藏字段以便以后提取....
<input type="hidden" id="userid" value="<?php echo $_SESSION['username']; ?>"></input>
然后您的链接在此示例中获取类.pdf,以便Jquery知道要分配的链接..
<a href="adownloadlink.pdf" class='pdf' >YOUR LINKS</a>
<a href="anotherdownloadlink.pdf" class='pdf' >YOUR LINKS</a>
<a href="anewdownloadlink.pdf" class='pdf'>YOUR LINKS</a>
然后你的PHP就在另一边......就像这样....我在这个例子中使用PDO但你可以使用任何......
$conn = new PDO("mysql:host='yourhost';dbname='yourdb'","yourusername","yourpassword");
if(isset($_POST)){
$id = $_POST['id'];
$page = $_POST['page'];
$sql = "INSERT INTO YourTable (userid, page) VALUES (:user_id, :page)";
$q = $conn->prepare($sql);
$test = $q->execute(array(':user_id'=>$id, ':page'=>$page));
if($test) return "Success";
}
答案 3 :(得分:0)
你需要一个html页面作为网页,以及一个php脚本来处理数据库检查。首先是html页面。为简单起见,我将javascript直接放在脚本标记中,但您可能不想这样做。首先,只是主要标签和空脚本标签:
<html>
<head>
<title>AJAX and MySQL Demonstration</title>
<script type="text/javascript"><script> <!--Your script goes here-->
</head>
<body>
<a href="www.example.com" id="link">Link</a> <!--This is the link-->
</body>
</html>
现在放入javascript(这是你将放在上面的脚本标签中):
$('#link').click(function() { // Some jQuery for the on click event handler
var user = "Paul"; // Let's treat this as the user for now
$.post('StoreinDatabase.php', {PHPuser: user}, function(result) {
if (result == '1') { // Result will be '1' if it worked
// Put code here for what to do if storage in the database worked
} else {
// Put code here for what to do if it failed
}
});
});
现在这有点复杂。每次单击链接时,将调用第一行中的函数。第二行包含用户名。如果您有用户名的变量,请将其放在那里。如果你在PHP中使用它或者想要使用IP地址,那么就把它拿出来。第三行使用jQuery的post方法用于AJAX。它使用post方法将变量user
发送到第一个参数中引用的PHP脚本。第二个参数指定使用http'post'方法发送user
变量,并创建可从PHP脚本PHPuser
访问的post变量。您可以使用您想要的任何名称,但我将其称为PHPuser
以区分它和javascript user
变量。如果需要,您也可以将其称为user
。第三个参数是一个在AJAX完成后调用的函数。变量result
,您可以根据需要命名,保存PHP脚本发回的数据。如果一切正常,编写的PHP脚本(按设计,不会自动)返回'1'。现在为那个脚本:
<?php
if (isset($_POST['PHPuser'])) { // This checks if the `PHPuser` sent is set
$user = $_POST['PHPuser'];
$time = time();
$mysql = new mysqli($server, $username, $password, $database);
if (!mysqli_connect_errno()) { // Checks if connection was successful
if ($mysql->query("INSERT INTO $table (ID, User, Timestamp)
VALUES (NULL, $user, $time)")) { // Checks if insert was successful
echo '1'; // Sends '1' to the javascript if it worked
} else {
echo '0'; // Sends '0' to the javascript if it failed
}
$mysql->close(); // Closes connection to database
} else {
echo '0'; // Sends '0' to the javascript if it failed
}
}
?>
这是PHP脚本。不要被吓倒。通过开始标记的第一行确保使用post方法将user
的值传递给PHP。如果你在PHP中使用IP地址或变量,你可以摆脱它和结束括号。如果你正在使用IP地址,你可以访问它并使用这个PHP设置$ user:
if (!empty($_SERVER['HTTP_CLIENT_IP'])) // The preferred way to get IP address
{
$user=$_SERVER['HTTP_CLIENT_IP'];
}
elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) // If that isn't available
{
$user=$_SERVER['HTTP_X_FORWARDED_FOR'];
}
else // If neither of the last two are available, use this way
{
$user=$_SERVER['REMOTE_ADDR'];
}
那来自here。第二行声明变量$user
并将其设置为从javascript发送的PHPuser
变量的值。如果您已在变量中拥有用户,请修改此项,或使用上述IP地址。第三行声明变量$time
并将其设置为当前时间戳。第四行连接到数据库。将$server
,$username
,$password
和$database
替换为MySQL的这四个值。第五行检查连接中的错误。如果没有错误,则第六行和第七行将该行添加到数据库并检查它是否有效。如果是,则将'1'发送回javascript。如果没有,则发送'0'。最后,MySQL连接关闭。通过对用户进行一些修改(例如,如果您在网站上的其他某些PHP脚本上设置了包含用户名的session variables),或者使用IP地址,这应该适用于您的网站。顺便说一下,我使用了mysqli,因为mysql函数被认为已弃用,不应该使用。