Een array maken in cookies
Ik ben nu bezig om te voorkomen dat bezoekers 2x een row te krijgen met de zelfde content. Hiervoor ben ik nu bezig om alle Imagelinks in de cookies op te slaan zodat ik later ervoor kan zorgen dat rows waarvan de imagelink al terugkomen in de cookies niet worden geselecteerd.
Anyways, ik zou graag willen weten hoe ik deze imagelinks kan opslaan in de cookies zonder dat ik ze overelkaar heen schrijf. Momenteel kan ik alleen de vorige imagelink oproepen, aangezien de imagelink iedere keer wordt overschreven. Mijn vraag is dus hoe ik een array bouw in mijn cookie.
Gewijzigd op 01/08/2011 00:07:18 door Ardjuna Veenstra
Ik weet niet of je array's kan opslaan in een cookie (moet je gewoon even proberen). Als dit niet kan zet je ze gewoon als een string van link1,link2,link3,link4 in je cookie. Dan kun je ze met $string = explode(',' $string); uit elkaar halen en er een array van maken. en dan met in_array kun je kijken of de imagelink al in de array staat, zo niet zet je hem er bij. Anders doe je niks.
Zou het dan zoiets zijn als:
Imagelinkcookie = Imagelinkcookie + ,Imagelink
Ik ben nieuw in php en heb nog veel moeite met het schrijven van php taal.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
// Kijken of cookie bestaat
$value = (isset($_COOKIE['imageLink'])) ? $_COOKIE['imageLink'] : '';
// Array maken van de $value
$value = explode(',', $value);
// Kijken of de database image link al in de cookie staat
if(in_array('HIER DE IMAGELINK VAN DE DATABASE', $value)) {
// De image link staat al in de cookie
}else{
// De image link staat niet in de cookie, dus image link toevoegen aan array $value
$value[] = 'Hier de image link van de database';
}
// Cookie weer updaten
setcookie('imageLink', implode(',', $value), time()+3600);
?>
// Kijken of cookie bestaat
$value = (isset($_COOKIE['imageLink'])) ? $_COOKIE['imageLink'] : '';
// Array maken van de $value
$value = explode(',', $value);
// Kijken of de database image link al in de cookie staat
if(in_array('HIER DE IMAGELINK VAN DE DATABASE', $value)) {
// De image link staat al in de cookie
}else{
// De image link staat niet in de cookie, dus image link toevoegen aan array $value
$value[] = 'Hier de image link van de database';
}
// Cookie weer updaten
setcookie('imageLink', implode(',', $value), time()+3600);
?>
setcookie("clink", $link);
clink staat voor cookie image link en $link is natuurlijk de var van de imagelink.
U stelt dus voor dat ik dit vervang met:
setcookie('clink', implode(',', $link);
Als ik u goed begrepen heb?
Dit moet je in de database regelen, niet met cookies en arrays gaan prutsen! Als je helemaal niet wil dat er dubbele content (of imagelinks) worden opgeslagen dan moet je er een UNIQUE overheen leggen.
of je array door serialise() halen.
Momenteel staat er:
setcookie("clink", $link);
Iedere keer wanneer ik echo $click gebruik zie ik alleen de de link van de vorige pagina. Ik wil graag alle links hebben opgeslagen.
Mogen mensen nooit dezelfde imagelinks te zien krijgen, of gedurende 1 sessie. Is het erg als ik nu op de website kom en ik zie een bepaalde imagelink, dat ik diezelfde imagelink de volgende keer dat ik de website bezoek weer zie? Of vind je het alleen vervelend als tijdens dezelfde sessie dezelfde imagelinks worden getoond? Indien dit laatste het geval is, zou je het miscchien veel makkelijker kunnen oplossen met een sessie-variabele.
Nooit is de bedoeling. Ik wil dat je alles maximaal 1x ziet.
Ah oké, dan kun je inderdaad beter met cookies werken, maar hou er wel rekening dat niet iedereen cookies accepteert (het merendeel wel hoor).
Oke, dit is wat ik nu heb gedaan:
$newlink = $clink.",".$link;
setcookie("clink", $newlink);
Ik krijg nu alle imagelinks gescheiden tussen een komma, als het goed is kan ik ze daarna scheiden door middel van implode(',')?
Quote:
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?php
$rand2 = mysql_query("SELECT ID, Link FROM grabbelton ORDER BY RAND() DESC LIMIT 1") or die(mysql_error());
while($row = mysql_fetch_array( $rand2 )) {
$link2 = $row['Link'];
}
$linkselect2 = mysql_query("SELECT ID FROM images WHERE Link ='$link2'") or die(mysql_error());
while($row = mysql_fetch_array( $linkselect2 )) {
$ID = $row['ID'];
}
?>
$rand2 = mysql_query("SELECT ID, Link FROM grabbelton ORDER BY RAND() DESC LIMIT 1") or die(mysql_error());
while($row = mysql_fetch_array( $rand2 )) {
$link2 = $row['Link'];
}
$linkselect2 = mysql_query("SELECT ID FROM images WHERE Link ='$link2'") or die(mysql_error());
while($row = mysql_fetch_array( $linkselect2 )) {
$ID = $row['ID'];
}
?>
Weet iemand hoe ik deze code moet veranderen? Heb al een aantal dingen geprobeerd maar krijg steeds een foutmelding.
edit:
Oke, laatste fase nu, momenteel heb ik:
$pieces = explode(",", $clink);
Wat alle links uit elkaar haalt en er een array van maakt(toch?)
en dit:
$rand2 = mysql_query("SELECT ID, Link FROM grabbelton WHERE Link <> ($pieces) ORDER BY RAND() DESC LIMIT 1") or die(mysql_error());
($pieces) werkt niet, wat moet ik doen?
edit:
het zelfde probleem heb ik nu ook ondervonden bij het verwijderen van rows:
mysql_query("DELETE FROM grabbelton WHERE Link ='".$link."' limit 1 ") or die (mysql_error());
In plaats van dat er gezocht wordt naar een row waarvan de waarde Link gelijk staat aan $link, wordt er willekeurig een gekozen. Dit is niet de bedoeling.
Gewijzigd op 01/08/2011 04:19:40 door Ardjuna Veenstra
Code (php)
1
2
3
2
3
<?
$rand2 = mysql_query("SELECT ID, Link FROM grabbelton WHERE FIELD(Link,$clink) = 0 ORDER BY RAND() DESC LIMIT 1") or die(mysql_error());
?>
$rand2 = mysql_query("SELECT ID, Link FROM grabbelton WHERE FIELD(Link,$clink) = 0 ORDER BY RAND() DESC LIMIT 1") or die(mysql_error());
?>
Zorg wel dat je eerst test of $clink een waarde heeft en zo.
edit:
Helaas, het werkt niet bij mij. Ik zie nog steeds de zelfde afbeeldingen terug komen en uiteindelijk crasht het met een foutmelding die ik niet begrijp.
mysql_query("DELETE FROM grabbelton WHERE Link ='".$link."' limit 1 ") or die (mysql_error());
Dit heb ik gelukkig momenteel weten op te lossen. Bleek dus dat ik eerst een nieuwe $link kreeg en dan pas werd de juiste row gezocht, geen wonder dat steeds de verkeerde row werd verwijderd.
Gewijzigd op 01/08/2011 08:15:07 door Ardjuna Veenstra
for($i=1;$i<=aantal_te_schrijven_cookies;$i++)
{ setcookie(cookie_naam[$i], cookie_waarde[$i]);
}
Gewijzigd op 01/08/2011 13:34:04 door Wladimir S
Oke, mijn probleem heb ik nu opgelost met behulp van een loop. De script blijft gewoon net zo lang linkjes pakken totdat ie er een is tegengekomen die nog niet in de array staat. Jammer dat ik niet direct kan zoeken. De test verliep soepel maar ik ben bang dat mensen die bijvoorbeeld in de VS wonen lang zullen moeten wachten.