Sessies of juist niet

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Jay-Connected
  • Registratie: Februari 2004
  • Laatst online: 11-03-2024
Beste tweakers.

Ik ben bezig met een klein projectje en loop vast in het volgende.

Bij het bezoeken van mijn webapplicaties wil ik dat het variabel $week, gezet wordt op de huidige week.
Deze variabel moet de hele tijd gelden, totdat je hem middels een dropdown veranderd.

$week heeft als inhoud naamweek34

Ik heb geprobeerd om met cookies de variabel te zetten. Natuurlijk lukt dit, echter als je een andere week uit de dropdown kiest, vult hij die variabele niet meer opnieuw.

Ik heb de cookie geprobeerd om op 1 minuut te zetten, ook dat geeft een leuk effect.. echter begrijpt dan de header niet meer dat er een variabel was, en krijg je dus foutmeldingen dat het variabel $week niet gevuld is.

Ik ben een beginner in deze materie, en heb best wat research gedaan.

Waarschijnlijk is het onduidelijk wat ik wil, of kan het misschien zelfs helemaal niet.

Brand mij aub niet direct af.. (ik sta uiteraard open voor alle opties)

Ik gebruik trouwens PHP 5.6.25 (en omdat het op een test server staat. WAMP)

Ik ben heel benieuwd naar jullie commentaar.

Groet,

John

Bovenaan :)


Acties:
  • +1 Henk 'm!

  • GlowMouse
  • Registratie: November 2002
  • Niet online
Jay-Connected schreef op woensdag 23 augustus 2017 @ 15:33:
Ik heb geprobeerd om met cookies de variabel te zetten. Natuurlijk lukt dit, echter als je een andere week uit de dropdown kiest, vult hij die variabele niet meer opnieuw.
Waarom niet? Kun je met vijf regeltjes code laten zien wat je doet?

Acties:
  • 0 Henk 'm!

  • Jay-Connected
  • Registratie: Februari 2004
  • Laatst online: 11-03-2024
Tuurlijk:

code:
1
2
3
4
5
6
7
8
9
10
if(!isset($_SESSION)) 
    { 
        session_start(); 
        

$week = 'week322017';


setcookie("TestCookie", $week, time()+4);  /* expire in 1 hour */
    }

Bovenaan :)


Acties:
  • +1 Henk 'm!

  • KabouterSuper
  • Registratie: September 2005
  • Niet online
Ik zou het in PHP via $_SESSION['week] regelen...simpelweg initialiseren op huidige week als de waarde niet geldig is, en bij een POST-request de waarde valideren en de sessievariabele overschrijven.

When life gives you lemons, start a battery factory


Acties:
  • 0 Henk 'm!

  • Jay-Connected
  • Registratie: Februari 2004
  • Laatst online: 11-03-2024
en hoe vul ik hem dan later weer? ik doe nu dit met de dropdown

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
if (isset($_POST['action'])) {
    echo '<br />The ' . $_POST['submit'] . ' submit button was pressed<br />';
}
?>

  <form id="s" method="post">
   <select name="weeknr">
   <option value="week312017">week31-2017</option>
    <option value="week322017">week32-2017</option>
    <option value="week332017">week33-2017</option>
     <option value="week342017">week34-2017</option>
  </select> 
<input type="image" name="submit" src="./assets/images/new_window.png" value="Send" alt="submit">
</form>

Bovenaan :)


Acties:
  • +1 Henk 'm!

  • 0stone0
  • Registratie: Maart 2015
  • Laatst online: 11-09 16:26

0stone0

01000010 01101111 01100101 !

De variable hoeft alleen de huidige sessie te blijven bestaan?
Is het dan niet makkelijker om deze elke keer achteraan een array te gooien?

code:
1
$testArray[] = $_POST['']

"~~Linux is only free if your time has no value"


Acties:
  • +1 Henk 'm!

  • KabouterSuper
  • Registratie: September 2005
  • Niet online
Cookies kunnen wat traag reageren, vooral als je al output geecho'd hebt, zie de php manual
setcookie() defines a cookie to be sent along with the rest of the HTTP headers. Like other headers, cookies must be sent before any output from your script (this is a protocol restriction). This requires that you place calls to this function prior to any output, including <html> and <head> tags as well as any whitespace.
Kortom, als je cookies wilt gebruiken, moet je heel goed opletten dat je je sessie goed start en afsluit voordat je output gaat schrijven.

[ Voor 46% gewijzigd door KabouterSuper op 23-08-2017 15:43 . Reden: quote toegevoegd ]

When life gives you lemons, start a battery factory


Acties:
  • 0 Henk 'm!

  • Jay-Connected
  • Registratie: Februari 2004
  • Laatst online: 11-03-2024
0stone0 schreef op woensdag 23 augustus 2017 @ 15:42:
De variable hoeft alleen de huidige sessie te blijven bestaan?
Is het dan niet makkelijker om deze elke keer achteraan een array te gooien?

code:
1
$testArray[] = $_POST['']
De variable wordt 1 keer gezet, zodat je geen foutmelding krijgt.. anders komt er niks op het scherm
$week is namelijk de tabelnaam van de database.. als er dus geen $week is; hebben de scripts niks te doen (behalve foutmeldingen genereren)

Bovenaan :)


Acties:
  • 0 Henk 'm!

  • Jay-Connected
  • Registratie: Februari 2004
  • Laatst online: 11-03-2024
KabouterSuper schreef op woensdag 23 augustus 2017 @ 15:43:
Cookies kunnen wat traag reageren, vooral als je al output geecho'd hebt, zie de php manual

[...]

Kortom, als je cookies wilt gebruiken, moet je heel goed opletten dat je je sessie goed start en afsluit voordat je output gaat schrijven.
Misschien kan ik dus beter geen cookies gebruiken..
Ik wil de gebruiker ook forceren om een keuze te maken, tenzij ze informatie van de huidige week willen weten natuurlijk..

Bovenaan :)


Acties:
  • +1 Henk 'm!

  • emnich
  • Registratie: November 2012
  • Niet online

emnich

kom je hier vaker?

Zoals @KabouterSuper al aangeeft gebruik gewoon $_SESSION
code:
1
$_SESSION['week']=$week;

en later om te lezen
code:
1
$week = $_SESSION['week']

Let je wel op goede validatie als je het gaat gebruiken als tabel naam!

[ Voor 15% gewijzigd door emnich op 23-08-2017 15:49 ]


Acties:
  • +1 Henk 'm!

  • 0stone0
  • Registratie: Maart 2015
  • Laatst online: 11-09 16:26

0stone0

01000010 01101111 01100101 !

Jay-Connected schreef op woensdag 23 augustus 2017 @ 15:44:
[...]


De variable wordt 1 keer gezet, zodat je geen foutmelding krijgt.. anders komt er niks op het scherm
$week is namelijk de tabelnaam van de database.. als er dus geen $week is; hebben de scripts niks te doen (behalve foutmeldingen genereren)
Geeft dit een probleem dan? Ik vind je probleem steeds verwarrender worden haha

Wat mij logisch klinkt;
Zet een variable met de huidige week aan t begin van .php bestand
code:
1
2
$week = *database tabel naam* 
$var = *huidige week*


Zodra de gebruiker dan een andere week opgeeft schrijf je deze op een andere variable
code:
1
$newVar = *nieuwe week*


Uiteindelijk kan je dan gemakkelijk checken of die variable bestaat, en er dan iets mee doen;
code:
1
if ($newVar) { // doe dingen }


Hoop dat ik je goed heb begrepen

"~~Linux is only free if your time has no value"


Acties:
  • 0 Henk 'm!

  • Jay-Connected
  • Registratie: Februari 2004
  • Laatst online: 11-03-2024
0stone0 schreef op woensdag 23 augustus 2017 @ 15:50:
[...]


Geeft dit een probleem dan? Ik vind je probleem steeds verwarrender worden haha

Wat mij logisch klinkt;
Zet een variable met de huidige week aan t begin van .php bestand
code:
1
2
$week = *database tabel naam* 
$var = *huidige week*


Zodra de gebruiker dan een andere week opgeeft schrijf je deze op een andere variable
code:
1
$newVar = *nieuwe week*


Uiteindelijk kan je dan gemakkelijk checken of die variable bestaat, en er dan iets mee doen;
code:
1
if ($newVar) { // doe dingen }


Hoop dat ik je goed heb begrepen
Dit is inderdaad logisch..
Hoe laat ik alleen dan de sessie begrijpen dat $newVar bestaat? Gaat php gewoon door met uitvoeren van de code? terwijl dus $var al gevuld is?

Bovenaan :)


Acties:
  • +1 Henk 'm!

  • 0stone0
  • Registratie: Maart 2015
  • Laatst online: 11-09 16:26

0stone0

01000010 01101111 01100101 !

Jay-Connected schreef op woensdag 23 augustus 2017 @ 15:53:
[...]


Dit is inderdaad logisch..
Hoe laat ik alleen dan de sessie begrijpen dat $newVar bestaat? Gaat php gewoon door met uitvoeren van de code? terwijl dus $var al gevuld is?
Wat bedoel je precies met ;
de sessie
?

Zou je dit misschien met code kunnen laten zien?

Maar ja, als ik jouw situatie goed voor me zie gaat dat gewoon door!

"~~Linux is only free if your time has no value"


Acties:
  • 0 Henk 'm!

  • Jay-Connected
  • Registratie: Februari 2004
  • Laatst online: 11-03-2024
meer code is het niet! Ik open een sessie (of een cookie, beide heb ik geprobeerd)
die vul ik met deze week, en wat ik probeerde; is van de dropdown ook een variable te maken die ook $week heet.
Die wilde ik dan laten overschrijven door de huidige $week (wat dus wel leuk klinkt, maar helemaal niet werkt..)

Dat is niet logisch. Zoals jij omschrijft ($newVar) is denk ik de enige werkende methode.
Ik ga het even proberen, en dan laat ik het weten.. Uiteraard met een geweldig stukje code-snippet.
Ik ben blij met jullie op tweakers! En excuus voor de n00b vraag hoor..

Bovenaan :)


Acties:
  • +1 Henk 'm!

  • GlowMouse
  • Registratie: November 2002
  • Niet online
Het is óf session_start en $_SESSION, óf setcookie en $_COOKIE. Allebei de opties werken prima. Overschrijven werkt ook prima (via $_SESSION of setcookie). Kies één oplossing en ga daarmee verder.

Acties:
  • +2 Henk 'm!

  • ewoutw
  • Registratie: Oktober 2013
  • Laatst online: 05-09 00:25
als ik naar je code kijk mis ik in het form een action. Kortom formulier wordt naar niets gepost.
<form method="POST|GET" action="script_die_de_info_verwerkt.php">

maar volgens mij wil je zoiets // niet gestest
code:
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
<php
session_start();
// controleer of $week er is
if (!isset($SESSION['week'])) {
  // $week zetten
  $SESSION['week'] = 'week'.date("WY"); // altijd de huidige week doormiddel van date()
}
// controleren of het script verstuurd is
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
  // $week zetten
  $SESSION['week'] = $_POST['weeknr']; 
}

echo'<html>
<body>
<form id="s" method="post" action="'.$_SERVER['PHP_SELF'].'">
  <select name="weeknr">
    <option value="week312017">week31-2017</option>
    <option value="week322017">week32-2017</option>
    <option value="week332017">week33-2017</option>
    <option value="week342017">week34-2017</option>
  </select> 
  <input type="image" name="submit" src="./assets/images/new_window.png" value="Send" alt="submit">
</form>
</body>
</html>';
?>

Voor dit script zal je prima een cookie kunnen gebruiken maar die zijn vaak langzamer omdat die weer van de client opgehaalt moeten worden.

zie ook:
http://php.net/manual/en/function.isset.php
http://php.net/manual/en/function.date.php
http://php.net/manual/en/reserved.variables.server.php

[ Voor 17% gewijzigd door ewoutw op 24-08-2017 03:07 . Reden: opmaak/spelling + toevoeging ]


  • Jay-Connected
  • Registratie: Februari 2004
  • Laatst online: 11-03-2024
ewoutw schreef op donderdag 24 augustus 2017 @ 02:55:
als ik naar je code kijk mis ik in het form een action. Kortom formulier wordt naar niets gepost.
<form method="POST|GET" action="script_die_de_info_verwerkt.php">

maar volgens mij wil je zoiets // niet gestest
code:
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
<php
session_start();
// controleer of $week er is
if (!isset($SESSION['week'])) {
  // $week zetten
  $SESSION['week'] = 'week'.date("WY"); // altijd de huidige week doormiddel van date()
}
// controleren of het script verstuurd is
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
  // $week zetten
  $SESSION['week'] = $_POST['weeknr']; 
}

echo'<html>
<body>
<form id="s" method="post" action="'.$_SERVER['PHP_SELF'].'">
  <select name="weeknr">
    <option value="week312017">week31-2017</option>
    <option value="week322017">week32-2017</option>
    <option value="week332017">week33-2017</option>
    <option value="week342017">week34-2017</option>
  </select> 
  <input type="image" name="submit" src="./assets/images/new_window.png" value="Send" alt="submit">
</form>
</body>
</html>';
?>

Voor dit script zal je prima een cookie kunnen gebruiken maar die zijn vaak langzamer omdat die weer van de client opgehaalt moeten worden.

zie ook:
http://php.net/manual/en/function.isset.php
http://php.net/manual/en/function.date.php
http://php.net/manual/en/reserved.variables.server.php
Bedankt voor het mooie voorbeeld!
Wat kan het eenvoudig zijn (als je weet waar je mee bezig bent O-) )

Bovenaan :)


Acties:
  • +1 Henk 'm!

  • Hydra
  • Registratie: September 2000
  • Laatst online: 21-08 17:09
Jay-Connected schreef op woensdag 23 augustus 2017 @ 15:44:
De variable wordt 1 keer gezet, zodat je geen foutmelding krijgt.. anders komt er niks op het scherm
$week is namelijk de tabelnaam van de database.. als er dus geen $week is; hebben de scripts niks te doen (behalve foutmeldingen genereren)
Je hebt een tabel per week? Nou, begin daar eens mee want dat is hardstikke fout. Ten eerste is 'week' natuurlijk gewoon data en geen type end dus wil je geen aparte tabellen. Jouw setup kan geen aggregaties over meerdere weken berekenen bijvoorbeeld in een enkele query.

Daarnaast ga je nu POST data in je query concatenaten, dat leidt heel snel tot SQL injection vulnerabilities.

https://niels.nu


  • Jay-Connected
  • Registratie: Februari 2004
  • Laatst online: 11-03-2024
Hi Hydra,
Ik zal wat meer ingaan op mijn "probleempje".
Ik ben bezig met een tussen-oplossing voor een defecte CMDB.
De CMDB heeft wat vervelende eigenschappen, met als belangrijkste dat er een "ageing" van 40 dagen is.
Mijn idee was dus om tussentijds middels twee exports, elke week een rapportage te doen van de huidige stand van zaken.

In elke week zit allerlei informatie wat gecombineerd wordt met informatie van server tellingen (van die week)
met joins heb ik allerlei zaken aan elkaar geknoopt, en dat lijkt te werken.
Waarschijnlijk is dit niet ideaal, echter geeft het wel het resultaat.

Overigens is dit project alleen voor intern gebruik..

Bovenaan :)


Acties:
  • +1 Henk 'm!

  • GlowMouse
  • Registratie: November 2002
  • Niet online
Vergeet de input validation niet.

Acties:
  • +2 Henk 'm!

  • emnich
  • Registratie: November 2012
  • Niet online

emnich

kom je hier vaker?

Jay-Connected schreef op donderdag 24 augustus 2017 @ 09:58:
Overigens is dit project alleen voor intern gebruik..
Een beetje off-topic maar ik kan het toch niet laten. Ook al is het voor intern gebruik dan nog moet je SQl-injectie ALTIJD voorkomen. Er kan altijd toch een rotte appel zijn die er misbruik van gaat maken maar belangrijker is dat projecten kunnen groeien en uiteindelijk wil iemand toch ook leverancier X toegang geven of klant Y. Of je pakt deze werkende code en maakt daarmee een nieuw stukje wat wél voor derden is.

Bottom line, zorg dat je code altijd veilig is.

  • Jay-Connected
  • Registratie: Februari 2004
  • Laatst online: 11-03-2024
Ja.. het zal kunnen gaan groeien.. Ik zal de code allemaal nog eens langs lopen en mij wat gaan verdiepen op "veilige" code..

Bovenaan :)


Acties:
  • +1 Henk 'm!

Verwijderd

emnich schreef op donderdag 24 augustus 2017 @ 10:20:
Ook al is het voor intern gebruik dan nog moet je SQl-injectie ALTIJD voorkomen.
Ik doe toch even mee - ik vergelijk het met het aantrekken van een broek voordat je de deur uit gaat. Soms wat ongemakkelijk, maar uiteindelijk toch beter. ;)

  • Jay-Connected
  • Registratie: Februari 2004
  • Laatst online: 11-03-2024
Jay-Connected schreef op donderdag 24 augustus 2017 @ 09:27:
[...]


Bedankt voor het mooie voorbeeld!
Wat kan het eenvoudig zijn (als je weet waar je mee bezig bent O-) )
Deze code doet inderdaad wat ik vroeg.

Ik kan nu switchen van tabel als ik op de pagina ben, en krijg dan de data te zien waar ik naar op zoek ben.
Als ik naar een andere pagina browse, en weer terug ga naar de pagina met de informatie die ik wilde zien, krijg ik weer de huidige week terug. (dat staat natuurlijk ook zo in de code..)
Is hier nog iets logisch voor te bedenken?

Bovenaan :)


  • Hydra
  • Registratie: September 2000
  • Laatst online: 21-08 17:09
Jay-Connected schreef op donderdag 24 augustus 2017 @ 09:58:
In elke week zit allerlei informatie wat gecombineerd wordt met informatie van server tellingen (van die week)
met joins heb ik allerlei zaken aan elkaar geknoopt, en dat lijkt te werken.
Waarschijnlijk is dit niet ideaal, echter geeft het wel het resultaat.

Overigens is dit project alleen voor intern gebruik..
Nou en? Een enkele tabel is een stuk simpeler dan iedere keer voor elke week een nieuwe tabel aan gaan maken. Gewoon meteen goed doen.

Ik begrijp dat je een beginner ben, prima, maar juist als beginner moet je een gevoel ontwikkelen voor dit soort zaken. Dat het voor intern gebruik is, is geen excuus voor brakke database schema's. Helemaal niet als je ook nog eens en-passant een SQL injection vulnerability inbouwt.

Voor SQL queries gebruik je altijd parametrized queries in plaats van dat je zelf SQL aan elkaar plakt. Dit voorkomt dat iemand een ";DROP TABLE users;--" achter je query plakt. Maar parametrized queries kunnen (meestal) geen tabelnamen als parameter gebruiken en dit is dus een van de vele redenen waarom een tabel per week een erg slecht idee is.

Het is juist als beginner dus een goed idee om best practices altijd toe te passen ongeacht of een stuk code intern of extern gebruikt wordt. Jij kan nooit voorspellen of in de toekomst toch iemand de fout maakt het extern beschikbaar te maken en dan is het nog steeds gewoon jouw fout.

https://niels.nu


  • CH4OS
  • Registratie: April 2002
  • Niet online

CH4OS

It's a kind of magic

Jay-Connected schreef op woensdag 23 augustus 2017 @ 15:44:
De variable wordt 1 keer gezet, zodat je geen foutmelding krijgt.. anders komt er niks op het scherm
$week is namelijk de tabelnaam van de database.. als er dus geen $week is; hebben de scripts niks te doen (behalve foutmeldingen genereren)
Wow, de weeknaam is een aparte tabel in de database? Zou je dan niet beter de database normaliseren, zodat de kans op fouten kleiner is? Al weet ik dat het topic hier niet over gaat, ik raad het je wel sterk aan.

  • Jay-Connected
  • Registratie: Februari 2004
  • Laatst online: 11-03-2024
CH4OS schreef op donderdag 24 augustus 2017 @ 11:32:
[...]
Wow, de weeknaam is een aparte tabel in de database? Zou je dan niet beter de database normaliseren, zodat de kans op fouten kleiner is? Al weet ik dat het topic hier niet over gaat, ik raad het je wel sterk aan.
De weeknaam staat voor een tabel met informatie van die hele week (zo'n 11.000 records)
ik twee tabellen
1x applicaties-week
1x servers-week

Via deze manier bouw ik dan historische informatie op..

Normaliseren is helemaal niet van toepassing.
Ik lees alleen data uit.

Bovenaan :)


  • CH4OS
  • Registratie: April 2002
  • Niet online

CH4OS

It's a kind of magic

Jay-Connected schreef op donderdag 24 augustus 2017 @ 11:46:
Normaliseren is helemaal niet van toepassing.
Nee, dat merk ik dat het niet van toepassing is, maar is wel verstandig om te doen. Je hebt dus dezelfde data, maar verspreid je over meerdere tabellen, terwijl dat makkelijk in 1 tabel kan, met een timestamp erbij van wanneer de data is. ;)

Acties:
  • +1 Henk 'm!

  • ThomasG
  • Registratie: Juni 2006
  • Laatst online: 18:58
Tabellen van 11.000 records zijn relatief klein. Het heeft geen enkel voordeel om voor iedere week een nieuwe tabel te maken, zelfs (of eigenlijk juist helemaal) niet als je enkel uitleest. Daarbij heb jij het nu over 2 tabellen, terwijl dat er (2*52=104) worden per jaar.

Het is veel beter als je gewoon een velt met de datetime toevoegt aan de rijen, waarvan je o.a. de week kunt afleiden. Niet alleen maak je dan correct gebruik van de database, je hebt ook nog de mogelijkheid tot het toevoegen van een zee van extra features. Je kunt daar namelijk heel mooi mee aggregeren. Natuurlijk niet direct, maar wellicht in de toekomst voor het maken van statistieken.

Het is een kleine moeite om het "correct" te doen, en je zult er later alleen maar profijt van hebben; wanneer je programmeren/database beter onder de knie hebt.

  • Jay-Connected
  • Registratie: Februari 2004
  • Laatst online: 11-03-2024
ThomasG schreef op donderdag 24 augustus 2017 @ 11:58:
Tabellen van 11.000 records zijn relatief klein. Het heeft geen enkel voordeel om voor iedere week een nieuwe tabel te maken, zelfs (of eigenlijk juist helemaal) niet als je enkel uitleest. Daarbij heb jij het nu over 2 tabellen, terwijl dat er (2*52=104) worden per jaar.

Het is veel beter als je gewoon een velt met de datetime toevoegt aan de rijen, waarvan je o.a. de week kunt afleiden. Niet alleen maak je dan correct gebruik van de database, je hebt ook nog de mogelijkheid tot het toevoegen van een zee van extra features. Je kunt daar namelijk heel mooi mee aggregeren. Natuurlijk niet direct, maar wellicht in de toekomst voor het maken van statistieken.

Het is een kleine moeite om het "correct" te doen, en je zult er later alleen maar profijt van hebben; wanneer je programmeren/database beter onder de knie hebt.
Ik ga eens even kijken hoe ik dat eenvoudig kan doen :)
De extra features en het aggregeren van de info is wel een sterk punt..

Bovenaan :)


  • CH4OS
  • Registratie: April 2002
  • Niet online

CH4OS

It's a kind of magic

Ik weet niet welke RDBMS gebruikt wordt, maar zo'n beetje ieder zichzelf respecterende RDBMS heeft wel datum- en tijdsfuncties aan boord, zodat je een datum bijvoorbeeld makkelijk kan omrekenen naar een weeknummer etcetera. :)

En aangezien het schijnbaar een soort log data is (althans, dat maak ik op uit het topic) hoef je natuurlijk ook niet constant alles te bewaren, neem ik aan, dus echt heel groot zal de database denk ik ook niet gauw worden.

[ Voor 34% gewijzigd door CH4OS op 24-08-2017 12:32 ]


  • Jay-Connected
  • Registratie: Februari 2004
  • Laatst online: 11-03-2024
Nog even terug naar mijn vraag.
Hoe kan ik er voor zorgen dat de sessie variable op elke pagina hetzelfde blijft?
Als ik nu refresh; kom ik weer in week34 terecht.
Terwijl ik met de dropdown week32 heb gekozen.

Als ik dan weer opnieuw kies en submit; krijg ik natuurlijk de data van week 32 weer te zien.. (maar handiger zal het zijn als dit gewoon onthouden wordt..)

Bovenaan :)


  • emnich
  • Registratie: November 2012
  • Niet online

emnich

kom je hier vaker?

Je sessie zorgt daar zelf voor. Je kan kijken of het goed in $_SESSION staat:

code:
1
print_r($_SESSION);


Doe dat na het starten van je sessie. Als week daar niet gezet is, dan werkt je code mbt het zetten van de sessie niet goed. Als de week daar wel goed in staat dan werkt je code mbt het selecteren niet goed.

  • Jay-Connected
  • Registratie: Februari 2004
  • Laatst online: 11-03-2024
Ik gebruik dit:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php

if(!isset($a))
{

$a = False;
if($a == TRUE)
{
    session_start();
    $a=TRUE;
}

}
// controleer of $week er is
if (!isset($SESSION['week'])) {
  // $week zetten
  $SESSION['week'] = 'week'.date("WY"); // altijd de huidige week doormiddel van date()
}



?>

En ik doe elke pagina include '.\assets\includes\sessie.php';

(daar zit de bovenstaande code in) uiteraard doe ik dit helemaal bovenaan het document..

Bovenaan :)


Acties:
  • +1 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Waarom zou je het uberhaupt in een sessie willen zetten? Ik zou het eerder als url parameter ( of desnoods querystring ) doen.

Dus gewoon http://www.domain.ext/week/{weeknum} of http://www.domain.ext/?weeknum={weeknum}, voordeel is dat je dan ook gewoon url's naar iemand anders door kan sturen, en dan werkt het ook. Hoe minder state je server-side bijhoudt hoe makkelijker je het jezelf maakt ( Ook met navigatie d.m.v. back knop b.v. )

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • ThomasG
  • Registratie: Juni 2006
  • Laatst online: 18:58
Houdt er rekening meer dat het $_SESSION moet zijn (let op, leading underscore), en dus niet $SESSION.

[ Voor 20% gewijzigd door ThomasG op 24-08-2017 14:28 ]


  • Jay-Connected
  • Registratie: Februari 2004
  • Laatst online: 11-03-2024
ThomasG schreef op donderdag 24 augustus 2017 @ 14:28:
Houdt er rekening meer dat het $_SESSION moet zijn (let op, leading underscore), en dus niet $SESSION.
Ik heb het meteen aangepast.. (het maakt niets uit, trouwens.. ik ben nog steeds de variable kwijt als ik naar een andere pagina browse)

Bovenaan :)


Acties:
  • +1 Henk 'm!

  • CH4OS
  • Registratie: April 2002
  • Niet online

CH4OS

It's a kind of magic

Worden de sessies wel correct opgeslagen? Heeft de user waaronder jij WAMP draait wel lees- en schrijfrechten in de map waar de sessies opgeslagen worden?

[ Voor 3% gewijzigd door CH4OS op 24-08-2017 15:33 ]


  • Jay-Connected
  • Registratie: Februari 2004
  • Laatst online: 11-03-2024
:) gister deed-ie het nog.. Nu zie ik in de tmp folder van WAMP geen sessies (alleen die van phpmyadmin)

Wellicht gaat ergens iets mis..

Bovenaan :)


  • ThomasG
  • Registratie: Juni 2006
  • Laatst online: 18:58
Een klassieker :+

Acties:
  • +1 Henk 'm!

  • Jay-Connected
  • Registratie: Februari 2004
  • Laatst online: 11-03-2024
Ja.. ehh
This is embarrassing
Het probleem zat tussen het toetsenbord en stoel.

Hoe dan ook, super bedankt voor jullie hulp!

Bovenaan :)


Acties:
  • +2 Henk 'm!

  • Harrie_
  • Registratie: Juli 2003
  • Niet online

Harrie_

⠀                  🔴 🔴 🔴 🔴 🔴

Heb je ook de code van @ewoutw goed bekeken? Hij wijst er weliswaar in zijn commentaar alleen op dat je een method in je form mist, maar in zijn code is ook goed terug te zien hoe je gebruik maakt van sessies, dit zie ik in jouw code niet terug @Jay-Connected...


PHP:
1
2
3
4
5
6
7
8
9
<?PHP
session_start(); // Altijd mee beginnen, ook al is er nog geen sessie gezet

// hier check je de sessie, nadat je de sessie gestart bent.
if (isset($_SESSION['week'])) {
    // iets doen
} else {
    // iets anders doen
}
Jay-Connected schreef op donderdag 24 augustus 2017 @ 14:07:
Ik gebruik dit:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php

if(!isset($a))
{

$a = False;
if($a == TRUE)
{
    session_start();
    $a=TRUE;
}

}
// controleer of $week er is
if (!isset($SESSION['week'])) {
  // $week zetten
  $SESSION['week'] = 'week'.date("WY"); // altijd de huidige week doormiddel van date()
}



?>

En ik doe elke pagina include '.\assets\includes\sessie.php';

(daar zit de bovenstaande code in) uiteraard doe ik dit helemaal bovenaan het document..
Dit gaat natuurlijk voor geen meter werken, want in je if-statement zet je $a op false om vervolgens te controleren of deze true is, maar dat istie natuurlijk nooit omdat je 'm een regel eerder hard op false hebt gezet.

Verder wil ik je nog de volgende pointers meegeven:
  • Zorg er in je code vooral ook voor dat je (in je if/else-statements) goed intabt. Dat maakt het voor jezelf, maar ook voor ons, een stuk leesbaarder. :Y
  • Wees consistent: in de ene regel zet je een var als 'False' om in de volgende regel te checken op 'TRUE', ga voor all caps of all lowercase, wat je kiest maakt niet uit maar wees consistent; ook hier weer helpt het met de leesbaarheid van je code.
  • Wanneer je in een if-statement een var aftoetst tegen true of false, gebruik dan de === operator i.p.v. ==, Op deze pagina kun je 2 tabellen zien die direct het verschil laten zien tussen de twee.
  • Wees zuinig met comments en plaats ze waar nodig. Ik zie in je code niet wat $a is en wat het betekent als deze true of false is, maar achter een var die gevuld wordt met DATE() staat wel de opmerking dat de var gevuld wordt met DATE(), totaal overbodig want dat lees je direct in de code.
  • De eind-tag '?>' is optioneel, maar het is inmiddels wel common practice om deze standaard weg te laten, hier meer daarover.
  • Meer een Tweakers-tip; als je gebruik maakt van [code=PHP] dan kleurt Tweakers ook nog je syntax voor je, ziet het er allemaal nog strakker uit! :>

[ Voor 61% gewijzigd door Harrie_ op 24-08-2017 17:32 ]

Hoeder van het Noord-Meierijse dialect


Acties:
  • +1 Henk 'm!

  • ewoutw
  • Registratie: Oktober 2013
  • Laatst online: 05-09 00:25
Jay-Connected schreef op donderdag 24 augustus 2017 @ 11:24:
[...]


Deze code doet inderdaad wat ik vroeg.

Ik kan nu switchen van tabel als ik op de pagina ben, en krijg dan de data te zien waar ik naar op zoek ben.
Als ik naar een andere pagina browse, en weer terug ga naar de pagina met de informatie die ik wilde zien, krijg ik weer de huidige week terug. (dat staat natuurlijk ook zo in de code..)
Is hier nog iets logisch voor te bedenken?
Als die terug gaat naar de huidige week is dat omdat de sessie weggevallen is. Het eerste IF statement (die de sessie in de huidige week zet) wordt alleen doorlopen al de sessie waarde $week niet meer aanwezig is. Blijkbaar is die dus verloren gegaan. Op die andere pagina (eigenlijk op elke!) moet je ook session_start() gebruiken om de sessie levend te houden.

Daarnaast ben ik het wel met de andere eens dat erg vreemd is dat je tabel kiest zo. Nu krijg je elke week weer nieuwe tabel.

Kan je beter alle data omzetten naar 1 nieuwe tabel waar de weeknr een veld is en hoop cellen als null vullen. denk ik.

Acties:
  • +1 Henk 'm!

Verwijderd

Als ik jou was zou ik een datetime object, of mktime gebruiken, dan met de functie date, de week eruit filteren, als je dit in een sessie wilt bewaren of uit wil lezen moet je de time value opslaan in de sessie en deze weer omzetten met de date functie naar week. Ik denk dat dat makkelijker wordt. Je dropdown krijgt een offset strtotime +1week, etc. Maar je blijft met die time value werken zoals die ook in de database staat

Acties:
  • 0 Henk 'm!

  • Jay-Connected
  • Registratie: Februari 2004
  • Laatst online: 11-03-2024
Harrie_ schreef op donderdag 24 augustus 2017 @ 17:10:
Heb je ook de code van @ewoutw goed bekeken? Hij wijst er weliswaar in zijn commentaar alleen op dat je een method in je form mist, maar in zijn code is ook goed terug te zien hoe je gebruik maakt van sessies, dit zie ik in jouw code niet terug @Jay-Connected...


PHP:
1
2
3
4
5
6
7
8
9
<?PHP
session_start(); // Altijd mee beginnen, ook al is er nog geen sessie gezet

// hier check je de sessie, nadat je de sessie gestart bent.
if (isset($_SESSION['week'])) {
    // iets doen
} else {
    // iets anders doen
}



[...]


Dit gaat natuurlijk voor geen meter werken, want in je if-statement zet je $a op false om vervolgens te controleren of deze true is, maar dat istie natuurlijk nooit omdat je 'm een regel eerder hard op false hebt gezet.

Verder wil ik je nog de volgende pointers meegeven:
  • Zorg er in je code vooral ook voor dat je (in je if/else-statements) goed intabt. Dat maakt het voor jezelf, maar ook voor ons, een stuk leesbaarder. :Y
  • Wees consistent: in de ene regel zet je een var als 'False' om in de volgende regel te checken op 'TRUE', ga voor all caps of all lowercase, wat je kiest maakt niet uit maar wees consistent; ook hier weer helpt het met de leesbaarheid van je code.
  • Wanneer je in een if-statement een var aftoetst tegen true of false, gebruik dan de === operator i.p.v. ==, Op deze pagina kun je 2 tabellen zien die direct het verschil laten zien tussen de twee.
  • Wees zuinig met comments en plaats ze waar nodig. Ik zie in je code niet wat $a is en wat het betekent als deze true of false is, maar achter een var die gevuld wordt met DATE() staat wel de opmerking dat de var gevuld wordt met DATE(), totaal overbodig want dat lees je direct in de code.
  • De eind-tag '?>' is optioneel, maar het is inmiddels wel common practice om deze standaard weg te laten, hier meer daarover.
  • Meer een Tweakers-tip; als je gebruik maakt van [code=PHP] dan kleurt Tweakers ook nog je syntax voor je, ziet het er allemaal nog strakker uit! :>
Bedankt voor deze waardige tips!!

Ik zal zeker gaan werken met indents, en zal kiezen voor low-case.

Het is een leuke materie; maar je moet wel opletten :P

Bovenaan :)

Pagina: 1