在Click事件中嵌入PHP的Javascript

时间:2013-06-18 01:06:12

标签: php ajax

这是我需要完成的工作。当您单击链接时,我希望运行PHP中的脚本,以记录用户单击链接的内容并将信息保存到SQL表或文件中。

有什么想法吗?

4 个答案:

答案 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函数被认为已弃用,不应该使用。