Cookies geven foutmelding bij 1e keer pagina laden
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.
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
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
<?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"];
?>
$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
operatoren. Hier een drietal die misschien op elkaar lijken maar toch verschillend zijn.
1. assignment operator =
voorziet een variabele van een nieuwe waarde.
2. vergelijkingsoperator ==
Test of twee waarden gelijk zijn (type onafhankelijk). Levert altijd TRUE of FALSE op.
uitkomst: true;
3. vergelijkingsoperator ===
Test of twee waarden gelijk zijn (type afhankelijk). Levert ook altijd TRUE of FALSE op.
uitkomst: false;
In php zijn allerlei verschillende 1. assignment operator =
voorziet een variabele van een nieuwe waarde.
2. vergelijkingsoperator ==
Test of twee waarden gelijk zijn (type onafhankelijk). Levert altijd TRUE of FALSE op.
Code (php)
uitkomst: true;
3. vergelijkingsoperator ===
Test of twee waarden gelijk zijn (type afhankelijk). Levert ook altijd TRUE of FALSE op.
Code (php)
uitkomst: false;
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
Je roept nu een variabele op die nog niet bestaat. Dus breid je if uit met een 'else', en plaats de toewijzing daar in.
Gewijzigd op 22/02/2020 20:53:34 door - Ariën -
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..
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
<?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
?>
// 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
?>
Toevoeging op 22/02/2020 21:14:38:
p.s. leest een stuk makkelijker he $language in plaats van $JaiDje_Language
Gewijzigd op 22/02/2020 21:13:13 door Frank Nietbelangrijk
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.
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
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
38
39
40
41
42
43
44
45
46
47
48
49
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
38
39
40
41
42
43
44
45
46
47
48
49
<?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>";
?>
//
// 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.
Toevoeging op 22/02/2020 23:31:20:
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
Quote:
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.
Gewijzigd op 22/02/2020 23:33:13 door - Ariën -
Toch bedankt allemaal. :-)
Gezien de werkwijze van cookies lijkt me het doorsturen wel de juiste werkwijze.
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
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
<?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);
}
else
{
$WDlng = $_COOKIE['JaiDje_Language'];
}
if(!isset($_COOKIE['JaiDje_Page']))
{
setcookie('JaiDje_Page', 'I', $lifetime, '/', $domain, false);
}
else
{
$sessie = $_COOKIE['JaiDje_Page'];
}
if(!isset($_COOKIE['JaiDje_Show']))
{
setcookie('JaiDje_Show', '0', $lifetime, '/', $domain, false);
}
else
{
$WDshw = $_COOKIE['JaiDje_Show'];
}
if(!isset($_COOKIE['JaiDje_Language']) AND !isset($_COOKIE['JaiDje_Page']) AND !isset($_COOKIE['JaiDje_Show']))
{
header("Refresh:0");
}
?>
$lifetime=time()+600;
$domain = ($_SERVER['HTTP_HOST'] != 'localhost') ? $_SERVER['HTTP_HOST'] : false;
if(!isset($_COOKIE['JaiDje_Language']))
{
setcookie('JaiDje_Language', 'NLD', $lifetime, '/', $domain, false);
}
else
{
$WDlng = $_COOKIE['JaiDje_Language'];
}
if(!isset($_COOKIE['JaiDje_Page']))
{
setcookie('JaiDje_Page', 'I', $lifetime, '/', $domain, false);
}
else
{
$sessie = $_COOKIE['JaiDje_Page'];
}
if(!isset($_COOKIE['JaiDje_Show']))
{
setcookie('JaiDje_Show', '0', $lifetime, '/', $domain, false);
}
else
{
$WDshw = $_COOKIE['JaiDje_Show'];
}
if(!isset($_COOKIE['JaiDje_Language']) AND !isset($_COOKIE['JaiDje_Page']) AND !isset($_COOKIE['JaiDje_Show']))
{
header("Refresh:0");
}
?>
Comments wat wat is ga ik nog toevoegen. ;-)
Gewijzigd op 22/02/2020 23:53:47 door Marco Apeldoorn
- Waarom van die rare overdreven variabel-namen? Waarom beginnen die met een hoofdletter?
- Waarom if NOT ... else ... en niet if ... else ... wat toch veel leesbaarder en logischer is.
- Waarom geen variabelen initialiseren? Nu ben je nog steeds niet zeker of $WDlng (what the f**k het mag betekenen) überhaupt bestaat vanaf regel 13 buiten het if/else statement. Dus dan nog maar een keer hetzelfde voorbeeldje om te kijken of het lampje gaat branden:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
// Maak een variabele $language en geef deze een standaard waarde (default value).
$WDlng = 'ENG';
if(isset($_COOKIE['JaiDje_Language']))
{
$WDlng = $_COOKIE['JaiDje_Language'];
} else {
setcookie('JaiDje_Language', 'NL', $lifetime, '/', $domain, false);
}
// hieperdepiep je hebt altijd een $WDlng variabele MET een geldige waarde. Als de if TRUE oplevert dan wordt de standaard waarde overschreven en anders heb je de waarde 'ENG'
?>
// Maak een variabele $language en geef deze een standaard waarde (default value).
$WDlng = 'ENG';
if(isset($_COOKIE['JaiDje_Language']))
{
$WDlng = $_COOKIE['JaiDje_Language'];
} else {
setcookie('JaiDje_Language', 'NL', $lifetime, '/', $domain, false);
}
// hieperdepiep je hebt altijd een $WDlng variabele MET een geldige waarde. Als de if TRUE oplevert dan wordt de standaard waarde overschreven en anders heb je de waarde 'ENG'
?>
Frank Nietbelangrijk op 23/02/2020 12:49:43:
- Waarom van die rare overdreven variabel-namen? Waarom beginnen die met een hoofdletter?
In in ieder geval Pascal/Delphi is het gebruikelijk om variabelen met een hoofdletter te beginnen (CamelCase). Misschien een overstapper?
On topic:
Code (php)
1
2
3
2
3
function my_set_cookie($key,$value,$delta = 600){
setcookie($key,$_COOKIE[$key] = $value,time() + $delta,'/');
}
setcookie($key,$_COOKIE[$key] = $value,time() + $delta,'/');
}
Kun je daarna gewoon meteen in $_COOKIE kijken.
Maarrr: als je cookies toch maar voor 10 minuten (600 seconden) zet, waarom dan niet gewoon in de $_SESSION bijhouden? Kan iemand er ook niet mee gaan kl*ten (bijvoorbeeld JaiDje_Language = '"<).
Jouw manier van werken met VAR's is misschien anders dan anderen, om het overzichtelijk te houden heb ik een ezelsbruggetje.
VAR die uit (bijvoorbeeld) een config bestand komen en geldig MOETEN blijven beginnen met de hoofdletters WD van Website Data, in geval van WDlng is het dus "Website Data LaNGuage", dus logisch lijkt mij.
Het IF NOT verhaal snap ik niet helemaal wat je bedoeld, ik heb het geleerd met IF ELSE en evt ELSEIF.
Bij regel 13 begint het checken voor de 2e cookie, en vanaf regel 23 het derde cookie, wat is daar dan fout aan, dit horen dan toch aparte IF secties te worden, voor het geval er 1 of 2 van de totaal 3 cookies niet bestaat.
En ja, Rob heeft gelijk, als je eerst Basic, dan Pascal en met nog een paar programmeertalen hebt gespeeld dan neem je gewoontes uit de ene taal over in een andere taal.
En Rob, ik zal naar $_SESSION gaan kijken, misschien "schoner", veiliger en makkelijker. ;-)
Zullen we het omdraaien? Ik sluit me aan bij 95% van de php programmeurs. Begrijp me niet verkeerd het was maar een advies.
>> VAR die uit (bijvoorbeeld) een config bestand komen en geldig MOETEN blijven beginnen met de hoofdletters WD van Website Data, in geval van WDlng is het dus "Website Data LaNGuage", dus logisch lijkt mij.
Nou niet echt. Ten eerste mag ik een klein beetje aannemen dat je minimaal een functie hebt die je config variabelen inleest? Maar nog liever heb je een config class? Dit zegt iedereen wel iets:
>> Het IF NOT verhaal snap ik niet helemaal wat je bedoeld, ik heb het geleerd met IF ELSE en evt ELSEIF.
Wederom maar een tip. Het is allemaal niet ernstig. Wat je schrijft is:
In plaats van
Dan vervolgens: als je een nieuwe variabele introduceert in een IF statement dan bestaat de variabele in de rest van je code de ene keer wel en de andere keer niet, namelijk enkel maar als de IF wordt uitgevoerd en anders niet. Dat kun je oplossen door variabelen te initialiseren. Initialiseren is misschien een duur woord maar het komt er gewoon op neer dat je de variabele aanmaakt met een standaard waarde en buiten het IF blok.
Ik ging er blindelings van uit dat de COOKIE bedoelt was voor als de gebruiker terugkeerde nadat de SESSIE reeds verlopen was. Scherp van Rob.
Gewijzigd op 23/02/2020 20:18:32 door Frank Nietbelangrijk
Quote:
Zullen we het omdraaien? Ik sluit me aan bij 95% van de php programmeurs. Begrijp me niet verkeerd het was maar een advies.
Bedoelde het ook niet verkeerd, iedere (hobby)programmeur heeft zijn/haar eigen manier, was meer bedoeld als aanloop voor mijn ezelsbruggetje waar ik inmiddels ruim 20 jaar mee werk, het is iets waardoor ik snel (ook na lange tijd) kan herleiden wat voor VAR het is.
Nee, ik laad vooraan in m'n code een config bestand met mijn "WD" (sorry, kon het niet laten) VAR's waarmee ik ze introduceer, VAR die niet geldig hoeven blijven staat in hun eigen "deel" van de code, kan een functie zijn, kan een IF of WHILE stuk zijn.
Ok, het IF NOT is duidelijk.
Maar ik ga het advies van Rob verder bekijken, gaat uiteindelijk om VAR's in een sessie, als de bezoeker de site verlaat mogen ze vervalen.
En voor het juiste beeld, alle programmeer kunsten in de verschillende talen heb ik mezelf geleerd zonder cursus, wellicht daardoor volg ik niet altijd de "standaard" manier van opzetten van code.
Ik geef zonder meer toe, kom ik er na veel puzzelen niet uit dan roep ik hulp in van Forums.
Maar het maakt me wel trots als een project draait, terwijl dit voor een PRO programmeur een eitje zou zijn.
Gewijzigd op 23/02/2020 20:59:59 door - Ariën -
Goed idee! Ben je bekend met sessie variabelen?
Wil ik eerst leren kennen voordat ik het in de (nu onder PHP7 draaiende website) inbouw.
Er staat (zag ik al) uitgebreide uitleg online.
Bedankt (allemaal) voor de adviezen.