login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Kort session vraagje

Offline barry - 19/10/2004 01:59 (laatste wijziging 19/10/2004 02:24)
Avatar van barryPHP interesse Normaalgesproken maak je een session op bijvoorbeeld deze manier aan:
  1. <?
  2. $_SESSION['naam'] = "opvulshite...";
  3. ?>

Maar is het ook mogelijk sessions zo aan te maken?
  1. <?
  2. $_SESSION['naam'][1] = "Shite 1";
  3. $_SESSION['naam'][2] = "Shite 2";
  4. $_SESSION['naam'][3] = "Shite 3";
  5. ?>

Zodat je met een for lus de gegevens eruit kan halen etc...
En is het dan ook mogelijk om bijvoorbeeld het volgende uit te voeren?:

  1. <?
  2. for($a=0;$a<=count($_SESSION['naam']);$a++){
  3. echo $_SESSION['naam'][$a] . "<br>";
  4. }
  5. ?>


Is er (als het bovenstaande niet mogelijk is) een andere mogelijkheid om sessions in arrays te zetten??

[edit]
Sorry voor deze spam...
Ik ben zelf toch nog even gaan experimenteren... maar je kan geen Array_achtige sessions maken...
Ik heb hiervoor wel de volgende oplossing... welke je gelijk ook zelf kan testen 

  1. if(!isset($_SESSION['sessies'])){ $_SESSION['sessies'] = 0; } else {
  2. $numses = $_SESSION['sessies']; }
  3.  
  4. if($add=="sess"){
  5. $naam = $_POST['naam'];
  6. $aantal = $_POST['aantal'];
  7. if($naam=="" || $aantal==""){ header("location: index.php?open=add"); } else {
  8. $next = $numses + 1;
  9. $_SESSION["naam_$next"] = $naam;
  10. $_SESSION["aantal_$next"] = $aantal;
  11. $_SESSION['sessies'] = $next;
  12. header("location: index.php?open=add");
  13. } }
  14. elseif($remove=="all") { session_destroy(); header("location: index.php"); }
  15. else {
  16. ?>
  17. <html>
  18. <head>
  19. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
  20. <title>Untitled Document</title>
  21. </head>
  22. <body>
  23. <a href="?open=sess">Bekijk je sessions</a> | <a href="?open=add">Voeg session toe</a> | <a href="?remove=all">Verwijder de sessions</a>
  24. <?
  25. if($open=="add"){
  26. ?>
  27. <form method="post" action="?add=sess">
  28. <strong>Naam:</strong>
  29. <input name="naam" type="text" id="naam" size="18" maxlength="18">
  30. <br>
  31. <strong>Aantal:
  32. <input name="aantal" type="text" id="aantal" size="3" maxlength="3">
  33. <input type="submit" name="Submit" value="Voeg Toe">
  34. </strong>
  35. </form>
  36. <? } elseif($open=="sess") {
  37. echo "\n\n<br>";
  38. $handle = $_SESSION['sessies'];
  39. for($a=1;$a<=$handle;$a++){
  40. echo $a . ": " . $_SESSION["naam_$a"] . " [" . $_SESSION["aantal_$a"] . "]<br>\n";
  41. }
  42. } else { echo "<br>Klik op één van de bovenstaande links..."; }
  43.  
  44. echo "<br><br><br>Aantal sessions: " . $_SESSION['sessies']; ?>
  45. </body>
  46. </html><? } ?>


Op die manier heb je toch een soort Arrays... verder kan je met wat creativiteit dit best leuk toepassen op bepaalde dingen...

Nogmaals sorry voor deze spam... maar misschien hebben jullie er tóch nog wat aan 
[/edit]

19 antwoorden

Gesponsorde links
Offline Thomas - 19/10/2004 07:37 (laatste wijziging 19/10/2004 07:39)
Avatar van Thomas Moderator Kort sessie vraagje ?
Volgens mij kun je wel arrays gebruiken in sessies ?
Als je ze maar als zodanig declareert ?

Gebruik dus eerst $_SESSION['naam'] = array();

Als je vervolgens dit array uit wilt lezen, moet je wel de juiste indices pakken. Als je met $_SESSION['naam'][1] begint, moet je niet beginnen met het uitlezen van $_SESSION['naam'][0] in je for-lus.

En anders doe je het op de door jou voorgestelde manier. $_SESSION['sessies'] is wel een beetje een misleidende naam, though.
Offline xSc - 19/10/2004 10:57 (laatste wijziging 19/10/2004 11:02)
Avatar van xSc Onbekend Opmerking:

Je gebruikt een for-lus om door de array heen te wandelen.

foreach() ( http://www.php.net/foreach/ ) is speciaal voor de arrays.
Offline barry - 19/10/2004 11:31
Avatar van barry PHP interesse
  1. Fangorn:
  2. En anders doe je het op de door jou voorgestelde manier. $_SESSION['sessies'] is wel een beetje een misleidende naam, though.


Naja ik heb gewoon een voorbeeltje gemaakt... maar in ieder geval... ik moet dat maar eens gaan proberen met die array(); functie...

En dat foreach() is ook wel handiger denk ik ja...

Beide bedankt dus... ik ga ffies knutselen
Offline Thomas - 19/10/2004 11:35
Avatar van Thomas Moderator foreach() of for() zijn in principe allebei geschikt voor arrays - tis maar net wat je voorkeur heeft. Ik ken mensen die zweren bij while-lussen, wat in principe ook kan...
Offline Frisbee - 19/10/2004 11:37
Avatar van Frisbee HTML beginner ik gebruikte tot vorige week ook altijd for() maar gebruik nu foreach()

werkt wel een stuk makkelijker
Offline barry - 19/10/2004 12:14 (laatste wijziging 19/10/2004 12:14)
Avatar van barry PHP interesse Ik heb het geprobeerd met dat $_SESSION['naam'] = array();
maar het werkt niet:
  1. if(!isset($_SESSION['naam'])){
  2. $_SESSION['naam'] = array();
  3. $_SESSION['aantal'] = array(); }
  4.  
  5. if($add=="sess"){
  6. $naam = $_POST['naam'];
  7. $aantal = $_POST['aantal'];
  8. if($naam=="" || $aantal==""){ header("location: index.php?open=add"); } else {
  9. if(!isset($_SESSION['naam'])){ $next = 1; } else {
  10. $next = count($_SESSION['naam']) + 1; }
  11. $_SESSION['naam'][$next] = $naam;
  12. $_SESSION['aantal'][$next] = $aantal;
  13. header("location: index.php?open=add");
  14. } }
  15. elseif($remove=="all") { session_destroy(); header("location: index.php"); }
  16. else {
  17. ?>
  18. <html>
  19. <head>
  20. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
  21. <title>Untitled Document</title>
  22. </head>
  23. <body>
  24. <a href="?open=sess">Bekijk je sessions</a> | <a href="?open=add">Voeg session toe</a> | <a href="?remove=all">Verwijder de sessions</a>
  25. <?
  26. if($open=="add"){
  27. ?>
  28. <form method="post" action="?add=sess">
  29. <strong>Naam:</strong>
  30. <input name="naam" type="text" id="naam" size="18" maxlength="18">
  31. <br>
  32. <strong>Aantal:
  33. <input name="aantal" type="text" id="aantal" size="3" maxlength="3">
  34. <input type="submit" name="Submit" value="Voeg Toe">
  35. </strong>
  36. </form>
  37. <? } elseif($open=="sess") {
  38. echo "\n\n<br>";
  39. for($a=1;$a<=count($_SESSION['naam']);$a++){
  40. echo $a . ": " . $_SESSION["naam"][$a] . " [" . $_SESSION["aantal"][$a] . "]<br>\n";
  41. }
  42. } else { echo "<br>Klik op één van de bovenstaande links..."; }
  43.  
  44. echo "<br><br><br>Aantal sessions: " . count($_SESSION['naam']); ?>
  45. </body>
  46. </html><? } ?>


Voorbeeld op: http://www.dsound.nl/sess/
Offline CelestialCelebi - 19/10/2004 12:16
Avatar van CelestialCelebi PHP gevorderde @eerste bericht:

Dat kan en dat kan niet.

Je moet eerst die array "naam" defineren.

  1. <?php
  2. $_SESSION['naam'] = array();
  3. $_SESSION['naam'][0] = 'Pietje';
  4. $_SESSION['naam'][1] = 'Jantje';
  5. ?>


Maar als ik jou was zou ik duidelijkere benaming kiezen:
  1. <?php
  2. $_SESSION['aNames'] = array();
  3. ?>


En het gebruik van for of foreach (zonder (), want het zijn geen functies) maakt niet echt veel uit, alhoewel foreach niet wordt ondersteund in PHP 3..

Met een for-loop moet je wel een nummerieke index hebben en je moet vantevoren bepalen hoeveel keys er zijn. Bij een foreach lus hoeft dat allemaal niet.
Offline barry - 19/10/2004 12:23
Avatar van barry PHP interesse Dat doe ik toch ook... $_SESSION['naam'] = array();
of moet ik dat altijd doen voordat ik iets toevoeg aan de session?

  1. ...Met een for-loop moet je wel een nummerieke index hebben en je moet vantevoren bepalen hoeveel keys er zijn. Bij een foreach lus hoeft dat allemaal niet...

Ik ben het hier mee eens... maar de lus is in het script mijn probleem niet...
Offline Frisbee - 19/10/2004 12:32 (laatste wijziging 19/10/2004 13:00)
Avatar van Frisbee HTML beginner
  1. <?php
  2.  
  3.  
  4.  
  5. $_SESSION['test'] = array();
  6.  
  7. $_SESSION['test'][] = "bla";
  8. $_SESSION['test'][] = "blub";
  9. $_SESSION['test'][] = "boer";
  10.  
  11. for($i=0;$i<count($_SESSION['test']);$i++)
  12. {
  13. echo($_SESSION['test'][$i]);
  14. }
  15.  
  16. ?>


zo doet ie het bij mij.. maar met foreach krijg ik een fout.. da's wel vreemd
heeft iemand daar een verklaring voor? :S
Offline Thomas - 19/10/2004 13:12
Avatar van Thomas Moderator
  1. <?php
  2. $_SESSION['test'] = array();
  3. $_SESSION['test']['aap'] = 1;
  4. $_SESSION['test']['noot'] = 2;
  5. $_SESSION['test']['mies'] = 3;
  6.  
  7. $_SESSION['test2'] = array();
  8. $_SESSION['test2'][0] = 4;
  9. $_SESSION['test2'][1] = 5;
  10. $_SESSION['test2'][2] = 6;
  11. ?>
  12. <html>
  13. <title></title>
  14. <head>
  15. <body>
  16. <pre>
  17. <?php
  18. print_r($_SESSION);
  19. ?>
  20. </pre>
  21. <?php
  22. foreach($_SESSION['test'] as $k => $v) {
  23. echo $k." => ".$v."<br />";
  24. }
  25.  
  26. for($i=0; $i < count($_SESSION['test2']); $i++) {
  27. echo $i." => ".$_SESSION['test2'][$i]."<br />";
  28. }
  29. ?>
  30. </body>
  31. </head>
  32. </html>


Dit werkt bij mij allemaal... je doet dus echt wat fout.
Offline Frisbee - 19/10/2004 13:24
Avatar van Frisbee HTML beginner maar zo doet ie het niet:

  1. <?php
  2.  
  3.  
  4.  
  5. $_SESSION['test'] = array();
  6.  
  7. $_SESSION['test'][] = "bla";
  8. $_SESSION['test'][] = "blub";
  9. $_SESSION['test'][] = "boer";
  10.  
  11. foreach($_SESSION['test'] AS $test)
  12. {
  13. echo($test);
  14. }
  15.  
  16. ?>


dan krijg ik deze error:
Warning: Invalid argument supplied for foreach() in ..mapjesenzo../index.php on line 13
Offline Thomas - 19/10/2004 13:38
Avatar van Thomas Moderator Apart, dat werkt bij mij wel gewoon. Staat bij jou register_globals wel af? Anders haalt ie misschien $_SESSION['test'] en $test door elkaar...
Probeer die $test in "as $test" eens een andere naam te geven ?
Offline Frisbee - 19/10/2004 13:57
Avatar van Frisbee HTML beginner inderdaad dat was het!

zit hier op een nogal oude phpversie te werken :S

wordt tijd dat ie geupdate wordt 
Offline barry - 19/10/2004 14:25 (laatste wijziging 19/10/2004 14:27)
Avatar van barry PHP interesse Hey ja tnx FangorN en Frisbee...
:)
Ideaal...! 

Waar is alleen dat error_reporting(E_ALL); voor??:|
Offline Dennisvb - 19/10/2004 14:27
Avatar van Dennisvb MySQL ver gevorderde Die laat alle fouten zien die er op de pagina zijn.
Offline barry - 19/10/2004 14:32
Avatar van barry PHP interesse ow oke... (logisch eigenlijk... )
Offline barry - 19/10/2004 14:42 (laatste wijziging 19/10/2004 14:45)
Avatar van barry PHP interesse Oke... hier heb ik dan eindelijk het scriptje wat ik wou bereiken... voor eventueel een webshop ofzo...

  1. <?php
  2. //error_reporting(E_ALL);
  3.  
  4. $add = $_GET['add'];
  5. if($add=="more"){
  6. $next = $_GET['next'];
  7. if(!is_array($_SESSION['test'])){ $_SESSION['test'] = array(); }
  8.  
  9. $_SESSION['test'][$next] = "bla";
  10. header("location: shop.php");
  11. }
  12. elseif($add=="none"){
  13. header("location: shop.php");
  14.  
  15. }
  16. else {
  17. $a = 1;
  18.  
  19. if(!isset($_SESSION['test'])){ echo "Geen sessions...<br>"; } else {
  20. foreach($_SESSION['test'] AS $atest)
  21. {
  22. echo $a . ": " . $atest . "<br>"; $a++;
  23. } }
  24. $sessions = count($_SESSION['test']);
  25. $nextsess = $sessions + 1;
  26. echo "<br><a href=\"?add=more&next=$nextsess\">Toevoegen</a> | <a href=\"?add=none\">Wissen</a><br>";
  27. echo "Aantal Sessions: " . $sessions; }
  28. ?>


Voorbeeld: http://www.dsound.nl/sess/shop.php
Allen bedankt 
Offline Frisbee - 19/10/2004 15:51
Avatar van Frisbee HTML beginner nice, nu moet je eigenlijk ook nog iets maken waarmee je er een tussenuit kunt halen.

nog een kleine tip, het is goed om na de header, exit te gebruiken

zo dus:

  1. header("Location: shop.php");


dan wordt het script vanaf daar niet verder uitgevoerd.

en error_reporting(E_ALL); zorgt ervoor (zoals dennisvb alzei) dat alle fouten weergegeven worden. als je je script dan online zet kan je dat het best in error_reporting(0); zodat fouten helemaal niet worden weergegeven. dat is veiliger.
Offline barry - 20/10/2004 13:01
Avatar van barry PHP interesse Ja precies.. thnx Frisbee...
Daar kwam ik ok achter bij het testen Best handig opzich... maar eigenlijk ook weer niet...

Vandaar dat er bij mijn script ook // voor staat ;)


Als je ze allemaal ineens laat weergeven... kan je best 1tje eruit laten halen... hij heeft tóch een nummer dus ;)
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.377s