Göm menyn

TDDD52 Webbprogrammering - grundkurs

2014

Laboration 3 - PHP

1. Syfte

  • Att förstå hur man kan använda PHP för att förenkla byggandet av en webbplats.
  • Att förstå att PHP exekveras på servern, innan klienten får sidan.
  • Att förstå hur man kan ersätta upprepande HTML kod med PHP.
  • Att förstå hur PHP kan användas för att ta emot data från formulär.

2. Genomförande

I föregående laborationer har ni skapat en webbplats med HTML, CSS och JavaScript. All den kod ni skrivit behandlas hos klienten. I denna laboration skall vi använda PHP för att exekvera kod hos servern.

2.1. Filer

I mappen "lab3" finns fyra filer: data.php, product.php, contact.php samt form.php. Förutom dessa fyra filer behöver ni kopiera index.html, animate.js, validate.js och stylesheet.css från "lab2". Ni ska alltså inte kopiera product1.html, product2.html, product3.html och contact.html.

  • När ni har kopierat alla filer så öppnar ni en terminal och exekverar: cd ~/www-pub/TDDD52/lab3
  • I samma terminalfönster exekverar ni bash -c 'for i in ./*.php; do ln -s "$i" "${i}s"; done;'
  • Det är ok att lägga till ytterligare funktioner till php filerna, men de funktioner som finns skall implementeras och användas.
  • Endast givna filer skall användas och inga filnamn får ändras. Inga andra filer får heller skapas. Det enda undantaget är att bilder får läggas till i denna mapp.

3. Webbplats med PHP - Generering och Validering

3.1 Kontaktformulär - Validering

Det kontaktformulär som ni har skapat skall nu skicka data till servern för vidare behandling. Detta gör vi genom att skicka data från contact.php till form.php.

  • Börja med att kopiera all kod från contact.html i "lab2" till contact.php i "lab3".
  • Formuläret skall skicka data med POST till form.php, som i sin tur skickar tillbaka till contact.php.
  • All data som skickats till servern skall valideras med PHP.
  • Ett tips kan vara att stänga av JavaScript valideringen medan man utvecklar PHP valideringen, men kom ihåg att sätta på den igen innan ni skickar för redovisning.
  • Skicka med en GET parameter med namnet "valid" och värdet "true" eller "false" tillbaka till contact.php.
  • I contact.php visar ni ett positivit meddelande i grön text (t ex "Meddelande skickat") eller negativt meddelande i röd text (t ex "Meddelande kunde inte skickas") beroende på GET variabeln "valid".
  • Formuläret skall tömmas när det har skickats.
  • Tänk på att den HTML kod som genereras av PHP koden skall valideras som HTML5 som i laboration 1.
  • Tänk på att uppdatera all navigering från alla sidor så att de pekar mot contact.php istället för contact.html.

3.2 Kontaktformulär - Val av produkt

Förutom att formuläret skall valideras av PHP så vill vi även generera produkterna som man kan välja från i kontaktformuläret.

  • I contact.php ska ni inkludera data.php.
  • Implementera funktionen "findAllProducts" i data.php och anropa sedan denna från contact.php.
  • I contact.php skall ni alltså använda det returnerade värdet från "findAllProducts" och generera form elementet där man väljer produkter.
  • Tänk på att den HTML kod som genereras av PHP koden skall valideras som HTML5 som i laboration 1.

3.3 Produktsidor

Era produktsidor skall se exakt likadana ut. Detta betyder att ni har upprepat HTML kod för att lyckas med detta på varje sida. Vi skall nu ersätta dessa tre HTML sidor med endast en PHP sida, som skall kunna visa alla produkter. Detta gör det lättare att ändra på sidorna i framtiden, och även att lägga till nya produkter.

  • När man går till product.php?id=1 så skall första produkten visas (dvs vi skickar med en GET parameter med namnet "id" och värdet 1 till product.php).
  • När man går till product.php?id=2 så skall andra produkten visas.
  • När man går till product.php?id=3 så skall tredje produkten visas.
  • För övrigt skall produktsidorna se exakt likadana ut som innan, men ni skall endast ha en PHP sida för att lyckas med detta.
  • Tänk på att bildspelet fortfarande skall fungera.
  • I product.php ska ni inkludera data.php.
  • I product.php skriver ni kod som presenterar den data som returneras från anrop till lämplig funktion i data.php.
  • Ni skall inte använda include/require på era existerande produktsidor. Det skall alltså bara finnas en php sida för att visa alla produkter.
  • Uppdatera er navigering på webbplatsen så att den nya produktsidan länkas till korrekt (dvs ni ska inte längre länka till product1.html, product2.html och product3.html).
  • Tänk på att den HTML kod som genereras av PHP koden skall valideras som HTML5 som i laboration 1.

4. Redovisning

Inlämning: Mejla till er laborationsassistent när webbplatsen har blivit publicerad till www-pub, den skall finnas tillgänglig på båda studenters konto. I ämnesraden skriver ni "TDDD52 - Laboration 3 - Redovisning". I mejlet skriver ni länken till er publicerade webbplats, era namn, liu-id och epost-adresser.

Muntlig: Laborationsassistenten kan ställa frågor till er angående er inlämning om det är något som kräver förtydligande.

4.1 Deadline

Soft: 2013/02/08

Hard: 2013/03/01

5. Litteratur

5.1 Böcker

  • Robert Sebesta - Programming the World Wide Web - Chapter 9
  • Gilmore, W. J. (2008). Beginning PHP and MySQL - From Novice to Professional. Apress.

5.2 Länkar

6. Kod

6.1 Felsökning

Vid fel i PHP-koden avbryts körningen och ibland visas ingenting på sidan - "allt blir bara vitt". För att få fram felmeddelanden så att man kan få reda på vad som är fel kan man skriva <?php ini_set("display_errors", 1);?> överst i koden.

Med ovanstående php kod kan man se vissa saker som har gått fel i koden, men om man vill ordentligt felsöka en fil måste man först skapa en ny .php fil med <?php ini_set("display_errors", 1); ?> överst och sedan inkludera den fil man vill felsöka med <?php require_once('product.php'); ?> Där man byter ut 'product.php' med den fil som man vill felsöka.

Man kan kommentera bort delar av PHP-koden och på så sätt genom uteslutning komma fram till vad det är som fungerar eller inte fungerar.
//kommenterar bort en rad
/* kommenterar bort flera rader
...
tills den avslutas med */


Sidansvarig: Jakob Bandelin
Senast uppdaterad: 2013-01-03