Slutprojekt – Stegen


Länkar

Stegen:

https://als070511lb.hemsida.eu/webbserver/projekt_stegen/stegen_1a/index.php?mess=logout

Csource:

https://als070511lb.hemsida.eu/webbserver/source.php?path=projekt_stegen/stegen_1a

Idé och syfte

Jag ska bygga en hemsida där man användare kan registrera sig och sedan spela turneringar mot varandra.

Mål

Målet med sidan ska vara att användare ska kunna skapa roliga turneringar mot varandra oavsett om det är för en kväll, över en helg eller fler månader. Det viktigaste är att allt fungerar och utseende och användarvänlighet kommer i andra hand men är ändå viktigt.

Kravspecifikation

En kravspecifikation ordnad i tre kategorier efter prioritet.

1. Ska:

  1. En ny användare ska kunna skapa ett konto.
  2. En gammal användare ska kunna logga in på sitt konto.
  3. Användare ska kunna skapa en ny stege och bjuda in andra användare på något sätt.
  4. Användare ska få en viss summa poäng när de går med i stegen.
  5. Användare ska kunna utmana varandra om poäng inom stegen på något sätt.
  6. Stegens poängsystem: båda spelarna lägger in en viss summa var i en pott.
  7. All information ska lagras i en databas.

2. Bör:

  1. Användare kan byta lösenord.
  2. Användare kan inaktivera sitt konto.
  3. Användare kan vara med i flera stegar samtidigt.
  4. Mängd spelare: Man kan välja att ha ett tak på hur många användare som kan vara med i stegen.
  5. Namn på stegen: Man kan välja ett namn på stegen.
  6. Antal Poäng: Man kan välja hur många poäng som varje användare får när dem går med i stegen.
  7. Öppen eller stängd: Om stegen är öppen kan användare även gå med i stegen efter att den startat. Om den är stängd kan användare inte gå med i stegen efter att den startat.
  8. Kort beskrivning: Man kan välja att skriva en kort beskrivning om vad just denna stegen handlar om.
  9. Stegskaparen ska kunna redigera stegeens inställningar under spelets gång.
  10. Spelare kan sortera matcherna på vunna, förlorade och aktiva matcher.
  11. Skaparen kan välja en viss tid stegen startar och slutar.
  12. Något poäng system som gör så att det naturligt kommer att bli en vinnare. (minimum procent/bet ökar eller liknande.)

3. Kan:

  1. Offentlig eller privat: Offentlig; andra användare kan gå med i stegen via en tabell med alla offentliga stegar, eller via en kod. Privat; andra användare kan bara gå med i stegen via en kod (eller möjligtvis att man bjuder in dem via ett användarId).
  2. Poängsystem: Att välja hur användare blir av med/får poäng.
    • Procent; Båda spelarna lägger in 10% av sina poäng i en pott, vinnaren tar allt.
    • Procent med minimum på 10% av startpoängen.
    • Fast summa
    • Fast summa med ökning
  3. Snygg (enligt mig) hemsida.
  4. Användarvänlig enligt måtten i webutveckling,

Planering

Jag kommer under hela projektet testa allt eftersom och göra ändringar om så behövs.

  • Göra en enkel kravspecifikation för att få en bild av vad som ska göras
  • Bygga upp en enkel Er-model av databasen
  • Skapa denna databas i vertabelo
  • Ladda ned denna databas till datorn
  • Börja skapa en första prototyp av hemsidan
  • Fortsätta att utveckla databasen och hemsidan efter kraven i kravspecifikationen
  • Färdigställa hemsidan
  • Testa allt på localhost så att allt fungerar
  • Ladda upp hemsidan och databasen till oderland
  • Testa allt igen och gör ändringar om så behövs

Utseende

Jag kommer ta stor inspiration från den bank uppgiften jag gjorde för att få utseende, färger, och en stabil grund att bygga vidare på.

Genomförande

Min första er-model :

Jag började med att bygga om banken till engelska. Sedan började jag bygga möjlighet att skapa stegar.

Fick problem med min gamla er-model och byggde en ny efter diskution med handledare.

Byggde sedan ut att användare kan bli spelare genom att gå med i stegar via en kod. Frågade ChatGPT efter en funktion som gör om index på stegen till en unik kod. Valde att ta bort vissa tecken för att undvika missförstånd. o, O, 0 till exempel.

Byggde sedan ut hela match systemet.

Det sista jag gjort precis nu är att fixa ett par små buggar och allmänt raffinaderierna sidan lite.

Slutgiltiga er-modellen:

Slutgiltiga databasmodellen:

Testning och kvalitetssäkring

Här redovisar du hur du testat att webbplatsen fungerar som den ska. Gör varje testmoment, visa testresultat med bilder och skriv en kort kommentar om resultatet.

Kodvalidering

Jag testade hemsidan https://www.bairesdev.com/tools/phpcodechecker/ för php kodvalidering och den sa att allt såg bra ut.

Jag validerade även hemsidans index.php via validator.w3.org. Jag vet inte riktigt hur det fungerar att validera html på resten av sidorna via denna sida.

Problem och lösningar

De svåraste var absolut att få ordning på alla sql-satser. I början var det mest kopiera och klistra från kursolle tills det var något som inte fungerade. Då frågade jag ChatGPT och fick ett par bra lösningar som jag sedan använde genom resten av arbetet. Efter ungefär halva arbetet kände jag att jag började få riktigt bra koll på sql-satser och då gick allt väldigt smutt.

Om man ska lyfta ett enkilt moment så fick jag problem när jag ville att sql-satsen skulle kolla i databasen efter en hel array med playerId’s. Men jag frågade chatgpt och fick ett väldigt bra svar. Att använda placeholders för att SGL-sattsen ska veta hur många variabler den ska kolla efter. Vet inte om detta är det bästa sättet att göra det på men det fungerar.

Resultat

Jag är nöjd med resultatet. Blev klar med alla 1.ska-mål och alla 2.bör-mål utom 2.9. Om jag skulle lägga mer tid på projektet så är det det första jag skulle ta tag i. Det finns såklart mer saker jag skulle kunna göra men jag är som sagt ändå nöjd med resultatet.

Skydd mot hacking och otilåten åtkomst:

Jag skyddar mig mot sql-injection genom att använda mig av pdo (PHP Data Objekts). Det protokollet gör så att sql frågan byggs upp innan man stoppar in informationen från användaren ohc på det sättet skyddar sig till en viss grad.

För att användare inte ska kunna skriva in skadlig html kod i saker som sedan skrivs ut på sidan använder jag mig av htmlspecialchars() som gör om alla html-tecken till andra tecken.

För att användare inte ska kunna komma åt sidor och delar av sidor de inte ska ha tillgång till kollar jag hela tiden att de är inloggade i $_SESSION[]. Jag validerar även att användare verkligen är med i stegar och matcher innan de kan ha tillgång till dem.

Alla lösenord lägger jag på olika salt på och krypterar dem sedan med sha1. Jag tänker att jag inte bör berätta vad saltet är här. Det vore ju en säkerhetsrisk. Detta gör så att det inte går att läsa några lösenord i databasen. När jag sparar cookies på datorn så krypterar jag även dem så att man inte kan se den information i klartext.

Utvärdering och reflektion

Arbetet gick bra i det stora hela. Jag tyckte att det var väldigt roligt att hålla på och fundera, vrida och vända på logiken kring databasen. Det jag känner är att det finns mer som jag skulle kunnat gjort men jag är ändå nöjd med produkten.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *