2016-07-07 19 views
14

Projektuję stronę internetową nieruchomości. Mam wiele reklam na mojej stronie i dzięki memu przyjacielowi Arszowi Singhowi utworzę przycisk "ulubione" lub "zapisz" na każdym ze stanowisk, który zapisze wybrany tytuł strony na określonej stronie na podstawie plików cookie, aby użytkownik mógł przejrzeć post kiedy kiedykolwiek chce.
Teraz chcę wysłać identyfikator reklamy do ulubionej strony, gdy użytkownik kliknie "dodaj do ulubionych", dlatego na podstawie identyfikatora mogę pobrać te dane reklam z bazy danych.
Czy mogę to zrobić? w jaki sposób? to jest mój obecny kod i może wysyłać tylko tytuł strony do ulubionej strony. dowolny pomysł?jak przekazać zmienną do następnej strony z ciasteczkami

<!DOCTYPE html> 
 
<html> 
 
<head> 
 
    <title>New page name</title> 
 
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.2/jquery.min.js"></script> 
 
    <script src=favoritecookie.js></script> 
 
</head> 
 
<body> 
 
    <a href="javascript:void(0);" id="addTofav">Add me to fav</a> 
 
    <ul id="appendfavs"> 
 

 
    </ul> 
 
    
 
<?php 
 
error_reporting(0); 
 
include("config.php"); 
 
(is_numeric($_GET['ID'])) ? $ID = $_GET['ID'] : $ID = 1; 
 
$result = mysqli_query($connect,"SELECT*FROM ".$db_table." WHERE idhome = $ID"); 
 
?> 
 
<?php while($row = mysqli_fetch_array($result)): 
 
$price=$row['price']; 
 
$rent=$row['rent']; 
 
$room=$row['room']; 
 
$date=$row['date']; 
 
?> 
 
<?php 
 
echo"price"; 
 
echo"room"; 
 
echo"date"; 
 
?> 
 
<?php endwhile;?> 
 

 
</body> 
 
</html>

//favoritecookie.js 
 
/* 
 
     * Create cookie with name and value. 
 
     * In your case the value will be a json array. 
 
     */ 
 
     function createCookie(name, value, days) { 
 
     var expires = '', 
 
     date = new Date(); 
 
     if (days) { 
 
      date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000)); 
 
      expires = '; expires=' + date.toGMTString(); 
 
     } 
 
     document.cookie = name + '=' + value + expires + '; path=/'; 
 
     } 
 
     /* 
 
     * Read cookie by name. 
 
     * In your case the return value will be a json array with list of pages saved. 
 
     */ 
 
     function readCookie(name) { 
 
     var nameEQ = name + '=', 
 
     allCookies = document.cookie.split(';'), 
 
     i, 
 
     cookie; 
 
     for (i = 0; i < allCookies.length; i += 1) { 
 
      cookie = allCookies[i]; 
 
      while (cookie.charAt(0) === ' ') { 
 
      cookie = cookie.substring(1, cookie.length); 
 
      } 
 
      if (cookie.indexOf(nameEQ) === 0) { 
 
      return cookie.substring(nameEQ.length, cookie.length); 
 
      } 
 
     } 
 
     return null; 
 
     } 
 
     /* 
 
     * Erase cookie with name. 
 
     * You can also erase/delete the cookie with name. 
 
     */ 
 
     function eraseCookie(name) { 
 
     createCookie(name, '', -1); 
 
     } 
 

 
     var faves = new Array(); 
 

 
     function isAlready(){ 
 
     var is = false; 
 
     $.each(faves,function(index,value){ 
 
      if(this.url == window.location.href){ 
 
      console.log(index); 
 
       faves.splice(index,1); 
 
       is = true; 
 
      } 
 
     }); 
 
     return is; 
 
     } 
 

 
     $(function(){ 
 
     var url = window.location.href; // current page url 
 
     $(document.body).on('click','#addTofav',function(e){ 
 
      e.preventDefault(); 
 
      var pageTitle = $(document).find("title").text(); 
 
      if(isAlready()){ 
 
      } else { 
 
       var fav = {'title':pageTitle,'url':url}; 
 
       faves.push(fav); 
 
      } 
 
      var stringified = JSON.stringify(faves); 
 
      createCookie('favespages', stringified); 
 
      location.reload(); 
 
     }); 
 
     $(document.body).on('click','.remove',function(){ 
 
      var id = $(this).data('id'); 
 
      faves.splice(id,1); 
 
      var stringified = JSON.stringify(faves); 
 
      createCookie('favespages', stringified); 
 
      location.reload(); 
 
     }); 
 

 
     var myfaves = JSON.parse(readCookie('favespages')); 
 
     if(myfaves){ 
 
      faves = myfaves; 
 
     } else { 
 
      faves = new Array(); 
 
     } 
 
     $.each(myfaves,function(index,value){ 
 
      var element = '<li class="'+index+'"><h4>'+value.title+'</h4> <a href="'+value.url+'">Open page</a> '+ 
 
      '<a href="javascript:void(0);" class="remove" data-id="'+index+'">Remove me</a>'; 
 
      $('#appendfavs').append(element); 
 
     }); 
 
     });

+1

Wystarczy szybkie notatki do ** ostrzec o zastrzyki SQL **, to dobrze, że sprawdzając 'is_numeric ($ _ GET [ 'id' ]) 'ale powinieneś również zawsze używać at le ast 'mysqli_real_escape_string()' http://php.net/manual/en/mysqli.real-escape-string.php. i może napisać jako "$ ID = is_numeric" ($ _ GET ['ID'])?$ _GET ['ID']: 1; ':) – antoni

Odpowiedz

0

Oto refactored kod, który działa lepiej (z SO answer):

/* 
* Create cookie with name and value. 
* In your case the value will be a json array. 
*/ 
function createCookie(name, value, days) { 
    var expires = '', 
    date = new Date(); 
    if (days) { 
    date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000)); 
    expires = '; expires=' + date.toGMTString(); 
    } 
    document.cookie = name + '=' + value + expires + '; path=/'; 
} 
/* 
* Read cookie by name. 
* In your case the return value will be a json array with list of pages saved. 
*/ 
function readCookie(name) { 
    var nameEQ = name + '=', 
    allCookies = document.cookie.split(';'), 
    i, 
    cookie; 
    for (i = 0; i < allCookies.length; i += 1) { 
    cookie = allCookies[i]; 
    while (cookie.charAt(0) === ' ') { 
     cookie = cookie.substring(1, cookie.length); 
    } 
    if (cookie.indexOf(nameEQ) === 0) { 
     return cookie.substring(nameEQ.length, cookie.length); 
    } 
    } 
    return null; 
} 
/* 
* Erase cookie with name. 
* You can also erase/delete the cookie with name. 
*/ 
function eraseCookie(name) { 
    createCookie(name, '', -1); 
} 

var faves = { 
    add: function (new_obj) { 
    var old_array = faves.get(); 

    old_array.push(new_obj); 
    faves.create(old_array); 
    }, 

    remove_index: function (index) { 
    var old_array = faves.get(); 

    old_array.splice(index, 1); 
    faves.create(old_array); 
    }, 

    remove_id: function (id) { 
    var old_array = faves.get(); 

    var id_index = faves.get_id_index(id); 
    faves.remove_index(id_index); 
    }, 

    create: function (arr) { 
    var stringified = JSON.stringify(arr); 
    createCookie('favespages', stringified); 
    }, 

    get: function() { 
    return JSON.parse(readCookie('favespages')) || []; 
    }, 

    get_id_index: function (id) { 
    var old_array = faves.get(); 

    var id_index = -1; 
    $.each(old_array, function (index, val) { 
     if (val.id == id) { 
     id_index = index; 
     } 
    }); 

    return id_index; 
    }, 

    update_list: function() { 
    $("#appendfavs").empty(); 
    $.each(faves.get(), function (index, value) { 
     var element = '<li class="' + index + '"><h4>' + value.id + '</h4> <a href="' + value.url + '">Open page</a> ' + 
     '<a href="javascript:void(0);" class="remove" data-id="' + value.id + '">Remove me</a>'; 

     $('#appendfavs').append(element); 
    }); 
    } 
} 

$(function() { 
    var url = window.location.href; 

    $(document.body).on('click', '#addTofav', function (e) { 
    var pageId = window.location.search.match(/ID=(\d+)/)[1]; 

    if (faves.get_id_index(pageId) !== -1) { 
     faves.remove_id(pageId); 
    } 
    else { 
     faves.add({ 
     id: pageId, 
     url: url 
     }); 
    } 

    faves.update_list(); 
    }); 

    $(document.body).on('click', '.remove', function() { 
    var url = $(this).data('id'); 

    faves.remove_id(url); 
    faves.update_list(); 
    }); 

    $(window).on('focus', function() { 
    faves.update_list(); 
    }); 

    faves.update_list(); 
}); 
4

JSON w Cookie Można użyć JSON przechowywać dane (id, nazwisko stanowisko, itp) do cookie przez SZEREGOWANIE JSON: jquery save json data object in cookie

Użytkownik nie powinien jednak przechowywać nazw tabel bazy danych w plikach cookie dla celów bezpieczeństwa.

PHP ciasteczka dostęp https://davidwalsh.name/php-cookies

+1

Należy również pamiętać o tym, w jaki sposób pliki cookie są przetwarzane w strumieniu danych HTTP: zawsze istnieje" podróż w obie strony "między klientem a hostem. Możesz zobaczyć transfer plików cookie w nagłówku HTTP * za pomocą funkcji debugowania dowolnej przeglądarki. ** LQQK ** na to, aby zobaczyć dokładnie, co jest przekazywane, kiedy i jak. (I, że to * jest * przekazywane zgodnie z oczekiwaniami. "Nigdy nie zakładaj ...") –

+0

@Mike Ah tak ... założenia ... zmora każdego programisty – Jonathan

3

chciałbym użyć czystego PHP ... setcookie(), aby umieścić ciasteczko, i czytać je z powrotem w razie potrzeby za pomocą php $ _COOKIE. Ponieważ istnieje potrzeba przechowywania wielu danych, uporządkowanych, powiązanych lub nie, utworzyłbym tablicę asocjacyjną, odpowiednio ją wypełniam, a następnie użyję PHP serialize() przed zapisaniem jej w ciasteczku; unserialize() podczas odczytu:

Zapisywanie:

a) $data = array("ID"=>value, "otherdata"=>value...etc); 
b) $dataPacked = serialize($data); 
c) setcookie("cookieName", $dataPacked); 

Reading:

a) $dataPacked = $_COOKIE["cookieName"]; 
b) $data = unserialize($dataPacked); 

Następnie użyj $ tablicę danych, ile potrzeba. Jeśli będę potrzebował trochę Javascript z tych danych byłoby po prostu zrobić:

<script> 
var jsVar = "<?php echo $data['key'];?>"; 

Albo iść hodowcy z pętli napisać więcej vars od $ dane, itp

+0

dziękuję za odpowiedź. jak widzisz w moim pytaniu, dodałem, ustaw ciasteczko na podstawie czystego php. i działa dobrze, ale chcę dodać do niego inne opcje, takie jak ustawić plik cookie za pomocą przycisku lub usunąć określony identyfikator strony z plików cookie, jeśli użytkownik kliknie dwa razy na "dodaj do ulubionych", których nie mogę osiągnąć bez użycia javascript – Malekian

+0

jeśli chcesz pozostać na tej stronie i wciąż ustawić ciasteczko, możesz użyć ajaxa do php, który ustawia plik cookie ... użyj POST do wysłania ID lub innych danych do PHP. Jednak plik cookie jest już ustawiony, więc strona musi zostać ponownie załadowana, aby uzyskać zmiany –

1

końcu dostałem odpowiedź. zastąpić ten kod javascript zamiast pytanie javascript (favoritecookie.js) i widać, że działa jak charm.with ten kod u można zapisać id w pliku cookie, a następnie pobrać go gdziekolwiek chcesz u

<script> 
 
    /* 
 
    * Create cookie with name and value. 
 
    * In your case the value will be a json array. 
 
    */ 
 
    function createCookie(name, value, days) { 
 
    var expires = '', 
 
    date = new Date(); 
 
    if (days) { 
 
     date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000)); 
 
     expires = '; expires=' + date.toGMTString(); 
 
    } 
 
    document.cookie = name + '=' + value + expires + '; path=/'; 
 
    } 
 
    /* 
 
    * Read cookie by name. 
 
    * In your case the return value will be a json array with list of pages saved. 
 
    */ 
 
    function readCookie(name) { 
 
    var nameEQ = name + '=', 
 
    allCookies = document.cookie.split(';'), 
 
    i, 
 
    cookie; 
 
    for (i = 0; i < allCookies.length; i += 1) { 
 
     cookie = allCookies[i]; 
 
     while (cookie.charAt(0) === ' ') { 
 
     cookie = cookie.substring(1, cookie.length); 
 
     } 
 
     if (cookie.indexOf(nameEQ) === 0) { 
 
     return cookie.substring(nameEQ.length, cookie.length); 
 
     } 
 
    } 
 
    return null; 
 
    } 
 
    function eraseCookie(name) { 
 
    createCookie(name,"",-1); 
 
} 
 

 
    var faves = new Array(); 
 
\t function isAlready(){ 
 
    var is = false; 
 
    $.each(faves,function(index,value){ 
 
     if(this.url == window.location.href){ 
 
     console.log(index); 
 
      faves.splice(index,1); 
 
      is = true; 
 
     } 
 
    }); 
 
    return is; 
 
    } 
 
$(function(){ 
 
var url = window.location.href; // current page url 
 
    var favID; 
 
    var query = window.location.search.substring(1); 
 

 
\t var vars = query.split("&"); 
 
    for (var i=0;i<vars.length;i++) { 
 
     var pair = vars[i].split("="); 
 
     var favID = (pair[0]=='ID' ? pair[1] :1) 
 
//alert(favID); 
 
\t } 
 
\t $(document.body).on('click','#addTofav',function(){ 
 
\t  if(isAlready()){ 
 
     } else { 
 
      var fav = {'favoriteid':favID,'url':url}; 
 
      faves.push(fav);//The push() method adds new items (fav) to the end of an array (faves), and returns the new length. 
 
     } 
 
\t var stringified = JSON.stringify(faves); 
 
    createCookie('favespages', stringified); 
 
    location.reload(); 
 
\t }); 
 
\t  $(document.body).on('click','.remove',function(){ 
 
     var id = $(this).data('id'); 
 
     faves.splice(id,1); 
 
     var stringified = JSON.stringify(faves); 
 
     createCookie('favespages', stringified); 
 
     location.reload(); 
 
    }); 
 
    var myfaves = JSON.parse(readCookie('favespages')); 
 
    if(myfaves){ 
 
    faves = myfaves; 
 
    } else { 
 
    faves = new Array(); 
 
    } 
 
    $.each(myfaves,function(index,value){ 
 
     var element = '<li class="'+index+'"><h4>'+value.favoriteid+'</h4> '+ 
 
     '<a href="javascript:void(0);" class="remove" data-id="'+index+'">Remove me</a>'; 
 
     $('#appendfavs').append(element); 
 
    }); 
 

 
}); 
 
</script>

Powiązane problemy