Na de geweldige hulp gisteren van Arjan (zie: Deel 1) heb ik nu dus de tickets in de database. Ik heb vandaag een "valid" record toegevoegd aan de table met default set to 1. Daarmee zijn alle tickets valid.
Nu zit ik te zoeken hoe ik een valid ticket uit de database kan halen en vervolgens het valid record op 0 kan zetten voor dat ticket waardoor het de volgende keer niet meer uitgegeven zal worden.
Wat bedoel je met transactie?
Als betaling transactie bedoeld dan gebruik ik daarvoor de voorbeeld scripts van mollie ik zet dan jouw voorbeeld in de pay.php
althans dat ga ik nu erin proberen te verwerken brrr
Even kijken hoe ik dit simpel kan uitleggen, met een transactie kan je enkele querys 'aan elkaar koppelen', zodat als er ergens iets fout gaat de hele boel word teruggedraaid.
Stel je koopt Fortis over voor een paar tientjes en je besluit de software opnieuw te gaan schrijven. Bij een transactie heb je twee querys, eentje om het geld van mijn jouw bankrekening af te halen en eentje om dat bedrag vervolgens bij iemand anders bij te schrijven. Als die tweede querys mislukt is het geld al wel van jouw bankrekening afgehaald (!). Vandaar dus transacties, dan kan je de eerste query ongedaan maken.
Ikzelf gebruik op dit moment Codeigniter, een PHP framework. Transacties zitten daar al standaard ingebakken.
Als alle querys gelukt zijn worden ze toegepast (commit) en als er ergens iets fout gaat worden ze teruggedraaid (rollback).
Hopelijk begrijp je nu waarom ik dit meedeel; tussen de eerste query (het ophalen van een record) en de tweede (het updaten van dat record) zit weliswaar een ongelofelijk kleine hoeveelheid tijd maar stel je voor dat er twee mensen op exact hetzelfde moment een ticket aanvragen... dan krijgen ze allebei eenzelfde ticket!
Ikzelf gebruik op dit moment Codeigniter, een PHP framework. Transacties zitten daar al standaard ingebakken.
Transacties zitten in je database en niet in een PHP-framework. De database zal dus transacties moeten ondersteunen, het overbekende MySQL met de zeer populaire MyISAM-engine ondersteunt bijvoorbeeld géén transacties! En je kunt daar transacties op loslaten tot je een ons weegt, de MySQL database verrekt het om je daar ook maar 1 foutmelding op te geven. Op een verkeerd moment kom je dan ook van een koude kermis thuis...
Gebruik in MySQL uitsluitend innoDB anders heb je geen transacties tot je beschikking. Ook niet wanneer je een framework gebruikt die een schil om transacties heeft gezet, het is de database die transacties regelt/zou moeten regelen.
hmm ja dat zou een probleem kunnen zijn inderdaad.
De kans dat dat gebeurd is denk ik niet zo groot.
Als ik zoveel users heb dat dit soort problemen zich vaker voordoen dan kan ik ook al wel een pro betalen.
Voor mij is het allemaal ongelooflijk ingewikkeld ik ben al blij als dit allemaal ook maar een klein beetje gaat werken zodat mensen zelf een ticket kunnen aanschaffen.
Ik zal proberen een en ander te optimaliseren en zo mijn kennis groter te maken. Als ik ooit op het nivo kom dat ik zoiets kan maken zoals jij uitlegt dan zal ik dat zeker gaan toepassen maar voorlopig eerst nog maar even wat basic dingen eigen maken.
Als ik al eens weet hoe je precies fatsoenlijk een simpele php script maakt ben ik al een heel eind.
Maar ik kom er niet uit waar ik de database table moet invullen en waar welke records etc
Mijn database heet dus test (deze word geselcteerd in connect.php)
Dan de table in test heet vouchers waarin ik 3 velden heb te weten "id", "tickets" en "valid". Waar zet ik nu wat neer om bovenstaand te laten werken?
Niet Bumpen:
Twee of meer keer achter elkaar in een topic posten heet bumpen. Bumpen is pas na 24 uur toegestaan en kan een reden zijn voor de admins en moderators om een topic te sluiten. Gebruik indien nodig de knop om je tekst aan te passen.
Ik probeer het te begrijpen
Ik log in in phpmyadmin ga de database "test" in en druk op SQL in het menu en plak daarin Echo $query dat lever het volgende op
MySQL retourneerde: Documentatie
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Echo $query' at line 1
Ik doe dus wat vekeerd
Ik klik op table vouchers dan op de SQL knop
dan verschijnt er:
MySQL retourneerde: Documentatie
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Echo $query' at line 1