Ik zit met het volgende probleem. Ik wil zodra een pagina geopend wordt een nummer (bijv 1000) wegschrijven naar een txt-file. Dit moet een bestelnummer worden. De volgende keer moet dit nummer met een opgehoogd worden. Dit mag alleen gebeuren als het een andere sessie betreft. Een sessie heb ik al wel en dat nummer ook, maar ik weet niet hoe ik deze sessie moet koppelen het bestelnummer. Overigens lukt het me ook niet om het bestelnummer bij opening weg te schrijven naar het .txt bestand. Wie kan me helpen?
Voor het schrijven en lezen naar files gebruik je de volgende functies.
fopen, fwrite, fclose. Zie http://www.php.net/manual/nl/ref.filesystem.php voor meer info over files.
En misschien is het toch verstandig om een andere oplossing te kiezen. Het telkens schrijven naar een bestand lijkt mij niet helemaal thread save en kan leiden tot foutjes wanneer het bestand reeds in gebruik is en een ander er naar probeert te schrijven.
fopen, fwrite, fclose. Zie http://www.php.net/manual/nl/ref.filesystem.php voor meer info over files.
En misschien is het toch verstandig om een andere oplossing te kiezen. Het telkens schrijven naar een bestand lijkt mij niet helemaal thread save en kan leiden tot foutjes wanneer het bestand reeds in gebruik is en een ander er naar probeert te schrijven.
Ik dacht dat dus op te lossen door dat nummer te koppelen aan de sessie id!
Maar wat wil je nu precies met dat nummer gaan doen ? Is het voor een webwinkel ?
Misschien is er een vele makkelijkere oplossing. Wanneer het om een order nummer gaar kun je het gewoon de waarde geven van de auto_increment waarde van de rij die deze bestelling representeerd. Vertel ff wat meer dan is er misschien een andere oplossing.
Misschien is er een vele makkelijkere oplossing. Wanneer het om een order nummer gaar kun je het gewoon de waarde geven van de auto_increment waarde van de rij die deze bestelling representeerd. Vertel ff wat meer dan is er misschien een andere oplossing.
Verwijderd
Je schrijft het dus weg.. maar toch lukt het niet?
Neem daarbij dat een sessie uniek (mag je veronderstellen) en identiek blijft gedurende een sessie.
script request
Neem daarbij dat een sessie uniek (mag je veronderstellen) en identiek blijft gedurende een sessie.
script request
mee eens. Heb zelf het probleem al meerdere keren ervaren met die txt-files. Werkt voor geen meter. Je kan die nummering beter koppelen aan het ID van de desbetreffende sessie. En dat ID + het nummer tijdelijk wegschrijven in een database.En misschien is het toch verstandig om een andere oplossing te kiezen. Het telkens schrijven naar een bestand lijkt mij niet helemaal thread save en kan leiden tot foutjes wanneer het bestand reeds in gebruik is en een ander er naar probeert te schrijven.
Wanneer er dan nog een bezoeker komt laat je gewoon het hoogste nummer ophalen en doe je die met 1 verhogen
piece of spaceckae toch?
ok, ter verduidelijking. Het is voor een soort webwinkel. Wanneer er de pagina bestellen.php wordt geopend wordt er een sessie gestart (uniek). Op dit moment wil ik dat er ook een bestelnummer (of ordernummer, hoe je wilt) wordt aangemaakt, omdat het sessienummer te onduidelijk is om daarvoor te gebruiken. Deze moet beginnen met bijvoorbeeld 1000. De volgende bezoeker krijgt een andere sessie en moet dan 1001 krijgen enz. Dit getal moet dus weggeschreven worden naar een .txt bestand zodat die steeds opgehoogd kan worden. Een database is niet mogelijk. Maar ik wil voorkomen dat wanneer men naar een ander gedeelte van de pagina gaat en dan weer terugkomt dit bestelnummer weer opgehoogd wordt. Vandaar dat ik een koppeling wil met de sessie, maar ik weet niet hoe ik dat moet doen. Er moet dus een controle tussen komen.
Qua code heb ik nog niet zoveel:
Qua code heb ik nog niet zoveel:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
| <?php // hier wordt de sessie gestart, wordt ge-include include ("lib.php"); $sessie = session_id(); echo " $sessie "; $bestelnummer = "1000"; $fp = fopen("bestelnummer.txt", "w"); fwrite($fp, $bestelnummer); fclose($fp); |
Een methode is:
Sla sessieID + nummer op in een cookie
Bij het wegschrijven haal je de cookie op.
Is deze leeg: dan een nieuw nummer
Is deze niet leeg, maar opgeslagen sessieID <> huidige sessieID: nieuw nummer
Is deze niet leeg, opgeslagen SessieID = huidige SessieID: pak het nummer in de cookie.
Het nummer kan je waarschijnlijk wel opslaan in een soort application-variabele (kweenie of die bestaat in PHP), na succesvol invoegen tel je hier eentje bij op(of vlak voor het invoegen)
Sowieso hoop ik voor je dat het geen drukke webwinkel wordt met een tekstbestand (dat kan nogal 'leuke' dingen opleveren als 2 mensen tegelijkertijd een opdracht verzenden, verval van opdrachten enzo...
Sla sessieID + nummer op in een cookie
Bij het wegschrijven haal je de cookie op.
Is deze leeg: dan een nieuw nummer
Is deze niet leeg, maar opgeslagen sessieID <> huidige sessieID: nieuw nummer
Is deze niet leeg, opgeslagen SessieID = huidige SessieID: pak het nummer in de cookie.
Het nummer kan je waarschijnlijk wel opslaan in een soort application-variabele (kweenie of die bestaat in PHP), na succesvol invoegen tel je hier eentje bij op(of vlak voor het invoegen)
Sowieso hoop ik voor je dat het geen drukke webwinkel wordt met een tekstbestand (dat kan nogal 'leuke' dingen opleveren als 2 mensen tegelijkertijd een opdracht verzenden, verval van opdrachten enzo...
Digitaal onderwijsmateriaal, leermateriaal voor hbo
waarom laat je hem dan zodra je de pagina "bestellen.php" opent niet eerst even checken of de sessie nog bestaat? Als je in die sessie ook het nummer (1002 ofzow) ook opslaat moet het werken.
Of zoals gorgi_19 ook al zei, met cookies!!
Of zoals gorgi_19 ook al zei, met cookies!!
Ok ik heb nu voor elkaar dat ik een bestelnummer heb en die automatisch opgehoogd wordt bij het openen van "bestellen.php" Nadeel is nu dat elke keer wanneer hierop geklikt wordt bestelnummer opgehoogd wordt. Nu wil ik dat er een controle komt waarmee geregeld wordt dat het bestelnummer alleen opgehoogd mag worden, indien het een nieuwe sessieID betreft. Dus wanneer een persoon op bestellen.php komt wordt dit nummer gemaakt, wanneer hij dan naar een ander gedeelte gaat en weer terugkomt op bestellen.php mag het bestelnummer niet opgehoogd worden omdat hij nog in dezelfde sessie zit. Hoe zou ik dat kunnen controleren?
Dit is de bijbehorende php code:
ReadTableFile en WriteTableFile zijn functies die in een lib zijn ondergebracht. Verder heb ik een sessie die met $sessie ge-echood kan worden (waarschijnlijk overbodige info
)
Dit is de bijbehorende php 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
| //naam voot txt file bepalen $FileNameBestel = "bestelnummer.txt"; // (nieuwe) waarden van de array in de txt file schrijven $bestelnummer = ""; if (! $bestelnummer > 0 ){ if (file_exists($FileNameBestel)){ $TableBestel = ReadTableFile($FileNameBestel); $bestelnummer = $TableBestel["bestelnummer"][0]; echo "Bestelnummer:".$bestelnummer."<br>"; //print_r($TableBestel); } else { $bestelnummer = "1000" ; } $bestelnummer++; $TableBestel = array(); $TableBestel["bestelnummer"][0] = $bestelnummer; WriteTableFile("$FileNameBestel", $TableBestel); } |
ReadTableFile en WriteTableFile zijn functies die in een lib zijn ondergebracht. Verder heb ik een sessie die met $sessie ge-echood kan worden (waarschijnlijk overbodige info
Op onderstaande manier zou het moeten lukken. Het gaat om de eerste 5 regels.
Eerst start je de sessie, vervolgens ga je kijken of de variabele al in de sessie bestaat. Zo niet dan zet je hem. Dir garandeert je dat een bepaalde sessie altijd het zelfde nummer houd.
Is er echt geen mogelijkheid voor het gebruik van een database. Het kan anders erg lastig worden. Bij welke provider zit je ? Misschien kan interbase wel of iets anders. Maar zonder database wordt het heel erg moeilijk denk ik.
Eerst start je de sessie, vervolgens ga je kijken of de variabele al in de sessie bestaat. Zo niet dan zet je hem. Dir garandeert je dat een bepaalde sessie altijd het zelfde nummer houd.
Is er echt geen mogelijkheid voor het gebruik van een database. Het kan anders erg lastig worden. Bij welke provider zit je ? Misschien kan interbase wel of iets anders. Maar zonder database wordt het heel erg moeilijk denk ik.
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
| <? session_start(); if(!isset($HTTP_SESSION_VARS['bestelnummer'])){ session_register('bestelnummer'); $HTTP_SESSION_VARS['bestelnummer'] = getNewBestelNummer(); } function getNewBestelNummer(){ $bestelnummer = null; if (file_exists($FileNameBestel)){ $TableBestel = ReadTableFile($FileNameBestel); $bestelnummer = $TableBestel["bestelnummer"][0]; echo "Bestelnummer:".$bestelnummer."<br>"; //print_r($TableBestel); } else { $bestelnummer = "1000" ; } $bestelnummer++; $TableBestel = array(); $TableBestel["bestelnummer"][0] = $bestelnummer; WriteTableFile("$FileNameBestel", $TableBestel); return $bestelnummer; } ?> |
[ Voor 0% gewijzigd door vinnux op 01-08-2002 11:14 . Reden: Code verbeterd ]
Ik krijg een parse error. FF wat controleren:
Volgens mij moet er nog een ")" voor de eerste "{" en mag het ")" achter $HTTP_SESSION_VARS['bestelnummer'] weg!
Klopt??
PHP:
1
2
3
4
5
| session_start(); if(!isset($HTTP_SESSION_VARS['bestelnummer']){ session_register('bestelnummer'); $HTTP_SESSION_VARS['bestelnummer']) = getNewBestelNummer(); } |
Volgens mij moet er nog een ")" voor de eerste "{" en mag het ")" achter $HTTP_SESSION_VARS['bestelnummer'] weg!
Klopt??
PHP:
1
2
3
4
5
6
| session_start(); if(!isset($HTTP_SESSION_VARS['bestelnummer'])){ session_register('bestelnummer'); $HTTP_SESSION_VARS['bestelnummer'] = getNewBestelNummer(); } |
Ja klopt Sorry !
Ok het lijkt te werken. Ik heb de session_start(); en session_register('bestelnummer'); weggelaten omdat ik de sessie al startte via een include en daar ook de session_register() had staan. Dat gaat volgens mij zonder problemen goed. Ik ga nog ff het een en ander testen, maar bedankt tot zover!!
Pagina: 1