Random links code werkt niet
Graag zou ik wat hulp krijgen met de volgende code.
Helaas weet ik heel weinig tot niets over php en zou het fijn vinden als iemand de oplossing weet.
Wat ik wil is dat ik het volgende bestandje kan bezoeken en elke x als ik het bestandje bezoek er een andere link / url word geopend.
Helaas doet onderstaande code het niet goed want er word elke keer enkel de laatste url gekozen.
Het liefste zou ik hebben dat de linkjes in volgorde 1 2 3 etc word geopend.
En wanneer alle linkjes zijn geweest er weer word begonnen bij linkje 1.
Hier is de code:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
$link[1] = "http://www.google.nl";
$link[2] = "http://www.startpagina.nl";
$link[3] = "http://www.facebook.com";
$link[4] = "#";
$link[5] = "#";
if(!isset($HTTP_cookie_VARS['link'])){ $n=count($link);
$rand=rand(1,$n); setcookie("link",$rand,time()+3600);
header('location:'.$link[$rand]); }else{ $go=$link[$_COOKIE['link']]; header('location:'.$go); }
?>
$link[1] = "http://www.google.nl";
$link[2] = "http://www.startpagina.nl";
$link[3] = "http://www.facebook.com";
$link[4] = "#";
$link[5] = "#";
if(!isset($HTTP_cookie_VARS['link'])){ $n=count($link);
$rand=rand(1,$n); setcookie("link",$rand,time()+3600);
header('location:'.$link[$rand]); }else{ $go=$link[$_COOKIE['link']]; header('location:'.$go); }
?>
Misschien mag ik je direct een paar tipjes geven?
- het tellen van nummerieke array elementen begint eigenlijk bij 0 en niet bij 1.
Je zou dus dit kunnen doen:
Code (php)
1
2
3
4
5
2
3
4
5
<?php
$link[0] = "http://www.google.nl";
$link[1] = "http://www.startpagina.nl";
$link[2] = "http://www.facebook.com";
?>
$link[0] = "http://www.google.nl";
$link[1] = "http://www.startpagina.nl";
$link[2] = "http://www.facebook.com";
?>
een kortere notatie die precies hetzelfde doet:
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
$link = array(
"http://www.google.nl",
"http://www.startpagina.nl",
"http://www.facebook.com"
);
?>
$link = array(
"http://www.google.nl",
"http://www.startpagina.nl",
"http://www.facebook.com"
);
?>
Dan kun je vervolgens met een array ook gebruik maken van php's array functies.
Daaronder vindt je bijvoorbeeld shuffle en array_rand.
Kijk maar of je aan de hand van de voorbeelden die er gegeven worden iets voor elkaar kunt krijgen.
Dankjewel voor je reactie en je Tips.
Ik ga er mee stoeien.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<?php
$link = array(
"http://www.google.nl",
"http://www.startpagina.nl",
"http://www.facebook.com"
);
// start php's session service
session_start();
// Bij ons allereerste bezoek zal er nog geen index bewaard zijn in de sessie dus dat controleren we eerst:
if(isset($_SESSION['linkjes_index']) === FALSE)
{
$index = 0; // array's tellen we vanaf nul weet je nog?
}
else // indien er wel een index in de array staat:
{
$index = $_SESSION['linkjes_index'];
}
// het gevaar is nu nog dat de teller bij 4 gaat komen terwijl ik maar 3 linkjes heb in mijn array..
if($index == count($link))
$index = 0;
// nu moeten we de $index nog opslaan voor de volgende keer en we verhogen deze dan met 1.
$_SESSION['linkjes_index'] = $index + 1;
?>
<!DOCTYPE html>
<html>
<head>
<title>Mijn titel</title>
<meta charset="UTF-8">
</head>
<body>
<a href="<?php echo $link[$index]; ?>"><?php echo $link[$index]; ?></a>
</body>
</html>
$link = array(
"http://www.google.nl",
"http://www.startpagina.nl",
"http://www.facebook.com"
);
// start php's session service
session_start();
// Bij ons allereerste bezoek zal er nog geen index bewaard zijn in de sessie dus dat controleren we eerst:
if(isset($_SESSION['linkjes_index']) === FALSE)
{
$index = 0; // array's tellen we vanaf nul weet je nog?
}
else // indien er wel een index in de array staat:
{
$index = $_SESSION['linkjes_index'];
}
// het gevaar is nu nog dat de teller bij 4 gaat komen terwijl ik maar 3 linkjes heb in mijn array..
if($index == count($link))
$index = 0;
// nu moeten we de $index nog opslaan voor de volgende keer en we verhogen deze dan met 1.
$_SESSION['linkjes_index'] = $index + 1;
?>
<!DOCTYPE html>
<html>
<head>
<title>Mijn titel</title>
<meta charset="UTF-8">
</head>
<body>
<a href="<?php echo $link[$index]; ?>"><?php echo $link[$index]; ?></a>
</body>
</html>
Toevoeging op 22/05/2015 21:25:48:
Een sessie wordt overigens na een tijdje van inactiviteit gereset. en dan begint de teller weer vanaf 0. Dat moet ik er wel even bij zeggen. Anders kun je inderdaad cookies gebruiken.
En geen punt :-)
Om hier nog even op terug te komen: dat probleem zit in regel 17.
De eerste keer dat je de pagina aanroept, wordt een random getal gegenereerd. Dat wordt in een cookie opgeslagen. Als je daarna terugkomt op de pagina, wordt de waarde uit die cookie gebruikt. Die wordt echter nooit meer veranderd, dus blijf je steeds dezelfde link terugkrijgen.
Frank Nietbelangrijk op 22/05/2015 21:20:14:
ayyy
Wat is daar mis mee dan?
Deze code van Frank is perfect voor wat ik wilde.
Nu uit belangstelling en ik wil het proberen werkend te maken is het moeilijk om de urls nu in een database te stoppen en ze vandaaruit te laden?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?php
$link = array(
"http://www.google.nl",
"http://www.startpagina.nl",
"http://www.facebook.com"
);
// start php's session service
session_start();
// Bij ons allereerste bezoek zal er nog geen index bewaard zijn in de sessie dus dat controleren we eerst:
if(isset($_SESSION['linkjes_index']) === FALSE)
{
$index = 0; // array's tellen we vanaf nul weet je nog?
}
else // indien er wel een index in de array staat:
{
$index = $_SESSION['linkjes_index'];
}
// het gevaar is nu nog dat de teller bij 4 gaat komen terwijl ik maar 3 linkjes heb in mijn array..
if($index == count($link))
$index = 0;
// nu moeten we de $index nog opslaan voor de volgende keer en we verhogen deze dan met 1.
$_SESSION['linkjes_index'] = $index + 1;
?>
$link = array(
"http://www.google.nl",
"http://www.startpagina.nl",
"http://www.facebook.com"
);
// start php's session service
session_start();
// Bij ons allereerste bezoek zal er nog geen index bewaard zijn in de sessie dus dat controleren we eerst:
if(isset($_SESSION['linkjes_index']) === FALSE)
{
$index = 0; // array's tellen we vanaf nul weet je nog?
}
else // indien er wel een index in de array staat:
{
$index = $_SESSION['linkjes_index'];
}
// het gevaar is nu nog dat de teller bij 4 gaat komen terwijl ik maar 3 linkjes heb in mijn array..
if($index == count($link))
$index = 0;
// nu moeten we de $index nog opslaan voor de volgende keer en we verhogen deze dan met 1.
$_SESSION['linkjes_index'] = $index + 1;
?>
<!DOCTYPE html>
<html>
<head>
<title>Mijn titel</title>
<meta charset="UTF-8">
</head>
<body>
<a href=""></a>
</body>
</html>
Misschien kun je beginnen met een database aanmaken in phpMyAdmin en daarin een tabel aanmaken met de naam 'links' of zo. In de tabel maak je drie kolommen aan:
-id (integer, primary index, auto increment)
-name (varchar length=64)
-url (varchar length=255)
Dan zou je kunnen beginnen in PHP om deze tabel uit te lezen met een SELECT query.
Echter gaat het te ver om het hier helemaal uit te kauwen dus dan maar even een linkje:
http://phptuts.nl/view/41/1/
Database is al aangemaakt, dat kan ik wel :)