Leif Andersson  Henriksbergsvägen 104   136 67 Vendelsö   2010-03-25

OM PHP

Inledning ========= I domänen lexsup.se ingår MySQL som kan hanteras med PHP. Jag har nu börjat använda detta. Samtidigt har min dotterson Andreas haft som skoluppgift att göra en hemsida baserad på en databas och PHP. Jag har därför haft möjlighet att använda även hans arbete. Det är bara när man för första gången använder något som man förstår vad som är svårt att förstå. När man väl lärt sig hur man gör blir detta självklart och man tappar förmågan att förstå varför inte alla vet hur man gör. Jag tänkte därför berätta lite om vad jag skulle ha velat få raka svar på när jag började använda PHP. För att inte < och > skall tolkas som html-taggar där detta inte är avsikten lägger jag mellanslag runt dem. Dessa mellanslag skall alltså tas bort om de skall fungera som taggar. Krav på servern ============ För att kunna använda php krävs att man kan lägga php-filerna på en server som har en php-tolk. Har man det laddar man upp filerna på servern med ett ftp-program på samma sätt som man gör med html-filer. Vad gör en .php - fil? ====================== När en browser anropar en html-fil (.htm eller .html) tas filen direkt in i browsern som tolkar den enligt de regler som gäller för html. När en browser anropar en php-fil går den genom en php-tolk som skapar en html-fil som skickas till browsern. Om man i en php-fil skriver en vanlig html-fil med inledande < html > och avslutande < /html > kommer php-tolken att göra om den till en likadan html-fil som skickas till browsern som anropat php-filen. Så långt är det ingen poäng med php. Det är ju enklare att skriva html-texten direkt i en .htm-fil. Men finessen är att man i .php-filen kan skjuta in script-avsnitt som php-tolken hanterar och använder för att modifiera den html-fil som den skickar vidare. Ett avsnitt med php-script skrivs mellan avgränsningarna < ?php och ? > . Man kan också använda < ? och ? > . Att skriva från php-script till html-filen ========================================== Det som står inom php-avgränsningarna sänds inte till utgående html-fil om man inte uttryckligen anger det. För att sända något till html-filen använder man echo (eller print). Om man skriver följande i filen prov.php : ****************************************** < html > < pre > Detta är ett första prov. < ? echo "Hej på dig" ? > < /pre > < /html > ****************************************** och lägger den på en server med php-tolk kommer Detta är ett första prov. Hej på dig att skrivas ut på en browser som anropar filen. (Tänk på att ta bort mellanslagen runt < och > om du provar koden!) echo sänder alltså strängen "Hej på dig" inifrån php-scriptet till utgående html-fil. Även om inte php-tolken skickar något inifrån php-scriptet till utgående html-fil får det inte finnas fel i scriptet. Om php-tolken fastnar på något fel visas ingen html-sida. Variabler ======== Variabler i php heter $ följt av engelska bokstäver, understryckningstecknet _ eller siffror. Första tecknet efter $ får inte vara en siffra. Variabler behöver inte deklareras. De skapas när man tilldelar dem ett värde. Formulär och php ================ En viktig uppgift för php är att ta hand om data som sänds med formulär. I en html-fil kan man lägga in formulär som kan sända data. Ett sådant formulär kan anropa en php-fil som tar emot översända uppgifter och behandlar dem innan de skickas till en utgående html-text. För att prova detta kan du göra på följande sätt: Markera nedanstående kod mellan strecken och kopiera den med ctrl-C. ************************************************** < html > < pre > Detta är provsida prov1.htm < form action="prov2.php" method="POST" > < input type="text" name="namn" value="Kalle Anka" > < input type="submit" value="Skicka" > < /pre > < / html > ************************************************* Öppna LexSup (kan laddas ner från Svensk Lexikoncentral). Klistra in koden i Utfilrutan, Klicka på "Lexikonval" och på "Stäng Lexikon2" Klicka på "Arkiv" och på "Spara oformaterad Utfil". Spara filen som prov1.htm i någon lämplig mapp. Klicka på "Internet". Om det då kommer fram en ruta där det står "Öppna direktspar" klickar du där så att där står "Stäng direktspar". Då klickar du på "Browse". Du får då fram en dialogruta där filen prov1.htm redan är vald. Det är bara att klicka på "Öppna". Du skall då få en nedsänkt Browserruta och en varningstext som varnar för att alla ändringar i Utfilrutan direkt skriver över Utfilen I Browserrutan kan du direkt se hur en browser tolkar din kod. Och du kan prova att ändra koden och se hur det påverkar reaultatet i browsern. När du är nöjd laddar du upp filen prov1.htm på din hemsida. Kopiera nu koden mellan nedanstående streck. Öppna LexSup på nytt och klistra in koden i Utfilrutan. ********************************************** < html > < pre > Detta är provsida prov2.php Jaså, du heter < ? echo $_POST['namn'] ? > . < /pre > < / html > ********************************************** Spara filen via "Arkiv" "Spara oformaterad Utfil" som prov2.php. Även nu kan du via "Internet" på huvudmenyn öppna Browserrutan men eftersom det inte finns någon php-tolk på din dator som kan tolka den här php-filen ser du där bara de delar som ger html-text utan någon tolkning. Men en del grova fel kan du kanske ändå upptäcka genom att öppna Browserrutan. Ladda upp php-filen på din hemsida i samma mapp som prov1.htm. Om du nu går in på din hemsida och går till prov1.htm får du möjlighet att skriva in ett namn. När du klickar på "Skicka" skickas detta namn till php-filen som svara med en html-sida där det står: *************************************** Detta är provsida prov2-php Jaså, du heter Namnuppgift. **************************************** Ett formulär kan sända data via två metoder, POST eller GET. Vid GET skickas adressen följd av ett ? och därefter den datasträng som skall överföras. Man kan alltså i browserns adressfönster se vad som sänds inklusive lösenord och dylikt. GET är också begränsad till en sträng på 100 tecken. En fördel med GET är att man kan skicka med en datasträng på annat sätt än via ett formulär. Om man till exempel i prov1.htm lägger länken < a href="prov2.php?namn="Kalle Anka" > Till php-filen prov2 < /a > lägger upp prov1.htm på servern och klickar på länken kommer prov2.php att anropas med datasträngen i anropet. I ett php-avsnitt i prov2.php kan då namnet hämtas som $_GET[namn]. PHP och databas ============ En html-fil kan via ett formulär skocka frågor till en php-fil som tar emot frågorna och använder dem för att hämta svar i en databas. php-filen kan så skicka svaren till en utgående html-fil som den frågande browsern kan ta emot. För att detta skall fungera krävs att man har tillgång till en server där man kan lägga upp en databas. Till domänen lexsup.se hör en databas av typ MySQL och ett program för att administrera denna. Via administrationsprogrammet kan man skapa tabeller i denna databas. Man kan till exempel skapa en tabell med fyra fält heter Namn , Adress , Mail och Skola. Om man vill komma åt att läsa den tabellen med en php-fil måste man först gå in i tabellen och därefter läsa den för att omvandla den till en html-tabell som kan skickas till den anropande browsern. Om tabellen ligger i databasen Databasnamn som har lösenordet Lösenord och tabellen heter Tabellnamn måste jag först gå in i databasen. Det gör jag med följande kod som skall stå inom php-taggar ************************************** $con = mysql_connect("Domännamn,mysql","Databasnamn","Lösenord"); if (!$con) { die('Could not connect: ' . mysql_error()); } mysql_select_db("Databasnamn", $con); ***** Här lägger man den kod som anger vad som skall göras med de uppgifter som hämtas från databasen***** mysql_close($con); ************************************** Den sista raden (mysql_close($con); ) stänger anslutningen till tabellen. Den är egentligen inte nödvändig eftersom anslutningen stängs vid nästa avslutande php-tagg men det är gängse sed att stänga ansliutningar. För att läsa i tabellen använder jag mig av SELECT som läser in en tabell i variabeln $_result. Om jag vill läsa in hela tabellen i $_result blir koden ************************************** $con = mysql_connect("Domännamn,mysql","Databasnamn","Lösenord"); if (!$con) { die('Could not connect: ' . mysql_error()); } mysql_select_db("Databasnamn", $con); $result = mysql_query("SELECT * FROM Tabellnamn"); mysql_close($con); ************************************** Om jag vill att den inlästa tabellen skall presenteras som en html-tabell skickar jag med echo en tabell till utgående html-fil. Jag börjar med ett tabellhuvud och sedan följer raderna i tabellen. ************************************** $con = mysql_connect("Domännamn,mysql","Databasnamn","Lösenord"); if (!$con) { die('Could not connect: ' . mysql_error()); } mysql_select_db("Databasnamn", $con); $result = mysql_query("SELECT * FROM Tabellnamn"); echo "< table border='1' > < tr > < th >Namn< /th > < th >Adress< /th > < th >Mail< /th > < th >Skola< /th > < /tr >"; while($row = mysql_fetch_array($result)) { echo "< tr >"; echo "< td >" . $row[Namn] . "< /td >"; echo "< td >" . $row[Adress] . ""; echo "< td >" . $row[Mail] . "< /td >"; echo "< td >" . $row[Skola] ."< /td >"; echo "< tr/ >"; } mysql_close($con); ************************************** php-scriptet sänder då en oavslutad tabell till html-filen. Den kommer då att placeras längst ner på sidan. Om du vill avsluta tabellen kan du göra det utanför php-taggarna med < /table >