• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Ciasteczka w JS

Cloud VPS
0 głosów
1,720 wizyt
pytanie zadane 18 kwietnia 2016 w JavaScript przez niezalogowany
Mógłby mi ktoś pomóc z ciasteczkami w JS?

1. Jak mam zadeklarować ciasteczko na 15 sekund i na 15 minut.

2. Jak mam je wyświetlić

3. Jak mam zwiększyć jego wartość o 1.

 

Proszę bardzo o pomoc.

1 odpowiedź

+2 głosów
odpowiedź 18 kwietnia 2016 przez Comandeer Guru (607,060 p.)
wybrane 18 kwietnia 2016
komentarz 18 kwietnia 2016 przez niezalogowany
Angielskiego nie mam jeszcze dobrego. :/ Poprosiłem o 3 gotowe wyrażenia, a potem bęę sobie radził. :P
komentarz 18 kwietnia 2016 przez Comandeer Guru (607,060 p.)

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.

komentarz 18 kwietnia 2016 przez niezalogowany
Czytałem ten kurs, ale zamiast zacząć od podstaw, to nagle zrobili na bardzo długi okres ciasteczka i nie napisali jak się to przelicza i jak zrobić na małe okresy czasu.

Ja lubię mieć proste przykłady i wtedy ćwiczyć sobie co i jak, a oni zaawansowane dali.

Zresztą nie napisali czy stosowanie ciasteczek w JS jest praktyczne i czy są one nadal po odświeżeniu strony (ale wydaje mi się, że powinny być).
1
komentarz 18 kwietnia 2016 przez Comandeer Guru (607,060 p.)

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).

komentarz 18 kwietnia 2016 przez niezalogowany
Ok, a jak wywołać funkcję przy uruchomieniu strony? Bo znam tylko sposób onclick();
komentarz 18 kwietnia 2016 przez Comandeer Guru (607,060 p.)

Po prostu wstawić skrypt na koniec body i wywołać:

<body>
    <p>Tutaj treść</p>

    <script src="naszskrypt.js"></script>
    <script>funkcja();</script>
</body>

 

komentarz 18 kwietnia 2016 przez niezalogowany

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");

komentarz 18 kwietnia 2016 przez Comandeer Guru (607,060 p.)

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.

komentarz 18 kwietnia 2016 przez niezalogowany
ahaaa, czyli ciasteczka utworzone w PHP i JS niczym się nie różnią :) Dziękuję

 

a odnośnie PDO to zajmę się tym w maju. ;)
komentarz 19 kwietnia 2016 przez niezalogowany

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?

komentarz 19 kwietnia 2016 przez Comandeer Guru (607,060 p.)
echo $_COOKIE[ '2' ]; 

?

komentarz 19 kwietnia 2016 przez niezalogowany
Niestety nie działa również Twój zapis. :/

 

Dodam, że będę chciał mieć potem funkcję, która będzie zwiększała wartość ciasteczka o +1, więc zależy mi żeby to dobrze działało.
komentarz 19 kwietnia 2016 przez Comandeer Guru (607,060 p.)

Zrób se var_dump i zobacz, jakie masz ciasteczka

Inna rzecz, że źle ustawiasz ciastko w JS (gdzie nazwa? 2 to raczej wartość).

komentarz 19 kwietnia 2016 przez niezalogowany

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 

komentarz 19 kwietnia 2016 przez Comandeer Guru (607,060 p.)
document.cookie = 'ciasteczko=2;';

↑ To ustawi Ci ciasteczko o wartości 2 i nazwie ciasteczkoparseInt( document.cookie ) nie zadziała, bo w document.cookie masz zapisane wszystkie ciasteczka.

komentarz 19 kwietnia 2016 przez niezalogowany
Ok, super, działa. Dziękuję Ci bardzo. ;)

Jeszcze się zastanawiam jak mam zwiększyć wartość ciasteczka o 1 w górę, bo chcę napisać do tego osobną funkcję.
komentarz 19 kwietnia 2016 przez Comandeer Guru (607,060 p.)
Pobrać wartość ciasteczka, zwiększyć i zapisać ciasteczko pod tą samą nazwą z inną wartością.
komentarz 19 kwietnia 2016 przez niezalogowany

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. :/ 

 

komentarz 19 kwietnia 2016 przez Comandeer Guru (607,060 p.)

var_dump( $zmiana2 ); i zobacz, jak to zapytanie dokładnie wygląda, zanim je wykonasz.

komentarz 19 kwietnia 2016 przez niezalogowany

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. 

komentarz 19 kwietnia 2016 przez Comandeer Guru (607,060 p.)
Pytaj. Co najwyżej nie odpowiem :P
komentarz 19 kwietnia 2016 przez niezalogowany

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ę?

komentarz 19 kwietnia 2016 przez Comandeer Guru (607,060 p.)

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.

komentarz 19 kwietnia 2016 przez niezalogowany
Ok, czyli warunek będzie

ciasteczko=FALSE?

a podmiana wartości jest ok?
komentarz 19 kwietnia 2016 przez Comandeer Guru (607,060 p.)

Też nie.

Musisz:

  1. Sprawdzić, czy w document.cookie znajduje się Twoje ciasteczko (document.cookie.indexOf( 'nazwaciasteczka' ))
  2. Jeśli tak, musisz pobrać jego wartość (document.cookie.split( ';' ) + np, Array.prototype.filter albo zwykła pętla).
  3. I dopiero teraz możesz przekonwertować tę wartość na liczbę i podstawiać.
komentarz 19 kwietnia 2016 przez niezalogowany
O Jezus Maria... Za chwilę pokombinuję, a najwyżej zdecyduję się na zmianę wartości ciasteczka w PHP (przez AJAX) i po prostu zrobię, że po zmianie odświeży się strona.
komentarz 19 kwietnia 2016 przez Comandeer Guru (607,060 p.)

Heh, wcale się nie dziwię, bo ktoś, kto stworzył "API" document.cookie prawdopodobnie będzie się po wieki smażył w webdevowym piekle.

komentarz 19 kwietnia 2016 przez niezalogowany
A Ty to ogarnąłeś - diable. :D
komentarz 19 kwietnia 2016 przez Comandeer Guru (607,060 p.)

Przynajmniej odkryłeś sekret dlaczego devil

komentarz 19 kwietnia 2016 przez niezalogowany

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=''";
			}
		
	}	

 

komentarz 19 kwietnia 2016 przez Comandeer Guru (607,060 p.)
<!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.

komentarz 19 kwietnia 2016 przez niezalogowany
Wow, to teraz mi zaimponowałeś. Najgorsze jest to, że mi się coraz bardziej to podoba, a widzę że coraz więcej nauki przede mną. Za chwilkę będę to ogarniał, bo nie wszystko rozumiem - chociażby te 3 plusy i skrypt na samym dole, przypuszczam że to coś zamiennego dla onclick=f().

Może pokaże Ci do czego mi te ciasteczka w ogóle są potrzebne (na wygląd nie patrz, bo to na koniec) http://whowasbetter.c0.pl/kto_lepiej.php

Taka porównywarka i chcę żeby pobierało kolejne rekordy z bazy danych na podstawie ciasteczek. :p
komentarz 26 kwietnia 2016 przez niezalogowany
Twój skrypt działa naprawdę super. Został jednak ostatni problem i chciałbym prosić o pomoc.

Ciasteczko musi się nazywać lub być zależne od zmiennej GET. (Czyli musi działać tylko na konkretnej podstronie).

Udało mi się utworzyć

var name = // wartość z GET;

i udanie ję drukuję (więc wyciąganie wartości z GET działa).

Funkcja, którą mi pomogłeś utworzyć ma parametr name i myślałem, że zadziała, ale niestety nie. :/

Jak mam zrobić żeby ciasteczko nazywało się w zależności od wartości zmiennej?
komentarz 26 kwietnia 2016 przez Comandeer Guru (607,060 p.)
var name = <?=$_GET['name'];?>

updateCookie( name );

↑ Coś takiego próbowałeś?

komentarz 26 kwietnia 2016 przez niezalogowany

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). 

komentarz 27 kwietnia 2016 przez Comandeer Guru (607,060 p.)

Więc musisz podawać tę nazwę do ciasteczka. Zamiast:

document.cookie = 'ciasteczko=1';

to:

document.cookie = name + '=1';

itd.

komentarz 27 kwietnia 2016 przez niezalogowany

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
							{
							
								... 
							}
							...			
						
					?>

 

komentarz 27 kwietnia 2016 przez Comandeer Guru (607,060 p.)
No ale przecież ciasteczko będzie dostępne.
komentarz 27 kwietnia 2016 przez niezalogowany
Pewnie, że tak. ;)

Źle się wyraziłem:

Problem w tym, że przy wejściu na drugą stronę (z nową wartością GET), nie tworzy się kolejne ciasteczko o nazwie wartości z GET.

i jak w PHP na tej drugiej stronie odwołuję się do ciasteczka przez:

$_COOKIE['name']

to ciasteczko cały czas jest te z pierwszej podstrony.
komentarz 27 kwietnia 2016 przez Comandeer Guru (607,060 p.)
$_COOKIE[$_GET['name']]

 

komentarz 27 kwietnia 2016 przez niezalogowany

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 :/ 

komentarz 27 kwietnia 2016 przez niezalogowany

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

komentarz 28 kwietnia 2016 przez Comandeer Guru (607,060 p.)
Prawdę mówiąc nie do końca ogarniam, co się tam dzieje...
komentarz 28 kwietnia 2016 przez niezalogowany
Jeśli było: $_COOKIE['name'] To działo poprawnie, ale na kolejnej podstronie pobieralo ciasteczko cały czas z tej starej podstrony, a nie tworzyło nowego o wartości name z Get. Teraz jak mam: $_COOKIE[$_GET['name']] To nie działa i pobiera cały czas rekord 0 bazy, nie działa zwiększanie wartości ciasteczka.

Podobne pytania

+2 głosów
0 odpowiedzi 792 wizyt
pytanie zadane 12 lipca 2021 w JavaScript przez Szyszka Gaduła (3,510 p.)
0 głosów
1 odpowiedź 128 wizyt
pytanie zadane 12 czerwca 2020 w Sieci komputerowe, internet przez WiktroH Mądrala (6,550 p.)
+1 głos
2 odpowiedzi 643 wizyt
pytanie zadane 18 listopada 2018 w PHP przez Mavimix Dyskutant (8,420 p.)

93,460 zapytań

142,454 odpowiedzi

322,724 komentarzy

62,837 pasjonatów

Motyw:

Akcja Pajacyk

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

Kursy INF.02 i INF.03
...