Gå til innhold

Pålitlighet i påmeldingssystem


Anbefalte innlegg

Jeg skal lage et påmeldingssystem for treninger. Hver trening har et tidspunkt og 10 plasser. Har følgede plan:

 

To tabeller:

Medlemmer: id|navn|epost|kode|bekreftet|treningId

Treninger: treningId|tid|antall_plasser|ant_ledige

 

Har flere php-sider:

En side med oversikt over treningene og en link "Meld meg på". Liken inneholder TreningId (GET-variabel)

 

Brukeren kommer da til en ny side hvor man fyller ut et skjema med navn osv. TreningId sendes som "hidden".

 

Så kommer brukeren til siste side hvor dataene lagres i databasen. Her sjekkes det først om det er ledige plasser (ant_ledige > 0), så dettes antall ledige plasser til 1 mindre. Kun dersom begge disse går bra lagres dataene i medlemstabellen.

 

Deretter sendes det en mail til brukeren med en link og kode for å bekrefte treningen.

 

 

Spørsmålet er da om hvordan jeg kan sikre med at dette blir pålitelig. Kan f.eks. flere enn 10 å melde seg på hvis pågangen blir stor i det påmeldingen starter? Andre ting jeg bør huske på?

 

Er det forresten nok å sjekke data fra brukeren med mysql_real_escape_string?

Lenke til kommentar
Videoannonse
Annonse

Hva hvis en person ønsker å melde seg på 2 treninger?

Ant_ledige er overflødig, du kan lett hente ut antall påmeldte til en trening og sjekke det mot antall plasser. På den måten slipper du problemer med at f.eks ant_ledige ikke blir oppdatert (brudd i transkasjoner, e.l).

 

I tillegg kan du få problemer hvis du sjekker om det er ledig plass, men så er det 10 stk som registrerer seg mens nr 11 driver å fyller ut skjema, osv. Du må enten reservere plassen i en gitt tid, eller du må ta en ny sjekk på om det er ledig plass like før du fullfører registreringen.

 

mysql_real_escape_string bør være nok, ja. :)

Lenke til kommentar
Hva hvis en person ønsker å melde seg på 2 treninger?

Ant_ledige er overflødig, du kan lett hente ut antall påmeldte til en trening og sjekke det mot antall plasser. På den måten slipper du problemer med at f.eks ant_ledige ikke blir oppdatert (brudd i transkasjoner, e.l).

Tok med "Ant_ledige" for å slippe å kjøre ekstra spørring for å sjekke om det var plass.. Men det er kanskje like greit å sjekke dette ved å spørre i meldemstabellen...? :hmm:

Nå må jeg jo kjøre to spørringer for å legge til/slette folk...

 

I tillegg kan du få problemer hvis du sjekker om det er ledig plass, men så er det 10 stk som registrerer seg mens nr 11 driver å fyller ut skjema, osv. Du må enten reservere plassen i en gitt tid, eller du må ta en ny sjekk på om det er ledig plass like før du fullfører registreringen.

Slik jeg har det nå sjekker jeg om det er ledige plasser... Men fortsatt kan vel egentlig flere enn 10 klare å melde seg på? (Selv om dette ikke er særlig sannsynlig) Påmeldingen burde vel vært atomisk..

 

Har nå dette for å registrere ny person:

//Kode for å ta imot data, sjekke at alle felt er fylt ut, og mysql_real_escape_string()...
//Deretter:
$query = mysql_query("SELECT id, ant_ledige FROM treninger WHERE id = $treningId");
$result = mysql_fetch_array($query);

if($result['ant_ledige'] == 0)
{
echo("Beklager, det er ikke flere ledige plasser på valgte time.<br>");
} else {          
$query2 = mysql_query("UPDATE treninger SET ant_ledige = ant_ledige-1 WHERE id=$treningId AND ant_ledige > 0");

 

Ang. to treninger har jeg tatt hensyns til dette. En epostadresse kan ikke være to ganger på samme trening. (Men kan ha to treninger på forskjellige tidspunkt)

Endret av EirikO
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...