Toon posts:

[PHP] Arrays in sessie *

Pagina: 1
Acties:
  • 978 views

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hallo,

Ik ben al een tijdje opzoek om dit op een fatsoenlijke manier toe te passen maar het is me met de vele hits op google nog niet gelukt.

Ik ben bezig met een winkelmandje voor een webshop. Zodra ik bij het assortiment op toevoegen duw, wil ik dat het productid, aantal en klantid wordt door gestuurd naar een andere pagina. In deze pagina worden alle variabelen(productid, aantal en klantid) toegevoegd aan 1 sessie(het winkelmandje dus). Ik ben er al achter dat dit met een meerdimensionale array toegepast moet worden, maar hoe doe ik dit? Via google vind ik genoeg hits maar al deze hebben mij nog niet geholpen.

Bvd,
Jerome

Acties:
  • 0 Henk 'm!

  • MuisM4t
  • Registratie: Mei 2007
  • Niet online
Dit is toch wat je wil: http://www.webcheatsheet.com/PHP/multidimensional_arrays.php
Je verzend het met POST en dan stop je dus het product als array met daarin "id" en "aantal" in een array genaamd winkelmandje, die je weer opslaat in je sessie?

[ Voor 13% gewijzigd door MuisM4t op 31-10-2008 12:21 . Reden: zie de manier van mithras ]


Acties:
  • 0 Henk 'm!

  • Gonadan
  • Registratie: Februari 2004
  • Laatst online: 20:58

Gonadan

Admin Beeld & Geluid, Harde Waren
Één sessievariabele met de user ID en een sessievariabele met daarin een array met product ID als key en aantal als value?

Look for the signal in your life, not the noise.

Canon R6 | 50 f/1.8 STM | 430EX II
Sigma 85 f/1.4 Art | 100-400 Contemporary
Zeiss Distagon 21 f/2.8


Acties:
  • 0 Henk 'm!

  • mithras
  • Registratie: Maart 2003
  • Niet online
Verwijderd schreef op vrijdag 31 oktober 2008 @ 11:48:
Hallo,

Ik ben al een tijdje opzoek om dit op een fatsoenlijke manier toe te passen maar het is me met de vele hits op google nog niet gelukt.

Ik ben bezig met een winkelmandje voor een webshop. Zodra ik bij het assortiment op toevoegen duw, wil ik dat het productid, aantal en klantid wordt door gestuurd naar een andere pagina. In deze pagina worden alle variabelen(productid, aantal en klantid) toegevoegd aan 1 sessie(het winkelmandje dus). Ik ben er al achter dat dit met een meerdimensionale array toegepast moet worden, maar hoe doe ik dit? Via google vind ik genoeg hits maar al deze hebben mij nog niet geholpen.

Bvd,
Jerome
Waarom stuur je het klantid in het winkelmanje mee? Ga je er vanuit dat binnen een bepaalde sessie het winkelmandje gevuld kan worden door verschillende klanten?

Verder heb je niet een multidimensionele array nodig. Met nu maar twee variabelen, kan je een associatieve array maken:
PHP:
1
2
3
4
5
$items = array(
  3=>10
  10=>4,
  5=>1
  );
Hier heb je product# 3 10 keer, product#10 4 keer etc.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hallo,

bedankt voor de reacties. Het is me ondertussen gelukt om deze gegevens via een array in een sessie te schrijven op de volgende manier. (sorry ik weet niet hoe ik dat php veld gebruik):

for ($a=0; $a<1; $a++){
$shop = array( array("rij:", $productid , $klantid, $aantal)

);
}
echo "<h1>Check dit swa!!!</h1>";
for ($a=0; $a<1; $a++){
$_SESSION[winkelmand] .= $shop[0][0]." productid: ".$shop[0][1]." en klantid: ".$shop[0][2]." Aantal:".$shop[0][3]."<br />";
}

Dit werkt tot nu toe goed op de manier die ik wil. Er worden producten aan toegevoed namelijk.
Maar hoe schrijf ik deze sessie weg in de database?

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 15:19

Janoz

Moderator Devschuur®

!litemod

Dat lijkt me iig NIET de manier om dit toe te passen. Formatering moet je pas doen op het moment dat je de boel gaat weergeven.

Het 'php veld' is redelijk simpel. Gewoon [ php] aan het begin zetten en [/ php] aan het einde (maar dan zonder de spatie)

[ Voor 32% gewijzigd door Janoz op 31-10-2008 13:20 ]

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Patriot
  • Registratie: December 2004
  • Laatst online: 13:00

Patriot

Fulltime #whatpulsert

Verwijderd schreef op vrijdag 31 oktober 2008 @ 13:12:
Hallo,

bedankt voor de reacties. Het is me ondertussen gelukt om deze gegevens via een array in een sessie te schrijven op de volgende manier. (sorry ik weet niet hoe ik dat php veld gebruik):

PHP:
1
2
3
4
5
6
7
8
9
for ($a=0; $a<1; $a++){
$shop = array( array("rij:", $productid , $klantid, $aantal)
              
             ); 
 }
echo "<h1>Check dit swa!!!</h1>";
for ($a=0; $a<1; $a++){
$_SESSION['winkelmand'] .= $shop[0][0]." productid: ".$shop[0][1]." en klantid: ".$shop[0][2]." Aantal:".$shop[0][3]."<br />";
}


Dit werkt tot nu toe goed op de manier die ik wil. Er worden producten aan toegevoed namelijk.
Maar hoe schrijf ik deze sessie weg in de database?
Je was de quotes om winkelmand vergeten

Om te weten hoe je je code in zo'n vak zet, lees je even de UBB-faq.

Ik zou je afraden om het op die manier in je sessie te zetten. Je kunt beter een array maken waarin je die waarden zet, zodat je er later veel makkelijker iets mee kan. Als je namelijk later nog de gegevens uit die sessie wil gebruiken, moet je op een heel omslachtige manier die gegevens eruit halen.

Hoe je het in de database moet zetten is iets wat ik niet zomaar kan beantwoorden. Ben je überhaupt bekend met databases, of is dat allemaal nieuw? Als dat nieuw is, kun je het beste even gaan googlen naar goede tutorials om te leren wat voor databases er zijn en hoe je die gebruikt i.c.m. PHP.

offtopic:
Hehe, "check dit swa!!"? :+

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hoe moet ik dit dan wel doen? als het goed is begrijp je nu wel wat ik wil doen
bij deze nog eens de code:
PHP:
1
2
3
4
5
6
7
8
9
for ($a=0; $a<1; $a++){
$shop = array( array("rij:", $productid , $klantid, $aantal)
              
             ); 
 }
echo "<h1>Check dit swa!!</h1>";
for ($a=0; $a<1; $a++){
$_SESSION[winkelmand] .= $shop[0][0]." productid: ".$shop[0][1]." en klantid: ".$shop[0][2]." Aantal:".$shop[0][3]."<br />";
}

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 15:19

Janoz

Moderator Devschuur®

!litemod

Hoe wil je nu de bestelling weer uit je sessie halen? Hoe wil je nu achterhalen wat het klant id is? Hoe wil je nu achterhalen hoeveel welke klant van welk product besteld heeft? Hoe wil jij iets uit het winkelmandje gaan halen? Hoe wil je een aantal van een specifiek product aanpassen?

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Patriot schreef op vrijdag 31 oktober 2008 @ 13:21:
[...]

Je was de quotes om winkelmand vergeten

Om te weten hoe je je code in zo'n vak zet, lees je even de UBB-faq.

Ik zou je afraden om het op die manier in je sessie te zetten. Je kunt beter een array maken waarin je die waarden zet, zodat je er later veel makkelijker iets mee kan. Als je namelijk later nog de gegevens uit die sessie wil gebruiken, moet je op een heel omslachtige manier die gegevens eruit halen.

Hoe je het in de database moet zetten is iets wat ik niet zomaar kan beantwoorden. Ben je überhaupt bekend met databases, of is dat allemaal nieuw? Als dat nieuw is, kun je het beste even gaan googlen naar goede tutorials om te leren wat voor databases er zijn en hoe je die gebruikt i.c.m. PHP.

offtopic:
Hehe, "check dit swa!!"? :+
Ik heb al van alles geprobeerd met die arrays, dus ik ben al blij dat het nu werkt. Maar hoe moet ik dit idee wat ik nu heb laten zien uitvoeren zodat het wel volgens de juiste methode gaat?
Met databases ben ik bekend(SQL).

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Janoz schreef op vrijdag 31 oktober 2008 @ 13:29:
Hoe wil je nu de bestelling weer uit je sessie halen? Hoe wil je nu achterhalen wat het klant id is? Hoe wil je nu achterhalen hoeveel welke klant van welk product besteld heeft? Hoe wil jij iets uit het winkelmandje gaan halen? Hoe wil je een aantal van een specifiek product aanpassen?
Hoe wil je nu de bestelling weer uit je sessie halen? dit is een beetje mijn vraag :p.
Hoe wil je nu achterhalen wat het klant id is? is op dit moment nog niet echt belangrijk voor mij. Klantid staat sowieso al in een sessie dusss.
De andere vragen heb ik niet echt een antwoord voor.

Ik wil eigenlijk gewoon weten hoe ik mijn stukje php wat ik gepost heb volgens de juiste methode neer moet zetten. En deze gegevens weer eruit haal voor in de databse te zetten.

Alvast bedankt!!

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 15:19

Janoz

Moderator Devschuur®

!litemod

Je maakt er nu een string van. Een stukje tekst. Dat is precies de reden waarom je mijn vragen niet kunt beantwoorden. Waarom maak je er een stuk tekst van? Je kunt ook gewoon een array in je sessie op slaan.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Als ik je goed begrijp zou het dan op de volgende manier moeten.
PHP:
1
2
3
4
for ($a=0; $a<1; $a++){
$shop = array( array("rij:", $productid , $klantid, $aantal));
$_SESSION[winkelmand]=$shop;            
             }

is dit het idee? of ben ik nou helemaal verkeerd bezig. Hij werkt wel niet op de manier btw. De echo die ik hiervan krijg is letterlijk "Array", maar dit zal wel een fout ergens zijn van mij

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 15:19

Janoz

Moderator Devschuur®

!litemod

En juist bij de echo moet je hetgeen neerzetten dat je eerder in je sessie wilde proppen. Dat is namelijk het formateren van je data en dat hoor je pas te doen op het moment dat je het aan de gebruiker toont.

Je zult alleen nog wel even het probleem op moeten lossen dat er meerdere producten in je sessie gestopt kunnen worden. Nu wordt het telkens overschreven.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Oké, ik snap wat je me probeert te vertellen. Alleen weet ik niet hoe ik dit ook daadwerkelijk moet uitvoeren. Het laatste probleem overigens ben ik mij van bewust.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik ben ondertussen weer verder. Het lukt mij nu om de array aan de sessie toe te voegen en in de winkelmand pagina de juiste echo te laten zien. Alleen zit ik nu nog met het probleem dat de sessie hele tijd overschreven wordt. Iemand een oplossing hiervoor?

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 15:19

Janoz

Moderator Devschuur®

!litemod

Probeer eerst eens uit te zoeken en ook te begrijpen waarom dat gebeurt. Een goed begrip van het probleem is vaak al meer dan de helft van de oplossing.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik snap waarom het gebeurt. Iedere keer zodra je wat wegschrijft vervang je de gegevens als het ware. Ik moet dus een teller hebben die automatische een rij verder gaat. toch???

maar hoe ik dit uitvoer weet ik ff niet. Als iemand hier een voorbeeld van heeft zou dit best wel fijn zijn.

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 15:19

Janoz

Moderator Devschuur®

!litemod

1 probleem tegelijk :D

Inderdaad. Je zult iets moeten hebben wat verder gaat.

http://nl.php.net/manual/en/language.types.array.php

Let vooral op het stukje waar wordt beschreven wat er gebeurt wanneer je geen getal tussen de haken opneemt. $shop[]

Voor je tweede probleem is het handig om eens te experimenteren met http://nl.php.net/manual/en/control-structures.foreach.php .

Wat ik je wel als tip mee wil geven is even een apart php bestandje maken en hierin te pielen met wat arrays en foreach lusjes om een beetje gevoel te krijgen met hoe het nu eigenlijk werkt. Wanneer je in je shop blijft pielen weet je op een gegeven moment niet meer wat nu wel werkt en wat nu niet werkt.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hmmm, ik kom er zo niet uit. Andere "Hints"?

Acties:
  • 0 Henk 'm!

  • steffex
  • Registratie: Augustus 2003
  • Laatst online: 12-08 00:24
Zoals Janoz zegt is het slim om probeersels buiten je applicatie om te doen, weet je zeker dat wat je tot nu toe gemaakt hebt blijft werken :)

Verder zou ik geen opmaak in je sessie gaan wegschrijven! die sessie moet je proberen zo schoon mogelijk te houden.
ik heb het dus over deze regel:
PHP:
1
$shop = array( array("rij:", $productid , $klantid, $aantal));


Tevens is de manier waarop je door een array heen loopt ook niet echt handig, daarvoor zou ik kijken naar "foreach".

Ik wil je niet de grond in stampen of beledigen, maar je moet wel realistisch blijven...
ik zou een boek kopen over het programmeren in php... want ik wens je succes met het bouwen van een shop als je al moeite hebt met iets simpels als het gebruik van arrays in een sessie. ;)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb op het moment al alle opmaak uit mijn sessie gehaald. Dit is trouwens een opdracht voor school, ik heb een boek over php maar arrays worden hier erg kort in beschreven. Voor de rest heb ik weinig problemen met php. Ik moet het gewoon een keer gezien hebben wat voor mij van toepassing is. Zo heb ik namelijk alles geleerd van php.

Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op vrijdag 31 oktober 2008 @ 16:52:
Ik heb op het moment al alle opmaak uit mijn sessie gehaald. Dit is trouwens een opdracht voor school, ik heb een boek over php maar arrays worden hier erg kort in beschreven. Voor de rest heb ik weinig problemen met php. Ik moet het gewoon een keer gezien hebben wat voor mij van toepassing is. Zo heb ik namelijk alles geleerd van php.
De link die Janoz een paar berichten terug heeft geplaatst, laat je alles zien wat je nodig hebt...

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik krijg de functie foreach wel redelijk simpel aan het werk in een array, maar in een mulitdimmensionale is het nog ff proberen.

Acties:
  • 0 Henk 'm!

  • Deviruchi
  • Registratie: December 2006
  • Laatst online: 20-09 21:58
Verwijderd schreef op vrijdag 31 oktober 2008 @ 17:16:
Ik krijg de functie foreach wel redelijk simpel aan het werk in een array, maar in een mulitdimmensionale is het nog ff proberen.
Misschien handig om te vermelden dat je een foreach (net als eigenlijk alle control structures) kan nesten, dus je kan een foreach binnen een foreach uitvoeren. Op die manier kun je ook een multidimensionale array helemaal uitpluizen en eruit halen wat je nodig hebt.

Sowieso is het verstandig goed te begrijpen wat een array is en hoe je er mee kunt werken, aangezien arrays veel gebruikt worden en je het beter nu kunt leren dan er later achter komen hoeveel tijd het je heeft gekost door alles met variabelen te doen (als dat al kan ;)). Hiervoor kun je het beste even de linkjes bekijken van Janoz.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hallo,

Na een weekend pauze te hebben gehad ben ik vandaag maar weer eens verder gegaan. Zoals werd aangeraden heb ik een uitgebreider boek gekocht over php, maar hier word naar mijn ziens dit toch niet behandeld.

Ik heb nu het volgende

PHP:
1
2
3
4
5
6
$arr = array($klantid,$productid,$aantal);


foreach ($arr as $value) {
print_r ($value);
}


De vraag die ik nu eigenlijk nog heb is. Hoe zorg ik ervoor dat de gegevens niet overschreven worden en dus de array verticaal word aangevuld. Ik heb toch het idee dat ik dit niet kan vinden in dit topic, of ik lees over iets essentieels.

bvd

Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Waarom wil je klant id opslaan in je array? Die heb je toch elders in je code (tijdens de validatie oid) toch al beschikbaar?

En verder kun je naar mijn idee in dit simpele geval t makkelijkst een array maken met als key je product id, en als value het aantal. Je maakt gewoon een simpele klasse met een functie om een product toe te voegen. Je script checkt of je dat product al hebt, is dat zo dan hoog je de value 1 op, anders voeg je em in met value 1. Denk dat ik je zo n aardige duw heb gegeven in een richting van een oplossing voor jou.

Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 16:35

MueR

Admin Tweakers Discord

is niet lief

Als je wilt dat waarden niet worden overschreven, zul je de keys moeten namen.
PHP:
1
2
3
4
5
$arr = array(
  'klantid' => $klantid,
  'productid' => $productid,
  'aantal' => $aantal,
);

En dus vervolgens gewoon aanroepen met $arr['klantid']. Als je vervolgens zelf de waarde overschrijft, ben je een knuppel :+

Verder: lees de manual eens door.

[ Voor 9% gewijzigd door MueR op 03-11-2008 11:41 ]

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Cartman! schreef op maandag 03 november 2008 @ 11:40:
Waarom wil je klant id opslaan in je array? Die heb je toch elders in je code (tijdens de validatie oid) toch al beschikbaar?

En verder kun je naar mijn idee in dit simpele geval t makkelijkst een array maken met als key je product id, en als value het aantal. Je maakt gewoon een simpele klasse met een functie om een product toe te voegen. Je script checkt of je dat product al hebt, is dat zo dan hoog je de value 1 op, anders voeg je em in met value 1. Denk dat ik je zo n aardige duw heb gegeven in een richting van een oplossing voor jou.
Even voor de duidelijkheid De variabele die er nu instaan kloppen indd nog niet helemaal. Klantid gaat indd nog eruit maar er worden meer toegevoegd zoals soort. Het woorden er minimaal 3. Hier hoeft dus even niet op gelet te worden. Dit is puur als voorbeeld.

Even over de functie die jij aangeeft. Als ik het goed begrijp wil jij dus iedere keer als ik een product toevoeg. Deze de key met een verhoogt en deze dus in een nieuwe regel toevoegd. Opzich is me dat duidelijk.

Aangezien het waarschijnelijk toch een 2d array wordt zal het in mijn ogen dan zo uitzien

PHP:
1
2
$t++;
$arr= array( [$t] = array( [0] =>$productid,[1]=>$aantal,[2]=>$soort))

???

Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 16:35

MueR

Admin Tweakers Discord

is niet lief

Een van de mooie dingen van arrays is dat numeric keys automatisch worden opgehoogd.

PHP:
1
2
3
4
5
$array = array();
$array[] = 'boe'; // key: 0
$array[] = 'schrik'; // key: 1
$array[] = 'foo'; // key: 2
$array[] = 'bar'; // key: 3


Maar dit is wel dusdanig basiskennis van de beginselen van het programmeren dat ik me af begin te vragen of je uberhaupt wel moet verder gaan met het bouwen van een webshop.

Overigens levert je voorbeeld in je laatste post een heel dikke parse error op.

[ Voor 31% gewijzigd door MueR op 03-11-2008 13:11 ]

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Je krijgt uiteindelijk dit zegmaar:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php

$arrCart = array();
$arrCart[1] = 1;
$arrCart[5] = 1;
$arrCart[12] = 3;

print_r($arrCart);

/*
Array
(
    [1] => 1
    [5] => 1
    [12] => 3
)
*/


1,5,12 = product id's en de values zijn de bestelde aantallen. Is echt ontzettend simpel...

[ Voor 3% gewijzigd door Cartman! op 03-11-2008 13:23 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Webshop bouwen is geen keuze, maar een opdracht voor school. Ik heb al een aantal manuals over arrays erop nageslagen. En ik vind mijn essentieële fout gewoon niet. Wat ik wil weten is het volgende.

Ik wil:
(voorbeeld)
PHP:
1
2
3
4
5
6
<?php 
$shop = array( array("rose", 1.25 , 15),
               array("daisy", 0.75 , 25),
               array("orchid", 1.15 , 7) 
             ); 
?>


Zoals je ziet worden hier 3 rijen en 3 kolommen aangemaakt. Nou wil ik iedere keer als ik op de verwerkingspagina kom, dat die rijen automatische worden aangemaakt. In dit geval is het namelijk hard erin gezet. Kan iemand mij hier iets concreets over zeggen. Ik ben namelijk al te lang hiermee bezig, en snap hierin iets essentieëls niet.

Begrijp me niet verkeerd, ik ben niet op zoek naar een quick fix. Maar als iemand mij die paar regels php kan laten zien is het probleem opgelost. Ik ben best bereid om wat te lezen maar het dringt gewoon niet tot me door.

Alvast bedankt!

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 15:19

Janoz

Moderator Devschuur®

!litemod

Het punt is dat je al meerdere keren naar documentatie gestuurd bent waar dit op vermeld staat. Daarnaast is sowieso al 1x in deze thread letterlijk benoemd hoe je een element aan het einde van een array toevoegt. Het enige dat je zelf hoeft te bedenken is dat een element zelf ook weer een array kan zijn.

Zonder een kant en klare oplossing te geven kunnen we onmogelijk meer hints, tips en oplossingsrichtingen aangeven. Misschien is het een idee om eens naar je docent te stappen en hem het probleem voorleggen.

Dit topic loopt uit op een 'bij het handje neem' topic en dat is niet helemaal de bedoeling.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'

Pagina: 1

Dit topic is gesloten.