Hoi,

Heb al van alles geprobeerd, gelezen en weer geprobeerd.
Als ik de eerste keer de volgende pagina laad dan krijg ik de foutmeldingen:

Notice: Undefined variable: WDlng in C:\HTDOCS\test.php on line 9

Notice: Undefined variable: sessie in C:\HTDOCS\test.php on line 15

Notice: Undefined variable: WDshw in C:\HTDOCS\test.php on line 21
NLDI0

Aan de uitkomst NLDI0 is te zien dat hij ze wel uitleest, reload ik de pagina verdwijnt het probleem.


<?php
$lifetime=time()+600;
$domain = ($_SERVER['HTTP_HOST'] != 'localhost') ? $_SERVER['HTTP_HOST'] : false;

if(!isset($_COOKIE['JaiDje_Language']))
{
	setcookie('JaiDje_Language', 'NLD', $lifetime, '/', $domain, false);
}
$WDlng == $_COOKIE['JaiDje_Language'];

if(!isset($_COOKIE['JaiDje_Page']))
{
	setcookie('JaiDje_Page', 'I', $lifetime, '/', $domain, false);
}
$sessie == $_COOKIE['JaiDje_Page'];

if(!isset($_COOKIE['JaiDje_Show']))
{
	setcookie('JaiDje_Show', '0', $lifetime, '/', $domain, false);
}
$WDshw == $_COOKIE['JaiDje_Show'];

echo $_COOKIE["JaiDje_Language"];
echo $_COOKIE["JaiDje_Page"];
echo $_COOKIE["JaiDje_Show"];
?>


Heeft iemand een oplossing voor dit probleem?

Alvast bedankt
Die lijnen kunnen geen vergelijking zijn, maar een toewijzing met een enkele = .

Je vergelijkt nu een niet-bestaande variabele.
In php zijn allerlei verschillende operatoren. Hier een drietal die misschien op elkaar lijken maar toch verschillend zijn.

1. assignment operator =
voorziet een variabele van een nieuwe waarde.
<?php
$a = 1; // $a heeft nu de waarde 1
$b = $a; // $b krijgt de waarde van $a
?>

2. vergelijkingsoperator ==
Test of twee waarden gelijk zijn (type onafhankelijk). Levert altijd TRUE of FALSE op.
<?php
if(2 == '2') { // vergelijk een getal met een tekst
echo 'true';
} else {
echo 'false';
}
?>
uitkomst: true;


3. vergelijkingsoperator ===
Test of twee waarden gelijk zijn (type afhankelijk). Levert ook altijd TRUE of FALSE op.
<?php
if(2 === '2') { // vergelijk een getal met een tekst
echo 'true';
} else {
echo 'false';
}
?>
uitkomst: false;

Bedankt voor jullie reactie.
Maak ik van == een enkele = dan geeft het nog foutmelding bij eerste keer laden, reload geeft geen foutmelding meer.

Notice: Undefined index: JaiDje_Language in C:\HTDOCS\test.php on line 9

Notice: Undefined index: JaiDje_Page in C:\HTDOCS\test.php on line 15

Notice: Undefined index: JaiDje_Show in C:\HTDOCS\test.php on line 21

Notice: Undefined index: JaiDje_Language in C:\HTDOCS\test.php on line 23

Notice: Undefined index: JaiDje_Page in C:\HTDOCS\test.php on line 24

Notice: Undefined index: JaiDje_Show in C:\HTDOCS\test.php on line 25
Gebruik isset() om te controleren.

Je roept nu een variabele op die nog niet bestaat. Dus breid je if uit met een 'else', en plaats de toewijzing daar in.
Ik denk dat het hier toch wat genuanceerder ligt.

Je moet het zo zien:

- Browser doet een request aan webserver en stuurt daarbij al dan niet een cookie mee
- php leest het cookie uit (als die er is) en plaatst deze in de $_COOKIE array.
- de inhoud van deze array veranderd NIET. Dus ook niet wanneer je setcookie gebruikt. Dit komt pas bij de volgende request naar voren.

Je kan het zo oplossen..
<?php
// Maak een variabele $language en geef deze een standaard waarde (default value).
$language = 'EN';

if(isset($_COOKIE['language']))
{
$language = $_COOKIE['language'];
} else {
setcookie('language', 'NL', $lifetime, '/', $domain, false);
}

// hieperdepiep je hebt altijd een $language variabele MET een geldige waarde

?>


[size=xsmall]Toevoeging op 22/02/2020 21:14:38:[/size]

p.s. leest een stuk makkelijker he $language in plaats van $JaiDje_Language
m.a.w. indien je een cookie set met setcookie() zit dit cookie pas het volgende request in $_COOKIE.

Het zetten van een cookie is in principe ook een "state change", dus wat dat betreft zou je direct daarna een page refresh moeten doen.
Dank voor de opzet, alleen krijg ik nog foutmeldingen:

Notice: Undefined index: JaiDje_Language in C:\HTDOCS\test.php on line 18
Notice: Undefined index: JaiDje_Page in C:\HTDOCS\test.php on line 26
Notice: Undefined index: JaiDje_Show in C:\HTDOCS\test.php on line 34
Notice: Undefined index: JaiDje_Language in C:\HTDOCS\test.php on line 43
Notice: Undefined index: JaiDje_Page in C:\HTDOCS\test.php on line 45
Notice: Undefined index: JaiDje_Show in C:\HTDOCS\test.php on line 47


<?php
//
// Opzetten extra data Cookies
//
$lifetime=time()+600;
$domain = ($_SERVER['HTTP_HOST'] != 'localhost') ? $_SERVER['HTTP_HOST'] : false;
//
// Opzetten VAR's met default waarde
//
	$WDlng = 'NLD';
	$sessie = 'I';
	$WDshw = '0';
//
//
//
if(!isset($_COOKIE['JaiDje_Language']))
{
	$WDlng = $_COOKIE['JaiDje_Language'];
}
else
{
	setcookie('JaiDje_Language', 'NLD', $lifetime, '/', $domain, false);
}
if(!isset($_COOKIE['JaiDje_Page']))
{
	$sessie = $_COOKIE['JaiDje_Page'];
}
else
{
	setcookie('JaiDje_Page', 'I', $lifetime, '/', $domain, false);
}
if(!isset($_COOKIE['JaiDje_Show']))
{
	$WDshw = $_COOKIE['JaiDje_Show'];
}
else
{
	setcookie('JaiDje_Show', '0', $lifetime, '/', $domain, false);
}
//
//
//
echo $_COOKIE["JaiDje_Language"]."<br>";
echo $WDlng."<br>";
echo $_COOKIE["JaiDje_Page"]."<br>";
echo $sessie."<br>";
echo $_COOKIE["JaiDje_Show"]."<br>";
echo $WDshw."<br>";
?>


Maar nu ook NA de refresh blijven deze meldingen komen.
Blijft de optie van een refresh over, en dat wilde ik eigenlijk voorkomen.
Andere optie (komt op zelfde neer) de cookies op te zetten in een eerste pagina en dan na het opzetten doorlinken naar de daadwerkelijke pagina.

Maar vind dat eigenlijk een lapmiddel, dit moet toch netter te doen zijn?

PS. de reden dat ik de cookies uitgebreider benoem is om ze herkenbaar te houden als geldend voor de gehele website, verderop in de code komen de "eenvoudige" namen al voor en wil zo verwarring voorkomen.

[size=xsmall]Toevoeging op 22/02/2020 23:31:20:[/size]

PS2, ook met kortere namen blijft het probleem bestaan:

Notice: Undefined index: Language in C:\HTDOCS\test.php on line 18
Notice: Undefined index: Page in C:\HTDOCS\test.php on line 26
Notice: Undefined index: Show in C:\HTDOCS\test.php on line 34
Notice: Undefined index: Language in C:\HTDOCS\test.php on line 43
Notice: Undefined index: Page in C:\HTDOCS\test.php on line 45
Notice: Undefined index: Show in C:\HTDOCS\test.php on line 47
Het staat vermeld op php.net:


Cookies will not become visible until the next loading of a page that the cookie should be visible for. To test if a cookie was successfully set, check for the cookie on a next loading page before the cookie expires. Expire time is set via the expires parameter. A nice way to debug the existence of cookies is by simply calling print_r($_COOKIE);.

Dus pas na een refresh kan je een cookie benaderen met $_COOKIE.
Dan maar kiezen voor de "minder" nette oplossing, jammer, maar zit denk ik niks anders op.

Toch bedankt allemaal. :-)
Gezien de werkwijze van cookies lijkt me het doorsturen wel de juiste werkwijze.

Reageren