# Facit prov 2 - webbserverprogrammering **Totalt: 22 poäng** *Godkänt: 7 poäng* 1. [1p] Alice, 18 2. [2p] `SELECT * FROM employees WHERE salary > 25000 ORDER BY salary DESC;` 3. [2p] En statuskod indikerar hur det har gått att processa en request, dvs om det har blivit något fel eller om allt har gått bra. Exempel: 200 betyder ok. 400 betyder fel på klient sidan. 500 betyder fel på serversidan. 4. [1p] C A C B 5. [2p] `localhost:3000/greet?name=johan` 6. [3p] ```javascript app.get("/square", function(req,res){ const sqr = req.query.num*req.query.num; res.send(sqr); }) ``` 7. [2p] Syftet med att normalisera sin databas är att minska risken för inkonsekvent data, dvs när två rader motsäger varandra. Normalisering gör det också enklare att bygga vidare och utveckla sin databas. 8. [2p] En SQL-injection är när en användare skickar med SQL-kod i ett inputfält. Då finns risk att koden körs mot databasen och gör skada. Man kan skydda sig genom att använda *prepared statements* vilket man kan göra genom att anropa .execute i mysql2 packet. 9. [2p] Skillnaden är att query-stringen skickas som en del av URL och bodyn skickas som en egen del av requesten. Man kan bara skicka en begränsad mängd data i query-stringen, så till exempel kan den användas för att skicka med info i vilken data man vill hämta. Bodyn kan användas för större mängder data, och också i olika filformat så den kan vi använda för bilder, filer eller större textmängder. 10. [2p] Felet är att parameterna till queryn inte ligger i en array, utan som seperata argument till .execute. Lösning: `connection.execute("...", [name,age], ...)` 11. [3p] Databasen uppnår **1NF** eftersom den bara har en bit information i varje kolumn, inga dubletter av rader och en nyckel i form av kurs+klass. Den når inte **2NF** eftersom kolumnen antal elever beror bara på klassen vilket är en *del av nyckeln* och inte hela nyckeln. En lösning för att nå 2NF är att ta göra en ny tabell med klass och antal elever.