Wszystko sprowadza się do używania document.cookie → http://kursjs.pl/kurs/cookie.html
BTW angielski to w tej branży podstawa, bez niego nic nie zdziałasz.
Prawdę mówiąc ja tam zaawansowanych przykładów nie widzę… Nic ponad http://kursjs.pl/kurs/cookie.html#tworzymy_pierwsze_ciasteczko nie jest Ci potrzebne. Skopiuj sobie podaną tam funkcję utworzCiasteczko i spróbuj ją rozkminić.
Jedynie musiałbyś zmienić ten fragment:
data.setTime(data.getTime()+(dni*24*60*60*1000));
(hint: czas podaje się w milisekundach, więc minuta to 60 sekund po 1000 milisekund każda).
Po prostu wstawić skrypt na koniec body i wywołać:
<body> <p>Tutaj treść</p> <script src="naszskrypt.js"></script> <script>funkcja();</script> </body>
Dziękuję Ci bardzo, ostatnie tylko pytanie.
mysql_result($result,document.cookie,"nazwa1");
taki zapis będzie poprawny?
Bo wcześniej miałem ciasteczka z PHP i wyglądało to tak:
mysql_result($result,$_COOKIE["i"],"nazwa1");
Oczywiście, że nie, bo nie można mieszać kodu JS z PHP (a przynajmniej nie w taki sposób i nie w tę stronę). Ciasteczka utworzone w JS będą normalnie dostępne w PHP przez $_COOKIE.
BTW nie używaj mysql_*, bo je usunięto w PHP7 – zainteresuj się PDO lub mysqli.
Mam problem, mam funkcje: function ciasteczka(){
function ciasteczka(){ document.cookie = "2; expires=''"; var x = parseInt(document.cookie); alert(x); }
- wyskakuje mi wynik: NaN za to jak próbuję wydrukować ciasteczko w PHP, to mam sam wynik: Array, robię to przez: echo $_COOKIE; Mógłbyś mi pomóc?
echo $_COOKIE[ '2' ];
?
Zrób se var_dump i zobacz, jakie masz ciasteczka
Inna rzecz, że źle ustawiasz ciastko w JS (gdzie nazwa? 2 to raczej wartość).
Kurcze, nigdy się z niczym tak nie namęczyłem. :(
Mam teraz:
<?php echo $_COOKIE[ 'ciasteczko' ]; echo "test"; / to się poprawnie drukuje xD ?>
function ciasteczka(){ document.cookie = "2; expires=''; username='ciasteczko'"; var x = parseInt(document.cookie); alert(x); }
jestem wdzięczny, że starasz się mi pomóc
document.cookie = 'ciasteczko=2;';
↑ To ustawi Ci ciasteczko o wartości 2 i nazwie ciasteczko. parseInt( document.cookie ) nie zadziała, bo w document.cookie masz zapisane wszystkie ciasteczka.
Kurde, ale mi wstyd, mogę nawet zapłacić za kolejne pomocy, jestem Ci wdzięczny, ale mam taki problem, że to ciasteczko jest w stringu i nie działa mi przez to:
$zmiana2 = "UPDATE [...] WHERE $_COOKIE[ 'ciasteczko' ]=id_porownania"; mysql_query($zmiana2);
Tyle roboty jeszcze, a termin coraz bliżej. :/
var_dump( $zmiana2 ); i zobacz, jak to zapytanie dokładnie wygląda, zanim je wykonasz.
Udało mi się tak rozwiązać ten problem:
$id = mysql_result($result, $_COOKIE[ 'ciasteczko' ], "id_porownania"); $id_k = (int)$id; $zmiana2 = "[...] WHERE '$id_k'=id_porownania"; mysql_query($zmiana2);
i działa ;)
Jak będę miał jeszcze jakieś problemy to mogę się tu odezwać czy jesteś już troszkę zdenerwowany? :P Wiem, że robię wszystko chaotycznie, ale muszę dokończyć to co mam do zrobienia, ale coraz bardziej mi się to (programowanie) podoba i na pewno od początku maja wezmę się za solidną naukę solidnych zasad.
Chcę zrobić coś takiego, że jeśli ciasteczko istnieje, to niech zwiększy wartość o 1 w innym wypadku niech je stworzy.
function ciasteczka(){ if(documment.cookie=FALSE){ document.cookie = "ciasteczko=0; expires=''"; } ELSE { var wartosc = ciasteczko + 1; document.cookie = "ciasteczko='wartosc'; expires=''"; } }
dobrze kombinuję?
Nie.
Po pierwsze: naciśnij F12 i poznaj konsolę w przeglądarce. Wówczas będzie Ci łatwiej zrozumieć co się dzieje.
Po drugie: document.cookie jest tekstem, który zawiera wszystkie ciasteczka, oddzielone średnikami.
Też nie.
Musisz:
Heh, wcale się nie dziwię, bo ktoś, kto stworzył "API" document.cookie prawdopodobnie będzie się po wieki smażył w webdevowym piekle.
Przynajmniej odkryłeś sekret dlaczego
Pewnie się teraz załamiesz moją głupotą, ale tylko coś takiego mam:
function ciasteczka(){ if (document.cookie.indexOf( 'ciasteczko' )) == 0{ var wartosc = document.cookie.split('ciasteczko'); //var odfiltrowana = + nie rozumiem //odfiltrowana+=1 //document.cookie = "ciasteczko=odfiltrowana; expires=''"; } else{ document.cookie = "ciasteczko=0; expires=''"; } }
<!DOCTYPE html> <html lang="pl" dir="ltr"> <head> <meta charset="UTF-8"> <title>Ehhhh</title> <style> </style> </head> <body> <p></p> <button>Updatnij ciacho!</button> <script> function updateCookie( name ) { // Jeśli indexOf zwróci -1, to znaczy, że takiego ciastka // nie ma i trzeba je utworzyć. if ( document.cookie.indexOf( name ) === -1 ) { document.cookie = 'ciasteczko=0'; return 0; } else { // Pobieramy wartość ciasteczka. var cookie = parseInt( document.cookie.split( ';' ).filter( function( cookie ) { return cookie.trim().indexOf( name ) === 0; } )[ 0 ].split( '=' )[ 1 ], 10); document.cookie = 'ciasteczko=' + ++cookie; return cookie } } document.querySelector( 'button' ).addEventListener( 'click', function() { document.querySelector( 'p' ).innerHTML = updateCookie( 'ciasteczko' ); }, false ); </script> </body> </html>
Ciebie interesuje przede wszystkim funkcja updateCookie.
var name = <?=$_GET['name'];?> updateCookie( name );
↑ Coś takiego próbowałeś?
Do wyciągania wartości z GET mam osobną funkcję i ona działa. Twój sposób nie działa, do tego jest potrzebna osobna funkcja.
Mam coś takiego:
<script> var name = getUrlVars()["mecz"]; alert(name); // sprawdzam czy poprawnie wyciągnęło wartość function updateCookie( name ){ if ((document.cookie.indexOf ( name ) === -1) || (document.cookie.indexOf ( name ) === '')) { document.cookie = 'ciasteczko=1'; location.reload(); return 0; } else if (document.cookie.indexOf ( name ) === 0) { document.cookie = 'ciasteczko=2'; location.reload(); return 1; } else{ var cookie = parseInt(document.cookie.split(';').filter(function(cookie){return cookie.trim().indexOf(name) === 0;})[0].split('=')[1],10); document.cookie='ciasteczko='+ ++cookie; location.reload(); return cookie; } } </script>
I chcę, żeby do każdej podstrony tworzyło się osobne ciasteczko (zależne od wartości GET).
Więc musisz podawać tę nazwę do ciasteczka. Zamiast:
document.cookie = 'ciasteczko=1';
to:
document.cookie = name + '=1';
itd.
Niestety ciasteczko to jest dostępne wciąż na stronach o innej wartości get.
Kod wygląda tak:
<script> var name = getUrlVars()["mecz"]; //alert(name); // sprawdzam czy poprawnie wyciągnęło wartość function updateCookie( name ){ if ((document.cookie.indexOf ( name ) === -1) || (document.cookie.indexOf ( name ) === '')) { document.cookie = name + '=1'; location.reload(); return 0; } else if (document.cookie.indexOf ( name ) === 0) { document.cookie = name + '=2'; location.reload(); return 2; } else{ var cookie = parseInt(document.cookie.split(';').filter(function(cookie){return cookie.trim().indexOf(name) === 0;})[0].split('=')[1],10); document.cookie= name + '='+ ++cookie; location.reload(); return cookie; } } </script>
Potem mam w PHP:
<?php $mecz = $_GET['mecz']; ... ... if ($num>$_COOKIE['name']) // warunek nie jest spełniony przy wczytaniu drugiej strony (z inną wartością GET), bo wartość ciasteczka pozostaje z pierwszej strony { ... } ... ?>
$_COOKIE[$_GET['name']]
W ten sposób niestety nie działa funkcja updateCookie()
tak mam już dość tych ciasteczek, męczę się męczę z nimi i jeszcze nie skończone :/
Sorry, że tak męczę, ale wygląda to tak:
plik home page:
<a href="kto_lepiej.php?name=porownanie_barca_vs_real"> <a href="kto_lepiej.php?name=porownanie_bayern_vs_borussia">
plik kto_lepiej.php
<script> var name = getUrlVars()["name"]; //alert(name); // sprawdzam czy poprawnie wyciągnęło wartość function updateCookie( name ){ if ((document.cookie.indexOf ( name ) === -1) || (document.cookie.indexOf ( name ) === '')) { document.cookie = name + '=1'; location.reload(); return 0; } else if (document.cookie.indexOf ( name ) === 0) { document.cookie = name + '=2'; location.reload(); return 2; } else{ var cookie = parseInt(document.cookie.split(';').filter(function(cookie){return cookie.trim().indexOf(name) === 0;})[0].split('=')[1],10); document.cookie= name + '='+ ++cookie; location.reload(); return cookie; } } </script>
<?php $name = $_GET['name']; $query = "SELECT * FROM $name"; $result = mysql_query($query); $num = mysql_numrows($result); $i=0; $nazwa1 = mysql_result($result,$_COOKIE[$_GET['name']],"nazwa1"); $zdjecie1 = mysql_result($result,$_COOKIE[$_GET['name']],"zdjecie1"); if ($num>$_COOKIE[$_GET['name']]){ echo "<img src='$zdjecie1' width='290' height='400' > <br>"; echo "$nazwa1 </br>"; echo ' <input class="glosuj" type="button" name="wybieram2" value="Głosuję" onclick="rozszrzenie();lepiej1();schowaj_slajd()"/>'; } else { for ($i=0; $i<=$num; $i++){ $nazwa1 = mysql_result($result,$i,"nazwa1"); $glosy1 = mysql_result($result,$i, "glosy1"); echo "$nazwa1 "; echo "$glosy1 <br>"; } echo "Koniec mozliwosci glosowania"; ;}; ?>
<input class="glosuj" type="submit" name="wybieram1" value="Kolejny" onclick="updateCookie('name')">
Po zmianie na: $_COOKIE[$_GET['name']] - przestała działać funkcja updateCookie - nie pobiera kolejnego rekordu z bazy, tylko cały czas ten sam
93,460 zapytań
142,454 odpowiedzi
322,724 komentarzy
62,837 pasjonatów
Motyw:
Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡
Oto polecana książka warta uwagi.Pełną listę książek znajdziesz tutaj