login  Naam:   Wachtwoord: 
Registreer je!
 Forum

gegevens onthouden

Offline derrtyones - 21/07/2009 23:45
Avatar van derrtyonesNieuw lid Hallo Allemaal,

Ik heb een aantal games in een mysql (phpmyadmin) database staan met informatie (id, titel, breedte, hoogte). Deze lees ik op een pagina uit. Ik heb voor elke game een link dat verwijst naar:

game.php?id=$id (waar $id de gameid is).

Deze kan ik dmv een GET ophalen. Dat werkt ook.

Ik wil graag dat je hierdoor een game in een lijst kan zetten van je lievelingsgames van de site. Er is een pagina voor je lievelinggames en daar moeten dan de titels komen te staan.

Gebruikers kunnen NIET inloggen. Dus ik neem aan dat het via COOKIES gedaan moet worden. Of zijn er nog andere mogelijkeheden?

Mocht het met COOKIES gedaan moeten worden, hoe zet ik dan meerdere gegevens in zo'n cookie bestand? Dat is me namelijk niet gelukt.

Heeft iemand ook een idee hoe zo'n dergelijk script heet? Dan kan ik daar ook beter informatie op zoeken.

Bedankt voor je tijd! 

8 antwoorden

Gesponsorde links
Offline ArieMedia - 21/07/2009 23:58
Avatar van ArieMedia Gouden medaille

PHP ver gevorderde
Je maakt gewoon een cookie die een array bevat met de games
Offline snxs - 22/07/2009 00:02 (laatste wijziging 22/07/2009 00:10)
Avatar van snxs Nieuw lid Dat zou je op kunnen slaan in meerdere cookies. of in één cookie die je split op basis van een bepaald teken.

Handige linkjes:
PHP.net: http:/...cookie.php
PHP.net: http:/...ookies.php

Gebruik:
  1. setcookie("NAAM: Je cookienaam","WAARDE: De id van je spel, bijvoorbeeld 11","GELDIGHEID: Hoe lang je Cookie geldig moet zijn");


Werkend voorbeeld van 10 cookies die een jaar lang geldig blijven:
  1. setcookie("fav0","23","time()+60*60*24*365");
  2. setcookie("fav1","35","time()+60*60*24*365");
  3. setcookie("fav2","11","time()+60*60*24*365");
  4. setcookie("fav3","115","time()+60*60*24*365");
  5. setcookie("fav4","73","time()+60*60*24*365");
  6. setcookie("fav5","25","time()+60*60*24*365");
  7. setcookie("fav6","74","time()+60*60*24*365");
  8. setcookie("fav7","221","time()+60*60*24*365");
  9. setcookie("fav8","45","time()+60*60*24*365");
  10. setcookie("fav9","13","time()+60*60*24*365");


Werkend voorbeeld van 1 cookie waar alle waarden in 1 keer in staan:
  1. setcookie("favorites","23,35,11,115,73,25,74,221,45,13","time()+60*60*24*365");


Om dan alle losse waarden weer te krijgen:
  1. $favorites = split(",",$_COOKIE['favorites']);

Zo krijg je een array met je waarden, uit één cookie. Het is maar net wat je zelf fijner vindt.
Offline derrtyones - 22/07/2009 00:10
Avatar van derrtyones Nieuw lid Bedankt voor de reacties! Ik zal het in ieder geval doorlezen. Maar als je zeg maar op die pagina zou komen, die game.php met het id. Wat zou ik dan precies in die code moeten zetten?

Want ik snap niet hoe het script weet dat je een 2e, 3e of meerdere games in een cookie toevoegd.

Bijvoorbeeld: je komt op:
game.php?id=23

Dan gebeurd:

setcookie("fav0","$id","time()+60*60*24*365");

(klopt die $id overigens?)

Maar als je dan naar een volgende game gaat:

game.php?id=99

voegt hij dan die game automatisch toe aan de cookie?

Alvast bedankt!
Offline maigel - 22/07/2009 00:20
Avatar van maigel PHP beginner Je zegt zelf dat je de id met get ophaalt, dus het zal dan eerder
  1. setcookie("fav0", $_GET["id"],"time()+60*60*24*365");

moeten zijn
Offline snxs - 22/07/2009 00:23 (laatste wijziging 22/07/2009 00:26)
Avatar van snxs Nieuw lid Ik had nog wat bijgepost in mijn vorige post, ook handig even te lezen.

De waarde

is correct wanneer je
  1. $id = $_GET['id'];

hebt gebruikt.

Maar moet je niet ook kunnen kiezen welke je als favoriete game wil hebben? Ik bedoel, een top 10, of gewoon de 10 leuksten?

En wat je kan doen is controleren tot hoever de cookie ge-set is met de superglobal:
  1. $_COOKIE


Dat zou je met een while kunnen doen.

Of de enkele cookie gebruiken, en kijken uit hoeveel waarden je array met ID's bestaat. (Deze techniek leg ik verder uit aangezien meerdere cookies nogal omslachtig is.)

De volgende uitleg gaat er van uit dat je de cookie opslaat op mijn bovengenoemde manier, en dus ook een array aanmaakt met ID's er in. (Zoals in de vorige post uitgelegd.)

Bij 10, de eerste laten vallen door middel van:
  1. if(count($favorites) == 10){
  2. array_shift($favorites);
  3. }


En dan met deze code een waarde toevoegen:
  1. $favorites[] = $id;
Offline derrtyones - 22/07/2009 00:31
Avatar van derrtyones Nieuw lid Bedankt weer voor jullie reacties! Het klopt inderdaad van dat $_GET['id'].

Ik vind je idee om een TOP 10 van favorieten best tof. Maar het gaat er eerder om dat bezoekers hun game snel terug kunnen vinden. Dat kan altijd nog later gedaan worden.

Ik begin je uitleg al een beetje te begrijpen, ik moet er nog wat mee oefenen en testen.

Maar ik begrijp nog steeds niet hoe het script weet dat je bijv. een 3e game aan je favorieten toevoegd. Kun je me dit misschien een beetje uitleggen? Ik snap nu wel ongeveer hoe je 1 game toevoegd aan je favorieten. Maar hoe gaat dat met een volgend game in de werk? Overschrijft hij dan niet dat oude Cookie? 

Weer bedankt!! 
Offline snxs - 22/07/2009 01:40 (laatste wijziging 22/07/2009 01:52)
Avatar van snxs Nieuw lid Zo, ik heb maar even een class voor je geschreven:
  1. <?php
  2. /*
  3. ##########################################################
  4. # Cookie based recent game saver Class v0.1 #
  5. # #
  6. # Filename: recentGames.php #
  7. # #
  8. # Author: Guido Bouman #
  9. # Copyright: Guido Bouman Web Development #
  10. # Date: 22-07-2009 #
  11. # #
  12. # Dependencies: #
  13. # - None #
  14. ##########################################################
  15.  
  16. ##########################################################
  17. # TODO: #
  18. # #
  19. # - Nothing #
  20. # #
  21. # NOTES: #
  22. # #
  23. # - None #
  24. ##########################################################
  25. */
  26.  
  27. class recentGames
  28. {
  29. public function Get()
  30. {
  31. $recentGames = split(",",$_COOKIE['recentGames']);
  32. return $recentGames;
  33. }
  34.  
  35. public function Set($id)
  36. {
  37. $recentGames = self::Get();
  38.  
  39. if(count($recentGames) == 10){
  40. array_shift($recentGames);
  41. }
  42.  
  43. $recentGames[] = $id;
  44.  
  45. $recentGames = implode(",",$recentGames);
  46. setcookie("favorites",$recentGames,"time()+60*60*24*365");
  47. }
  48. }
  49. ?>


Oké het gebruik van deze class:

Allereerst moet je dit bestand includen om er gebruik van te kunnen maken:
  1. include("recentGames.php");


Voor het opvragen van de lijst van meest recent gespeelde games:
  1. $GamesArray = recentGames::Get();


Voor het toevoegen van een recent gespeelde game:
  1. recentGames::Set($id);

Waar "$id" dus de ID van de game is.

Verdere notities:
Deze class leest dus steeds de cookie, wanneer je de functie Set($id) aan roept vraagt hij de huidige waarde van de cookie op, past deze aan en slaat hem weer op. De zelfde cookie wordt dus constant opnieuw overschreven. Omdat de lijst met recente games steeds vernieuwd wordt bij het vernieuwen van de webpagina. Verder zijn er geen extra cookies nodig, dus heb ik het zo simpel mogelijk gehouden.

Je kan alleen een game toevoegen aan de cookie wanneer de pagina nog niets naar de browser heeft verstuurd. Het moet dus voor de allereerste echo gebeuren. Dit is een eis van Cookies. Anders moet je een Database gaan gebruiken om dit bij te houden voor iedereen. (Wat enorm veel werk is. En ook nogal belastend voor je server is, wanneer er meer dan duizend mensen op gaan zitten spelen.)

Ik gebruik altijd classes, maar je moet maar zien wat je er mee wil doen. Je mag de class ook uit elkaar slopen en het ombouwen tot jouw code.

Je mag alleen niet claimen dat jij deze code geschreven hebt, wat enigszins logisch is.

Ik hoop dat ik je zo een beetje heb kunnen helpen.

PS:
Er kunnen fouten in zitten. Aangezien ik hier puur parate kennis heb gebruikt, en ik het script niet in een browser heb getest.
Offline derrtyones - 22/07/2009 12:01
Avatar van derrtyones Nieuw lid Heel erg bedankt! Ik zal de komende dagen deze script bestuderen. Ik heb er in ieder geval enorm veel van geleerd! Thanks!!!! 
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.445s