Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]rejestracja klikniecia linku w bazie danych
Forum PHP.pl > Forum > Przedszkole
Ryach
Szukam od jakiegoś czasu możliwości zapisania w bazie danych każdego kliknięcia na wybrany link, docelowo chciałbym aby zawierał on jakaś krotka informacje co, kto, i skąd, ale to dodam sam jak tylko uda mi się coś takiego uruchomić.
Może ktoś już próbował coś takiego zrobić i znalazł jakaś dokumentacje na ten temat, Będę wdzięczny za każdą pomoc
rad11
  1.  
  2. <a href="#" data-co="klik" data-kto="janek" data-kiedy="2014-11-02">Kliknij</a>
  3.  



  1.  
  2. $('a').on('click', function(e){
  3.  
  4. var co = $(this).data('co');
  5. var kto = $(this).data('kto');
  6. var kiedy = $(this).data('kiedy ');
  7.  
  8. $.ajax({
  9. url: "link metody lub pliku",
  10. data: {
  11. co: co,
  12. kto: kto,
  13. kiedy: kiedy
  14. },
  15. type: "POST",
  16. dataType : "JSON",
  17. success: function(res) {
  18. console.log(res);
  19. }
  20. });
  21.  
  22.  
  23. });
  24.  


  1.  
  2. public function dodanie(){
  3.  
  4. //tutaj robisz insert tego kliknieciu
  5.  
  6. $co = $_POST['co'];
  7. $kto = $_POST['kto'];
  8. $kiedy = $_POST['kiedy'];
  9.  
  10. $pdo = new PDO('mysql:host=localhost;dbname=produkty;port=3305', 'root', 'root');
  11.  
  12. $stmt = $pdo -> prepare('INSERT INTO `klik` (`co`, `kto`, `kiedy`) VALUES(
  13. :co,
  14. :kto,
  15. :kiedy)');
  16.  
  17. $stmt -> bindValue(':co', $co, PDO::PARAM_STR);
  18. $stmt -> bindValue(':kto', $kto, PDO::PARAM_STR);
  19. $stmt -> bindValue(':kiedy', $kiedy, PDO::PARAM_STR);
  20.  
  21. }
  22.  
maviozo
Skoro to ma działać dla linków, to chyba prościej przy ładowaniu strony po prostu zapisać w logu, niż wysyłać jakieś ajaxy.
Wszystkie daty, użytkowników i tak będziesz miał w php.
Rysh
Cytat(rad11 @ 19.12.2014, 12:26:22 ) *
  1.  
  2. <a href="#" data-co="klik" data-kto="janek" data-kiedy="2014-11-02">Kliknij</a>
  3.  



  1.  
  2. $('a').on('click', function(e){
  3.  
  4. var co = $(this).data('co');
  5. var kto = $(this).data('kto');
  6. var kiedy = $(this).data('kiedy ');
  7.  
  8. $.ajax({
  9. url: "link metody lub pliku",
  10. data: {
  11. co: co,
  12. kto: kto,
  13. kiedy: kiedy
  14. },
  15. type: "POST",
  16. dataType : "JSON",
  17. success: function(res) {
  18. console.log(res);
  19. }
  20. });
  21.  
  22.  
  23. });
  24.  


  1.  
  2. public function dodanie(){
  3.  
  4. //tutaj robisz insert tego kliknieciu
  5.  
  6. $co = $_POST['co'];
  7. $kto = $_POST['kto'];
  8. $kiedy = $_POST['kiedy'];
  9.  
  10. $pdo = new PDO('mysql:host=localhost;dbname=produkty;port=3305', 'root', 'root');
  11.  
  12. $stmt = $pdo -> prepare('INSERT INTO `klik` (`co`, `kto`, `kiedy`) VALUES(
  13. :co,
  14. :kto,
  15. :kiedy)');
  16.  
  17. $stmt -> bindValue(':co', $co, PDO::PARAM_STR);
  18. $stmt -> bindValue(':kto', $kto, PDO::PARAM_STR);
  19. $stmt -> bindValue(':kiedy', $kiedy, PDO::PARAM_STR);
  20.  
  21. }
  22.  

Po co na siłę pchać tam AJAX'a? Tak jak pisze maviozo, lepiej dać przy ładowaniu insert nowego rekordu masz wszystko ładnie jak na tacy.
Ryach
dziękuje bardzo za nakierowanie na odpowiednie tory, poniżej moja poprawiona wersja która możne komuś pomoże ?
zostawiłem tez podgląd w textarea i alerty na wszelki wypadek, do osunięcia gdy już nie będą potrzebne


  1. <!doctype html>
  2. <meta charset="utf-8">
  3. <title>Klick Counter</title>
  4. <script src="http://code.jquery.com/jquery-latest.min.js"type="text/javascript"></script>
  5. </head>
  6.  
  7.  
  8. <textarea rows="20" cols="100" id="debug"></textarea>
  9. <br/>
  10. <p>test</p>
  11. <br/>
  12. <a href="http://link" alt="Shop-link">Kliknij</a>
  13. <br/>
  14.  
  15.  
  16. $('a').click(function(e) {
  17. // alert("clicked");
  18. // alert($(this).attr("alt"));
  19. if($(this).attr("alt").indexOf("Shop-link")!=-1) {
  20. //prevent the redirect;
  21. mylink = $(this).attr("href");
  22. myloc = window.location.href;
  23. myalt = $(this).attr("alt");
  24. mytarget = $(this).attr("target") ? $(this).attr("target") : "";
  25. e.preventDefault();
  26. //do your tracking
  27. var myparams = {co:mylink,kto:myloc,alt:myalt}
  28.  
  29. // alert(mylink);
  30. $.post("regist-Click.php",myparams,function(f) {
  31. $("#debug").val(f);
  32. // alert("xx");
  33. }).always(function() {
  34. if(mytarget == "") {
  35. window.location.replace(mylink);
  36. } else {
  37. if(mytarget == "_new") {
  38. window.open(mylink);
  39. } else {
  40. window.open(mylink,mytarget);
  41. }
  42. }
  43.  
  44. // alert("finished");
  45. });
  46. }
  47. });


plik regist-Click.php
dane do polacznia z DB w osobnym pliku include 'DB-dt.php';
  1. <?php
  2. include 'DB-dt.php';
  3. $co = $_POST['co'];
  4. $kto = $_POST['kto'];
  5. try {
  6. $conn = mysql_connect($servername, $username, $password);
  7. mysql_select_db($dbname, $conn) or die (mysql_error());
  8. $sql = mysql_query("INSERT INTO klik(co, kto, kiedy, time) VALUES( '$co', '$kto', now(), CURTIME())");
  9. print("ok!");
  10. } catch (Exception $e) {
  11. print($e->getMessage());
  12. echo $sql . "<br>" . $e->getMessage();
  13. }
  14. $conn = null;
  15.  
  16. ?>
  17.  
  18.  
  19.  
Rysh
Nie zabezpieczasz swojego skryptu przed SQL Injection?
Ryach
Masz racje powinienem dodać:
  1. $sql = mysql_escape_string( mysql_query("INSERT INTO klik(co, kto, kiedy, time) VALUES( '$co', '$kto', now(), CURTIME()"));

myślę ze powinno to wystarczyć, proszę wyprowadź mnie z błędu jeżeli się mylę.
Umieściłem tutaj podstawowa wersje działającego skryptu nad którego funkcjonalnością prawdopodobnie jeszcze posiedzę
Rysh
Cytat(Ryach @ 6.01.2015, 13:34:19 ) *
Masz racje powinienem dodać:
  1. $sql = mysql_escape_string( mysql_query("INSERT INTO klik(co, kto, kiedy, time) VALUES( '$co', '$kto', now(), CURTIME()"));

myślę ze powinno to wystarczyć, proszę wyprowadź mnie z błędu jeżeli się mylę.
Umieściłem tutaj podstawowa wersje działającego skryptu nad którego funkcjonalnością prawdopodobnie jeszcze posiedzę

Tak lepiej, w każdym razie lepiej przeżuć się już na PDO i binduj wartości które chcesz wrzucić do tabeli - ewentualnie mysqli_query.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.