PHP och MySQL - Övning 48:2
Grunderna i PHP och MySQL

Länkar till info om filerna på den här sidan 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
Länkar till en demo av filerna

18 19 20 21 22 23 24 25 26 27 28 29 rm2 29b 29c 30 31 rs1 32

Övningen kräver att man har möjlighet att använda PHP och MySQL
(Om server, databas mm inte stämmer med dina uppgifter så byter/ändar du på det som behövs)

  1. Den här övningen är en fortsättning från övning 48:1. I den övningen framgår det var du hämtar filerna som du behöver till övningarna.

  2. Nu kommer du snart till fil 18 som är den fil som ger anslutning till din databas. Du måste nu innan du kan fortsätta göra några ändringar i koderna i en del filer. Först måste du emellertid se till att du har något i din databas.
  3. Gå nu till webbadressen http://193.183.192.8/phpMyAdmin/. Du kommer då till phpMyAdmin som är ett program som fungerar som ett administrationsverktyg. Det finnns flera administrationsverktyg att välja på. phpMyAdmin är mycket använt sådant. Logga in med ditt login och ditt lösenord. Välj svenska som språk. Klicka därefter till vänster på namnet på din databas (dvs på db_anvxxx där anvxxx är utbytt mot din databas). Notera vad din databas har för namn. Du behöver veta detta lite längre ned i uppgiften. Nu kan du se information om databasen.

    Ett SQL-uttryck kallas på engelska data definition statement men man säger vanligen istället att man kör en SQL-fråga även om det inte är en fråga man ställer.

    Under texten Kör SQL-fråga/frågor i din databas kan du skriva in en SQL-fråga och sedan "köra" den genom att klicka på knappen Kör längre ned. Koden nedan skapar en tabell med namnet maraton1. I tabellen skapas tre kolumner (fält) med följande namn: Plats, Lag, Poäng. Plats är ett heltal på högst 3 siffror. Lag är en teckensträng på högst 40 tecken. (Kolumntypen VARCHAR tillåter max 255 tecken men här anger du själv att det får finnas högst 40 tecken.) Poäng är ett heltal på högst 40 tecken.

    Varje tabell bör (men måste inte) har en primärnyckel (PRIMARY KEY). PRIMARY KEY är ett index som måste innehålla unika värden. Ett sådant värde får ej saknas. NULL är absolut inget värde alls. NOT NULL anger att ett värde måste finnas.

    I den här tabellen finns ingen PRIMARY KEY men värden får ej saknas i någon kolumn.

    Koderna nedan för att lägga in uppgifter talar för sig själva.

    Som du ser så går det att använda de svenska tecknen å,ä,ö. Dock rekommenderas ibland att man i alla fall undviker å.ä,ö. Observera också att stor och liten bokstav inte betyder samma sak. Det finns flera olika kolumntyper i SQL och INT och VARCHAR är vanliga. Du kan (på engelska) läs mer om dem alla i MYSQL-manualen.

    phpMyAdmin är ett administrationsverktyg som ska underlätta för dig så att du t ex ofta slipper skriva SQL-frågor själv. Du ska emellertid först pröva att själv köra en SQL-fråga.

    Kopiera nu koden nedan och klistra in den i rutan under texten Kör SQL-fråga/frågor i din databas och klicka sedan på Kör.

    CREATE TABLE maraton1 (
    Plats int(3) default NULL,
    Lag varchar(40) default NULL,
    Poäng int(5) default NULL
    ) TYPE=MyISAM;

    INSERT INTO maraton1 VALUES (1, 'IFK Göteborg', 2686);
    INSERT INTO maraton1 VALUES (2, 'Malmö FF', 2668);
    INSERT INTO maraton1 VALUES (3, 'AIK', 2597);

    Klicka nu på Visa för att se att innehållet finns med i tabellen.

    Man kan också köra SQL-frågan ovan på ett annat sätt. Nedan beskrivs hur man då gör.
    I mappen data i mappen grund finner du filenl maraton1strukturochdata.sql som innehåller SQL-frågan som du nyss har kört. Ett alternativ till det du nu har gjort är att gå till raden Eller Textfilens plats : Där bläddrar du fram till filen maraton1struktur.sql. Du klickar sedan på Kör och samma resultat erhålls.

  4. Ett ytterligare sätt är att mer använda programmet phpMyAdmins möjligheter. Då slipper du känna till hur SQL-frågan ska skrivas. Du skall nu göra om skapandet av tabellen som du gjorde ovan. Ta därför bort den tabell som du nyss skapade. Klicka på tabellens namn till vänster och klicka sedan på Radera och som svar på frågan Vill du verkligen klickar du på OK. (Om du istället klickar på Töm så tömmer du bara tabellen på de data som finns där men du behåller strukturen.)

    Gör sedan så här:
    Gå längst ned på sidan till texten Skapa ny tabell i databas db_anvxxx. Välj namnet maraton 1 och välj att skapa 3 fält. Klicka sedan på Kör. Fyll sedan i tabellen enligt nedan och klicka sedan på Spara.



    Nu måste du lägga in uppgifterna om de tre lagen. Klicka därför långt upp på sidan på Lägg till. I kolumnen värden lägger du sedan in uppgifterna för IFK Göteborg. Sedan klickar du på Kör. Gör sedan om samma sak för de två andra lagen. Klicka sedan på Visa för att se att innehållet finns med i tabellen och att allt ser ut som efter det att vi hade kört SQL-frågan ovan.

  5. Glöm inte att du skall lägga in ett 4:e lag precis som när det gäller uppgifterna ovan. Kör alltså SQL-frågan nedan som en komplettering eller lägg in värdena för IFK Norrköping genom att klicka på Lägga till.

    INSERT INTO maraton1 VALUES (4, 'IFK Norrköping', 2488);

    Klicka sedan på Visa för att se att det fjärde laget finns med i tabellen.

  6. Med hjälp av programmet phpMyAdmin som du nu har använt en stund kan man också exportera från en tabell till en fil. När man exporterar till en sql-fil så får man alltid med strukturen till tabellen men man kan också välja så att också data dvs innehållet i tabellen ingår i filen. Man kan också exportera till en csv-fil som man sedan kan öppna i Excel. Om man från Excel tvärtom vill importera till en databas så sparar man först filen som en skv-fil (där data är semikolonseparerade). En sql-fil som innehåller bara struktur eller struktur och data för en tabell kan man som du vet importera i en annan databas.
  7. FIL 18



    I fil 17 visade jag en funktion som jag själv hade gjort. Det finns också färdiga funktioner. Det finns faktiskt över 2000 inbyggda färdiga funktioner. En del av dessa har samband med MySQL-databaser. Längre ned finns koden i fil 18. Här kommenteras utförligt denna kod som medför en databaskoppling.

    Funktionen som utför anslutning till en MySQL-databas heter
    mysql_connect("servernamn:port,användarnamn,lösenord")
    Det som står inom parentesen kallas parametrar. Varje parameter skall finnas i en sträng dvs runt parametern skall finnas citationstecken. Om MySQL finns på samma dator som webbservern som man använder så anger man normalt servernamnet som localhost. Standardporten för MySQL är 3306 och om man inte har ändrat på normalinställningarna för webbservern så behöver man inte skriva porten. Det är ovanligt att porten skrivs ut.

    Man väljer vilken databas man vill arbeta mot med funktionen
    mysql_select_db(databasnamn,identifierare för databaskoppling);
    Den första parametern är nödvändig. Man skriver namnet på databasen och det har du också redan gjort ovan. Den andra parametern talar om vilken databaskoppling som ska användas. Om ingen länkidentifierare anges gäller den senast skapade. Eftersom vi bara har en databaskoppling så behöver man alltså egentligen inte skriva denna parameter men det är mycket vanligt att man ändå gör det för säkerhets skull. Man kan alltså vanligen bara skriva
    mysql_select_db("databasnamn"); 

  8. Det är i PHP mycket enkelt att någonstans i en fil lägga in innehållet i en annan fil. Funktionen include() används till detta och likaså  funktionen require(). Läs gärna mer om dessa funktioner i manualen.

    Eftersom ovannnämnda två funktioner måste ingå i en fil när man ämnar göra en databasuppkoppling så har jag lagt dessa funktioner på två rader in en särkild fil vid namn connect.php. De 4 viktiga data som behövs för att en databaskoppling ska kunna ske har här angetts med variabler.

    Istället för att du direkt i den här filen fyller i ditt login och ditt lösenord mm skall du fylla i dessa uppgifter i ytterligare en fil som finnns i filen connect.php. Det är filen config.php. Dina 4 data anges i config.php som dessa variablers värden.

  9. Du ska nu öppna filen config.php och där skriva in login, password och databasnamn.

    Som server finns redan angivet localhost viket man skriver när MySQL är installerat på samma dator som webbserverprogrammet. Så är det också när det gäller Per Brahegymnasiets övningsserver.

    Om du använder PB:s övningsserver så är ditt usernamn/login anvxxx där du byter ut xxx mot något som du får av läraren.

    Databasnamnet är väldigt likt ditt username. Databasnamnet är db_anvxxx (där xxx byts ut mot samma tecken som ovan när det gäller användarnamnet).

    Ditt lösenord får du av din lärare.

    Man skulle kunna läggga in ytterligare variabler i filen config.php. Så är det också ofta när man hämtar olika färdiga paket på nätet. Nu finns det endast en ytterligare variabel som det är möjligt att använda sig av nämligen möjligheten att skriva tabellens namn om man använder bara en tabell och då skriver man $table istället för tabellnamnet i respektive fil men du skall inte använda dig av detta eftersom du kommer att arbeta med olika tabeller.

  10. Koden i filen connect.php


    <?

    include("config.php");

    $db = mysql_connect("$server", "$username", "$password");
    mysql_select_db("$database", $db);

    ?>

     
  11. Koden i filen config.php

    <?
    $server = "localhost";
    $username = "anvxxx";
    $password = "??????????";
    $database = "db_anvxxx";
    $table = "table";
    ?>

  12. Ladda därefter upp filen config.php igen till din webbplats.

  13. Kontrollera därefter att fil 18 fungerar genom att gå till Internet på adressen: http://193.183.192.8/user/anvxxx/kap48/grund/it48.htm där anvxxx byts ut mot ditt login som du har fått av din lärare.


  14. Nästa steg är att skicka en SQL-fråga. Det normala skrivsättet är
    $result = mysql_query("SQL-fråga",identifierare för databaskoppling ); Precis som ovan så måste man inte skriva någon länkidentifierare eftersom vi bara har en databaskoppling men det är mycket vanligt att man ändå gör det för säkerhets skull. Testa med att i fil 19 bara skriva $result = mysql_query("SQL-fråga");
    När det gäller SQL så säger man att man skickar en SQL-fråga även om det inte är en fråga i vanligt bemärkelse. Det finns mängder med SQL-frågor som man kan skicka som sedan leder till att man kan presentera sina data i databasen på olika sätt. Man börjar ofta med SELECT *. SQL-kommandot SELECT medför att man hämtar data och * att man hämtar allt. Efter FROM skall man ange från vilken tabell som man hämtar data. I vårt fall heter tabellen maraton1. ORDER BY betyder sortera efter och vi sorterar efter Plats. ASC betyder att sorteringen sker stigande. Motsatsen dvs att sorteringen görs avtagande betecknas DESC.

    Det returvärde som skickas som svar på en SQL-fråga är inte själva resultatet, utan en resultatidentifierare. Variabeln $result innehåller resultatidentifieraren. Denna variabel används sedan av olika funktioner för att konvertera resultatet till ett lämpligt format. Innan resultatet från en SQL-fråga kan presenteras måste det alltså göras om till något lämpligt format. Mycket vanligt är att man lägger det i en vektor.

    Funktionen mysql_fetch_array(resultatidentifierare,hur vektorn är konstruerad) är den vanligaste funktionen för att
    ta emot resultat och göra om det till ett format som går att visa. Den här funktionen delar upp resultatet i en vektor där varje element i vektorn kan refereras till med ett namn och ett nummer.

    Resultatidentifieraren är naturligtvis i vårt fall $result. Hur vektorn är konstruerad brukar man inte ange. Om inget annat skrivs så är den både sträng-och numeriskt indexerad.

    while används som i tidigare exempel. En loop ser till att rad efter rad skrivs ut på bildskärmen och först när alla raderna i tabellen är hämtade avslutas loopen.
  15. Fr o m fil 18 så har jag använt mig av en css-fil för att göra presentationen lite snyggare. HTMl-koden överst ser fr o m fil 18 ut så här:

    <html>
    <head>
    <title>Maratontabell</title>
    <link href="../skolan.css" rel="stylesheet" type="text/css">
    </head>

  16. Koden i fil 18:

    <?php
    include("../connect.php");
    $result = mysql_query("SELECT * FROM maraton1 ORDER BY Plats ASC",$db);
    echo "<table border=1 align=center cellspacing=2 cellpadding=3>\n";
    echo "<TR><TH>Plats<TH>Lag<TH>Poäng</TR>\n";
    while ($rad = mysql_fetch_array($result))
    {
    echo "<TR><TD>$rad[Plats]<TD>$rad[Lag]<TD>$rad[Poäng]\n";

    }
    echo "</TABLE>";
    ?>

  17. FIL 19

    Fil 19 innehåller inte några väsentliga förändringar. Jag har nedan tagit bort den andra parametern dvs $db för funktionen $result = mysql_query( );. Det fungerar ändå eftersom vi bara har en databaskoppling.

    Istället för att ringa in allt på en rad i tabellen med citationstecken ( " ) såsom i fil 18 används här operatorn för strängkonkatenering ( . ) för att slå ihop till en sträng.
  18. Koden i fil 19:

    <?php
    include("../connect.php");
    $result = mysql_query("SELECT * FROM maraton1 ORDER BY Plats ASC");
    echo "<table border=1 align=center cellspacing=2 cellpadding=3>\n";
    echo "<TR><TH >Plats<TH>Lag<TH>Poäng</TR>\n";
    while ($rad = mysql_fetch_array($result))
    {
    echo "<TR><TD >".$rad["Plats"]."<TD >".$rad["Lag"]."<TD >".$rad["Poäng"]."\n";

    }
    echo "</TABLE>";
    ?>
  19. FIL 20 och 21

    När man låter användaren vara med för att påverka antngen hur presentationen av en tabell i en databas ska se ut t.ex. genom att söka i tabellen eller när man låter användaren lägga in nya uppgifter eller uppdatera uppgifter i tabellen så använder man formulär. Därför är vissa HTML-koder för formulär väldigt viktiga för oss. Du har antagligen tidigare lärt dig att göra formulär direkt i Dreamweaver utan att så mycket titta på HTML-koderna. Nu ska vi granska några HTML-koder när det gäller formulär.
  20. I HTML-filen 20 finns ett formulär som skickar data till PHP-filen 21. Med hjälp av PHP kan jag i fil 21 skriva ut dessa data på bildskärmen. I fil 22 kan man söka efter ett lag eller efter en placering.

    Jag visar först lite om HTML-koden gällande formulär. Jag tar i första hand upp sådant som finns med i fil 20 (men också i fil 22) men ibland nämner jag också något som bara finns med i fil 22.

    Ett formulär börjar alltid med den grundläggande taggen <FORM>. Det finns tre attribut  till <FORM>.

    Attribut
    Förklaring
    action Sökvägen och namnet på webbapplikationen formuläret ska skickas till. Man kan t ex skicka till en fil. I fil 20 skickas data till filen 21.php. Sökvägen är enkel. Eftersom filen ligger i samma mapp så behöver man bara skriva filens namn.

    $PHP_SELF
    är en speciell variabel i PHP som alltid innehåller sökvägen och filnamnet till det egna dokumentet. I fil 22 används denna variabel för att skicka data till samma fil som man är i.
    method De två metoderna är GET eller POST. När GET används läggs all formulärdata till förfrågningssträngen dvs webbadressen. POST som används här paketerar även formulärdata som en del av en HTTP-förfrågan, men istället för att lägga till formulärdata till webbadressen, skckas de till webbapplikationen (i det hä fallet den egna filen) som en dataström.
    target Om du har arbetet med frames (ramar) så känner du igen target som anger i vilket fönster eller vilken ram som resultatet från formuläret ska visas. Här används ej target.

    Med <INPUT> skapas de olika formulärelementen. Attributet type anger formulärelementet.

    type
    Förklaring
    text Textruta
    submit Knapp för att skicka formulär
    reset Rensar formuläret
    checkbox Kryssruta
    hidden Gömt fält som ej visas i webbläsaren dock i HTML-koden om man väljer Visa Källa.
    file Uppladdning av fil
    radio Alternativknapp

    Nedan används text, submit och reset och endast dessa typer tas upp här. De andra typerna tas upp senare i kursen.

    När man i fil 20 klickar på <SUBMIT> så skickas uppgifterna till filen som man har angett som action i INPUT -taggen dvs till fil 21.php. För att man i mottagarfilen ska kunna göra något med de data som skickas så måste man skicka till en skriptfil såsom en PHP-fil.

    I <INPUT> anges här hela tiden type="text" och det betyder att en vanlig textruta på en rad erbjuds för ifyllandet av data.

    <INPUT> har fler attribut. name behövs för identifieringen. När man skickar data på det här sättet med hjälp av <SUBMIT> så skapas automatiskt de variabler som behövs i fil 21. Det som man anger som name i fil 20 såsom fornamn och efternamn blir i fil 21 automatiskt $fornamn och $efternamn. Den text som du skriver i formuläret t ex förnamnet Jakob tilldelar alltså i fil 21 $fornamn värdet Jakob. Det blir alltså samma sak som om vi i fil 21 inom PHP-koden hade skrivit
    $fornamn
    ="Jakob";

    size
    anger längden på ifyllnadsrutan. Det är inte samma sak som hur många tecken som man får ange. Det finns här ingen begränsning när det gäller namnens längd. Testa själv med att skriva ett väldigt långt låtsasefternamn. Du kan fortsätta att skriva i rutan även när den är fylld med text.

    <RESET> används som du förstår nä man vill rensa alla ifyllnadsrutor och börja om från början. Attributet value till både <INPUT> och <RESET> anger den text som skrivs på knappen.

    Fil 21 skall alltså ej öppnas för sig själv utan den filen skall öppnas automatiskt när man klickaarpå SUBMIT-knappen i fil 20.

    I fil 21 skrivs först i tabell ut det förnamn och efternamn som har skrivits i ifyllnadsrutorna i fil 20. Som en förberedelse för nästa fil har jag också lagt in ytterligare 2 tabeller med villkor.

    Villkor används för att välja väg i ett program. If-satser används för att kontrollera om något är sant och då görs något. Annars else görs något annat. En if-sats skrivs så här:

    if (uttryck ) {satsblock}
    else {satsblock}

    En sats är ett uttryck som avslutas med semikolon. Ett satsblock är en rad satser inom klammer. Om man man har flera satser efter varandra så måste kompilatorn veta var if-satsen slutar. I sådana fall måste man sätta klammrar runt satsblocket. Om bara en sats följer efter if (uttryck ) så behöver man inte skriva klamrar. När det gäller PHP-koden för de två understa tabellerna i fil 21 nedan har man flera satser och då måste man skriva klamrar.

    if($fornamn=="Pelle") betyder att om personen som har fyllt ifyllnadsrutan ha skrivit Pelle så gäller koden för tabellen i klammrar därefter. Annars gäller koden för tabellen i klammrarna efter (else).

    Ovannämnda gäller också för den tredje tabellen men här är koden med klammrarna lite mer kompicerad. Här avslutas PHP-koden direkt efter en första klammer
    else
    {
    ?>

    så att man kan skriva HTML-text utan att använda echo och sedan kommer PHP-koden tillbaka dels tillfälligt för att möjliggöra utskrift på skrämen av värdet på två variabler och sedan med enbart slutklammern:
    <?php
    }
    ?>


    I if($fornamn=="Pelle") används == för "är lika med". I SQL-frågor används vid villkor enbart = (ett ärlikamed-tecken). Längre fram i kursen kommer du att få se exempel på detta.

  21. HTML-koden i fil 20:

    <form method="POST" action="21.php">

    <table border="1" align="center" cellspacing=2 cellpadding=3>
    <tr><th>Skriv ditt namn nedan</th></tr>
    <tr><td>Förnamn: <input type="text" name="fornamn" size="20"></td></tr>
    <tr><td>Efternamn: <input type="text" name="efternamn" size="30"></td></tr>
    <tr><td><input type="submit" value="Skicka informationen till filen 21.php" name="B1"></td></tr>
    <tr><td><input type="reset" value="Töm sökraden så jag kan börja om" name="B2"></td></tr>
    </table>

    </form>
  22. PHP-koden i fil 21:

    <?php
    echo "<table border=1 align=center cellspacing=2 cellpadding=3>\n";
    echo "<TR><TH>Förnamn<TH>Efternamn</TR>\n";
    echo "<TR><TD>$fornamn<TD>$efternamn<TD>\n";
    echo "</TABLE>";
    ?>

    <hr>

    <?php
    if($fornamn=="Pelle")
    {
    echo "<table border=1 align=center cellspacing=2 cellpadding=3>\n";
    echo "<TR><TH>Förnamn<TH>Efternamn</TR>\n";
    echo "<TR><TD>Pelle själv<TD>$efternamn<TD>\n";
    echo "</TABLE>";
    }
    else
    {
    echo "<table border=1 align=center cellspacing=2 cellpadding=3>\n";
    echo "<TR><TH>Förnamn<TH>Efternamn</TR>\n";
    echo "<TR><TD>Inte Pelle<TD>$efternamn<TD>\n";
    echo "</TABLE>";
    }
    ?>

    <hr>

    <?php
    if($fornamn=="Pelle")
    {
    echo "<table border=1 align=center cellspacing=2 cellpadding=3>\n";
    echo "<TR><TH>Förnamn<TH>Efternamn</TR>\n";
    echo "<TR><TD>Pelle faktiskt<TD>$efternamn<TD>\n";
    echo "</TABLE>";
    }
    else
    {
    ?>

    <table border=1 align=center cellspacing=2 cellpadding=3>
    <TR><TH>Förnamn<TH>Efternamn</TR>
    <TR><TD><?php echo $fornamn ?><TD><?php echo $efternamn ?><TD>
    </TABLE>

    <?php
    }
    ?>

  23. FIL 22

    När det gäller fil 22 så redogör jag först för några ytterligare taggar (element) som inte finns med i fil 20 men dock i fil 22.

    <OPTION> används för att ange valen i elementet <SELECT>.
    <OPTION>
    har attributet VALUE som behövs för identifieringen. VALUE motsvarar kolumnerna Lag och Plats. Man kan alltså välja mellan att söka efter ett lag eller efter en plats.
    SELECTED VALUE
    är det val som visas överst (som förvalt) dvs i det här fallet Lag. Övriga val som är möjliga anges med bara VALUE. Här finns bara ytterligare ett möjligt val utöver SELECTED dvs Plats.

    Med <SELECT>
    kan man göra en lista med olika val. size talar om antalet val som ska visas samtidigt på skärmen. size=1 gäller för rullgardinsmenyer. name används här på samma sätt som för <INPUT>. Då det i <SELECT> gäller att name="searchtype" betyder det att $searchtype="Lag" eller att $searchtype="Plats" beroende på vilket användaren väljer i rullgardinsmenyn när man klickar på Submit-knappen. Data skickas ju då till samma sida som man är i.

    I <INPUT> gäller att name="searchstring". Det betyder att $searchstring blir den text som användaren skriver i sökrutan när man klickar på Submit-knappen. Data skickas ju då till samma sida som man är i.

    En if-sats skrivs så här:

    if (uttryck ) {satsblock}
    else {satsblock}

    Om man man har flera satser efter varandra så måste kompilatorn veta var if-satsen slutar. I sådana fall måste man sätta klammrar runt satsblocket. Man kan ha klamrar i klamrar såsom framgår nedan men den innersta klammern i satsblocket efter if är onödig eftersom bara en sats ingår. Den finns här för säkerhets skull.

    Om man nu tittar i PHP-koden så betyder if ($searchstring) att utskriften av en sökning inte visas om inte $searchstring finns och $searchstring skapas ju först när man har fyllt i formuläret. Därför kommer man första gången när man öppnar sidan till formuläret att se enbart formuläret.

    När det väl finns en $searchstring dvs när någon har klickat på SUBMIT-knappen så körs PHP-koden inom den översta klammern. Det som kommer med bland raderna i utskriften är de rader för vilka $searchtype liknar $searchstring dvs där det i vald kolumn t ex Lag finns ett ord som innehåller samma ordslinga som skrivit in som searchstring. %-tecknet betyder att valfritt antal tecken kan förekomma på denna plats. Det innebär att om man skriver ordslingan te när man söker så finns det 2 tecken till vänster om te i Göteborg och 4 tecken till höger om te i Göteborg. Det går bra eftersom valfritt antal tecken kan finnas i ordet både till vänster och höger om te. Således hittas Göteborg och raden för Göteborg skrivs ut.

  24. Formulär-HTML-kod och PHP-kod i fil 22:

    <?php
    if ($searchstring)
    {
    $sql="SELECT * FROM maraton1 WHERE $searchtype LIKE '%$searchstring%' ORDER BY Plats ASC";

    include("../connect.php");

    $result = mysql_query($sql,$db);
    echo "<table border=1 align=center cellspacing=2 cellpadding=3>\n";
    echo "<TR><TH>Plats<TH>Lag<TH>Poäng</TR>\n";
    while ($rad = mysql_fetch_array($result))
    {
    echo "<TR><TD>$rad[Plats]<TD>$rad[Lag]<TD>$rad[Poäng]\n";
    }
    echo "</TABLE>";
    }
    else
    {
    ?>
    <form method="POST" action="<?php $PHP_SELF ?>">

    <table border="1" align="center" cellspacing=2 cellpadding=3>
    <tr><td>Sök här</td>
    <td>Söktyp</td></tr>
    <tr>
    <td><input type="text" name="searchstring" size="40"></td>
    <td><select size="1" name="searchtype">
    <option selected value="Lag">Lag</option>
    <option value="Plats">Plats</option>

    </select></td>
    </tr>
    </table>

    <p align="center">
    <input type="submit" value="Sök" name="B1">
    <input type="reset" value="Töm sökraden ovan" name="B2">
    </p>
    </form>

    <?php
    }
    ?>

  25. FIL 23 och 24

    Fil 23 motsvarar fil 18 och fil 24 motsvarar fil 22. Den enda skillnaden är att jag har skapat en ny tabell i databasen som jag kallar maraton 2 och i den här tabellen har jag lagt in data från alla lagen i maratontabellen.

  26. Gå nu till webbadressen http://193.183.192.8/phpMyAdmin/. Logga in med ditt login och ditt lösenord. Välj svenska som språk. Klicka därefter till vänster på namnet på din databas (dvs på db_anvxxx där anvxxx är utbytt mot din databas). Gå till texten Eller Textfilens plats. Bläddra dig där fram till filen maraton2strukturochdata.sql som finns i mappen data i mappen grund. Klicka sedan på Kör. Klicka på din nya tabell maraton2 och klicka sedan på Visa för att se att allt finns där. Allt i maratontabellen finns nu med. Det är inte bara de tre kolumnerna från tidigare men de tre kolumnerna från tidigare har samma namn som tidigare. Därför fungerar nu fil 23 och 24 men bara med tre av kolumnerna. Testa.

  27. Din uppgift blir nu att göra om fil 23 och 24 så att du får med alla kolumnerna i tabellen när raderna skrivs ut på skärmen. Du finner min lösning i fil 25 och fil 26. Hittills har vi betraktat tabellen som oföränderlig. För varje år som går så kommer tabellen att förändras. Det går då inte att sortera tabellen efter Plats längre. I själva verket så blir kolumnen Plats omöjig att använda såsom nu. Man måste förändra den eller ta bort den. Försök komma på hur du skulle kunna göra om sorteringen i fil 23 så att det trots platsförändringar blir en riktig sortering. Svaret finner du i fil 25 (och fil 26).

  28. Pga att PHP-koden på en del rader i filerna 25, 26 och 27 är extra lång kanske koderna ibland inte får plats på en rad. I PHP-koden gäller alltid att att koden på en rad avslutas med;  Det är bl a när det gäller detta som det kan bli lite fel i presentationen av koderna nedan.

  29. FIL 25

    Koden i fil 25:


    <?php
    include("../connect.php");
    $result = mysql_query("SELECT * FROM maraton2 ORDER BY Poäng DESC",$db);
    echo "<table border=1 align=center cellspacing=2 cellpadding=3>\n";
    echo "<TR><TH>Plats<TH>Lag<TH>Antal<BR>år\n";
    echo "<TH>Spelade <BR>matcher <TH>Vunna <BR>matcher<TH>Oavjorda <BR>matcher\n";
    echo "<TH>Förlorade<BR>matcher<TH>Målskillnad<TH>Poäng</TR>\n";

    while ($rad = mysql_fetch_array($result))
    {
    echo "<TR><TD ALIGN=RIGHT>$rad[Plats]<TD>$rad[Lag]<TD ALIGN=RIGHT>$rad[År]\n";
    echo "<TD ALIGN=RIGHT>$rad[Sp]<TD ALIGN=RIGHT>$rad[V]<TD ALIGN=RIGHT>$rad[O]\n";
    echo "<TD ALIGN=RIGHT >$rad[F]<TD ALIGN=CENTER >$rad[GM]$rad[STR]$rad[IM]<TD ALIGN=RIGHT>$rad[Poäng]\n";

    }
    echo "</TABLE>";
    ?>

  30. FIL 26

    Koden i fil 26:

    <?php
    if ($searchstring)
    {
    $sql="SELECT * FROM maraton2 WHERE $searchtype LIKE '%$searchstring%' ORDER BY Poäng DESC";
    include("../connect.php");
    $result = mysql_query($sql,$db);
    echo "<table border=1 align=center cellspacing=2 cellpadding=3>\n";
    echo "<TR><TH>Plats<TH>Lag<TH>Antal<BR>år\n";
    echo "<TH>Spelade<BR>matcher <TH>Vunna<BR>matcher<TH>Oavjorda <BR>matcher\n";
    echo "<TH>Förlorade<BR>matcher <TH>Målskillnad <TH>Poäng</TR>\n";
    while ($rad = mysql_fetch_array($result))
    {
    echo "<TR><TD ALIGN=RIGHT>$rad[Plats]<TD>$rad[Lag]<TD ALIGN=RIGHT>$rad[År]\n";
    echo "<TD ALIGN=RIGHT>$rad[Sp]<TD ALIGN=RIGHT>$rad[V]<TD ALIGN=RIGHT>$rad[O]\n";
    echo "<TD ALIGN=RIGHT>$rad[F] <TD ALIGN=CENTER >$rad[GM]$rad[STR]$rad[IM]<TD ALIGN=RIGHT>$rad[Poäng]\n";

    }
    echo "</TABLE>";
    }
    else
    {
    ?>
    <form method="POST" action="<?php $PHP_SELF ?>">

    <table border="1" align="center" cellspacing=2 cellpadding=3>
    <tr><td>Sök här</td>
    <td>Söktyp</td></tr>
    <tr>
    <td><input type="text" name="searchstring" size="40"></td>
    <td><select size="1" name="searchtype">
    <option selected value=Lag>Lag</option>
    <option value=Plats>Plats</option>
    <option value=År>Antal år</option>
    <option value=SP>Spelade matcher</option>
    <option value=V>Vunna matcher</option>
    <option value=O>Oavgjorda matcher</option>
    <option value=F>Förlorade matcher</option>
    <option value=GM>Gjorda mål</option>
    <option value=IM>Insläppta mål</option>
    <option value=Poäng>Total poäng</option>

    </select></td>
    </tr>
    </table>

    <p align="center">
    <input type="submit" value="Sök" name="B1">
    <input type="reset" value="Töm sökraden ovan" name="B2">
    </p>
    </form>

    <?php
    }
    ?>

  31. FIL 27

    I fil 27 presenteras hela maratontabellen på ett sätt så att besökaren kan välja efter vilken kolumn som sorteringen ska göras och om sorteringen ska vara stigande eller avtagande.

    Ett problem är att vid vissa sorteringsordningar så stämmer inte platsen till vänster. Talet för Plats anger istället hela tiden platsen i relation till totalpoängen och inte platsen i relation till den sorteringsordning som har valts. Detta blir än mer fel om man varje år lägger in mer uppgifter i tabellen. Det som vi kallar plats kan då istället möjligen bytas ut mot ett unikt id-nummer för ett lag. Felet nämnt ovan kommer att rättas till i fil 29 och fil 30.
      
  32. Koden i fil 27:

    <?php
    if ($kolumn)
    {
    $sql="SELECT * FROM maraton2 ORDER BY $kolumn $ordning";

    include("../connect.php");
    $result = mysql_query($sql,$db);
    echo "<table border=1 align=center cellspacing=2 cellpadding=3>\n";
    echo "<TR><TH>Plats<TH>Lag<TH>Antal<BR>år\n";
    echo "<TH>Spelade <BR>matcher <TH>Vunna<BR>matcher <TH>Oavjorda<BR>matcher\n";
    echo "<TH>Förlorade<BR>matcher<TH>Mål<TH>Poäng</TR>\n";
    while ($rad = mysql_fetch_array($result))
    {
    echo "<TR><TD ALIGN=RIGHT>$rad[Plats]<TD ALIGN=LEFT >$rad[Lag]<TD ALIGN=RIGHT >$rad[År]\n";
    echo "<TD ALIGN=RIGHT>$rad[Sp]<TD ALIGN=RIGHT >$rad[V]<TD ALIGN=RIGHT>$rad[O]\n";
    echo "<TD ALIGN=RIGHT >$rad[F]<TD ALIGN=CENTER >$rad[GM]$rad[STR]$rad[IM]<TD ALIGN=RIGHT >$rad[Poäng]\n";

    }
    echo "</TABLE>";
    }
    else
    {
    ?>
    <form method="POST" action="<?php $PHP_SELF ?>">

    <table border="1" align="center" cellspacing=2 cellpadding=3>
    <tr>
    <th colspan="2">Visa maratontabellen p&aring; ditt s&auml;tt</th>
    </tr>
    <tr>
    <td>Sorteringssätt</td>
    <td>Sorteringsordning</td>
    </tr>
    <tr>
    <td><select size="1" name="ordning">
    <option selected value=ASC>Stigande</option>
    <option value=DESC>Avtagande</option>
    </select></td>
    <td><select size="1" name="kolumn">
    <option selected value=Plats>Plats</option>
    <option value=Lag>Lag</option>
    <option value=År>Antal år</option>
    <option value=SP>Spelade matcher</option>
    <option value=V>Vunna matcher</option>
    <option value=O>Oavgjorda matcher</option>
    <option value=F>Förlorade matcher</option>
    <option value=GM>Gjorda mål</option>
    <option value=IM>Insläppta mål</option>
    <option value=Poäng>Total poäng</option>
    </select></td>
    </tr>
    </table>



    <p align="center">
    <input type="submit" value="Visa tabellen" name="B1">
    </p>
    </form>

    <?php
    }
    ?>

  33. FIL 28

    I fil 28 har en enklare matematik används. Det går att räkna ut en del av värdena i en del kolumner t ex totalpoängen och antalet spelade matcher. Det går också att räkna ut målskillnaden och målkvoten. Tabellen i fil 28 erbjuder fler kolumner. Målkvoten får man fram genom att  dela antalet gjorda mål med antalet insläppta. Man får då en kvot med en massa decimaler. round($kvot, 2) betyder att värdet av $kvot avrundas till 2 decimaler. Eftersom kvoten ibland blir jämn och utan decimaler men då det aldrig blir ett tal större än 9 så kan man välja vänsterställd text <TD ALIGN=LEFT>. Det blir inte så snyggt med att första siffran skrivs så långt till vänster. Då kan man lägga in koden &nbsp; tre gånger i rad vilket medför 3 mellanslag.

    Problemet med att talet för Plats anger platsen i relation till totalpoängen och inte platsen i relation till den sorteringsordning som har valts kvarstår men det kommer att rättas till i fil 29 och fil 30.
  34. Koden i fil 28:

    <?php
    if ($kolumn)
    {
    $sql="SELECT * FROM maraton2 ORDER BY $kolumn $ordning";

    include("../connect.php");
    $result = mysql_query($sql,$db);
    echo "<table border=1 align=center cellspacing=2 cellpadding=3>\n";
    echo "<TR><TH>Plats<TH>Lag<TH>Antal<BR>år\n";
    echo "<TH>Spelade<BR>matcher <TH>Vunna <BR>matcher <TH>Oavjorda <BR>matcher\n";
    echo "<TH>Förlorade<BR>matcher <TH>Gjorda <BR>mål<TH>Insläppta <BR>mål<TH>Mål-<BR>skillnad <TH>Målkvot <TH>Poäng </TR>\n";
    while ($rad = mysql_fetch_array($result))
    {

    $sum=$rad["V"]*3+$rad["O"];
    $skillnad=$rad["GM"]-$rad["IM"];
    $kvot=$rad["GM"]/$rad["IM"];
    $spelade=$rad["V"]+$rad["O"]+$rad["F"];
    echo "<TR><TD ALIGN=RIGHT>".$rad["Plats"]
    ."<TD ALIGN=LEFT>".$rad["Lag"]
    ."<TD ALIGN=RIGHT>".$rad["År"]
    ."<TD ALIGN=RIGHT>".$spelade
    ."<TD ALIGN=RIGHT>".$rad["V"]
    ."<TD ALIGN=RIGHT>".$rad["O"]
    ."<TD ALIGN=RIGHT>".$rad["F"]
    ."<TD ALIGN=RIGHT>".$rad["GM"]
    ."<TD ALIGN=RIGHT>".$rad["IM"]
    ."<TD ALIGN=RIGHT>".$skillnad
    ."<TD ALIGN=LEFT>&nbsp;&nbsp;&nbsp;".round($kvot, 2)
    ."<TD ALIGN=RIGHT>".$sum;
    }
    echo "</TABLE>";
    }
    else
    {
    ?>
    <form method="POST" action="<?php $PHP_SELF ?>">

    <table border="1" align="center" cellspacing=2 cellpadding=3>
    <tr>
    <th colspan="2">Visa maratontabellen p&aring; ditt s&auml;tt</th>
    </tr>
    <tr>
    <td>Sorteringssätt</td>
    <td>Sorteringsordning</td>
    </tr>
    <tr>
    <td><select size="1" name="ordning">
    <option selected value=ASC>Stigande</option>
    <option value=DESC>Avtagande</option>
    </select></td>
    <td><select size="1" name="kolumn">
    <option selected value=Plats>Plats</option>
    <option value=Lag>Lag</option>
    <option value=År>Antal år</option>
    <option value=SP>Spelade matcher</option>
    <option value=V>Vunna matcher</option>
    <option value=O>Oavgjorda matcher</option>
    <option value=F>Förlorade matcher</option>
    <option value=GM>Gjorda mål</option>
    <option value=IM>Insläppta mål</option>
    <option value=Poäng>Total poäng</option>
    </select></td>
    </tr>
    </table>



    <p align="center">
    <input type="submit" value="Visa tabellen" name="B1">
    </p>
    </form>

    <?php
    }
    ?>

  35. FIL 29

    I fil 29 kan man också välja hur många lag som ska redovisas. Det antal som användaren anger blir värdet för $antal och $i ökar med ett för varje rad som skrivs. if ($i<=$antal) ger att just det antal rader som användaren anger skrivs ut. Om man väljer att visa ett större antal lag än som finns så visas bara totala antalet lag.

    Jag har också ändrat så att data i kolumnen Plats inte finns med vid utskriften.
    echo "<TR><TD ALIGN=RIGHT>".$rad["Plats"]
    har bytts ut mot
    echo "<TR><TD ALIGN=RIGHT>".$i
    vilket betyder att i kolumnen Plats visas värdet för $i.

    Sortering efter plats har tagit bort. Standardsorteringen har gjorts efter totalpoäng och avtagande. Man kan välja att sortera också efter målskillnad och målkvot.

    value=57 nedan betyder att det finns ett förinlagt tal som är lika med totala antalet lag.
    <input type="int" name="antal" size="10" value=57>


    Även vid val av sorteringsordningen sker en beräkning:
    <option selected value=V*3+O>Total poäng</option>
    Det innebär att 4 kolumner nu är onödiga och kan tas bort: Plats och SP. (Plats kan behållas men då istället som ett id-tal för ett lag.)

    På två ställen har jag angett hur många rader som f n ingår totalt. Dels har jag anget detta antal som värde (value) som standard som gäller om användaren inte ändrar i kolumen antal lag som skall redovisas. Dels har jag skrivit en rad om hur många lag som totalt ingår. Se koderna nedan. Det är mycket lätt att inkludera andra filer och lägga dem på en särskild plats t ex en cell i en annan fil. Här har jag använt mig av detta sätt. Jag har gjort en särskild fil för att räkna ut och skriva ut antalet rader på bildskärmen. Jag använder mig då av funktionen mysql_num_rows. Se koden i fil raderim2 nedan. I filerna 30, 31 och 32 så har jag använt liknande filer (raderim3, raderis1). Dessa filer ser i stort sett likandana ut så jag redovisar ej koderna för desssa i den här filen:


    <input type="int" name="antal" size="10"
    value= "<? include("rm2.php"); ?>">

    Totala antalet &auml;r <? include("rm2.php"); ?></td>


  36. Det hade gått att skriva koderna för uskrift på bildskärmen av antalet rader i en fil. När du hämtar den zipppade filen så kan du se två olika exempel som ger samma resultat fast i en fil. I fil 29b har jag lagt innehållet i fil raderim2 i fil 29b. I fil 29c har jag inte använt mig av funktionen mysql_num_rows utan jag har med hjälp av while har jag själv räknat ut antalet rader.

  37. Koderna i fil rm2:

    <?php

    include("../connect.php");
    $result = mysql_query("SELECT * FROM maraton2", $db);
    $num_rows = mysql_num_rows($result);

    echo "$num_rows\n";

    ?>


  38. Koden i fil 29:

    <?php
    if ($kolumn)
    {
    $sql="SELECT * FROM maraton2 ORDER BY $kolumn $ordning";

    include("../connect.php");
    $result = mysql_query($sql,$db);
    echo "<table border=1 align=center cellspacing=2 cellpadding=3>\n";
    echo "<TR><TH>Plats<TH>Lag<TH>Antal<BR>år\n";
    echo "<TH>Spelade<BR>matcher<TH>Vunna <BR>matcher<TH>Oavjorda<BR>matcher\n";
    echo "<TH>Förlorade <BR>matcher<TH>Gjorda <BR>mål<TH>Insläppta <BR>mål<TH>Mål-<BR>skillnad<TH>Målkvot<TH>Poäng</TR>\n";
    $i=1;
    while ($rad = mysql_fetch_array($result))
    if ($i<=$antal)

    {

    $sum=$rad["V"]*3+$rad["O"];
    $skillnad=$rad["GM"]-$rad["IM"];
    $kvot=$rad["GM"]/$rad["IM"];
    $spelade=$rad["V"]+$rad["O"]+$rad["F"];
    echo "<TR><TD ALIGN=RIGHT>".$i
    ."<TD ALIGN=LEFT>".$rad["Lag"]
    ."<TD ALIGN=RIGHT>".$rad["År"]
    ."<TD ALIGN=RIGHT>".$spelade
    ."<TD ALIGN=RIGHT>".$rad["V"]
    ."<TD ALIGN=RIGHT>".$rad["O"]
    ."<TD ALIGN=RIGHT>".$rad["F"]
    ."<TD ALIGN=RIGHT>".$rad["GM"]
    ."<TD ALIGN=RIGHT>".$rad["IM"]
    ."<TD ALIGN=RIGHT>".$skillnad
    ."<TD ALIGN=LEFT>&nbsp;&nbsp;&nbsp;".round($kvot, 2)
    ."<TD ALIGN=RIGHT>".$sum;
    $i=$i+1;
    }
    echo "</TABLE>";
    }
    else
    {
    ?>
    <form method="POST" action="<?php $PHP_SELF ?>">

    <table border="1" align="center" cellspacing=2 cellpadding=3>
    <tr>
    <th colspan="2">Visa maratontabellen p&aring; ditt s&auml;tt</th>
    </tr>
    <tr>
    <td><strong>Sorteringssätt</strong></td>
    <td><strong>Sorteringsordning</strong></td>
    </tr>
    <tr>
    <td><select size="1" name="ordning">
    <option selected value=DESC>Avtagande</option>
    <option value=ASC>Stigande</option>
    </select></td>
    <td><select size="1" name="kolumn">
    <option selected value=V*3+O>Total poäng</option>
    <option value=År>Antal år</option>
    <option value=V+O+F>Spelade matcher</option>
    <option value=V>Vunna matcher</option>
    <option value=GM-IM>Målskillnad</option>
    <option value=GM/IM>Målkvot</option>
    <option value=GM>Gjorda mål</option>
    <option value=O>Oavgjorda matcher</option>
    <option value=F>Förlorade matcher</option>
    <option value=IM>Insläppta mål</option>
    <option value=Lag>Lag</option>
    </select></td>
    </tr>
    <tr>
    <td><strong>Ange antalet lag som du vill se</strong></td>
    <td rowspan="2" valign="top">
    <div align="center"></div></td>
    </tr>
    <tr>
    <td valign="top">
    <input type="int" name="antal" size="10"
    value= "<? include("rm2.php"); ?>">
    &nbsp;Totala antalet &auml;r <? include("rm2.php"); ?></td>
    </tr>
    </table>



    <p align="center">
    <input type="submit" value="Visa tabellen" name="B1">
    </p>
    </form>

    <?php
    }
    ?>


  39. Du ska nu öva lite på att hämta och skicka data till och från databasen. Du börjar med att göra en del säkerhetskopior från databasen till din egen dator. Gå till administrationsverktyget phpMyAdmin. Logga in om du inte redan är inloggad. Kanske har du en sida öppen pga det som du gjorde i början av denna övning. Om du inte har det så går du till webbadressen http://193.183.192.8/phpMyAdmin/. Du kommer då till phpMyAdmin som är ett program som fungerar som ett administrationsverktyg och logga in där.

  40. Välj Swedish och klicka sedan på din databas för att du skall kunna se vilka tabeller som du har. Klicka på maraton2. Du skall nu hämta en del data i form av filer till din egen dator. Beroende på vilken version man har av phpMyAdmin som man har så kan det se lite olika ut. Ibland finns det en länk överst jämte Visa, Lägg till, Töm och Radera vid namn Export. I den version 3.23.55 som används på Per Brahegymnasiets testserver finns det ingen sådan länk. Man går istället lite längre ned på sidan tills man kommer till texten "Visa SQL-satser för tabellen".

  41. Nu kommer vi till ytterligare ett problem som är specifikt och som jag beskriver här emedan jag själv arbetar med mina kurser i en speciell datasal. I den datasal G213 som jag brukar ha mina kurser så laddar man ner egna filer på enheten H för att de ska bevaras till nästa gång man loggar in. Om man sparar på hårddisken (C) och stänger av datorn så försvinner dessa filer pga Safetycardsystemet. Emellertid så accepterar inte H att man sparar CSV-filer och SKV-filer (som vi kommer att beröra nedan) direkt på  H. Tyvärr får man därför spara dessa filer första gången på C och sedan får man kopiera över dem till H.

  42. En liten kommentar till ovan som inte direkt berör den här övningen. Platsinformationen i Dreamweaver MX vill lägga sig på C och därför försvinner denna information när man stänger av datorn.Därför bör man exportera platsinformationen till H för att sedan importera denna vid nästa tillfälle. När man sparar platsinformationen så hamnar den i en XML-fil med filtillägget ste.  Om man sparar ste-filen i huvudmappen ( i vårt fall php) eller någon annan mapp (i vårt fall t ex kap48 eller grund) som sedan skickas till webbservern så är det inte lämpligt att ladda upp ste-filen på nätet. Denna fil innehåller ju ditt lösenord. Spara därför ste-filen i en särskild mapp utanför mapparna som tillhör webbplatsen eller se till att den aldrig laddas upp till nätet.

  43. Äntlligen kommer vi till det som ska göras. Under texten "Visa SQL-satser för tabellen" ska du alltså hämta ett antal filer. Du ska därför först markera med två bockar och sedan klickar du på Kör. Du ska sedan ange ett filnamn enligt nedan. Ändra datum till det datum som du tar säkerhetskopian t ex 030331. En bock framför Skicka innebär att du får data i en fil och inte direkt på bildskärmen. Testa själv innan du hämtar filerna att för varje punkt nedan bara sätta den första bocken för att sedan klicka på Kör. Då ser du innehållet i den fil som du kommer att hämta till din dator. Det som står efter tecknet ( # )på en rad i en sql-fil är enbart information. Det motsvarar tecknen ( // )i en php-fil.


    Det finns som du ser ett flertal andra möjligheter som vi inte ska använda oss av. Fall 4 nedan innebär att filen blir kommaseparerad dvs efter varje post på en rad kommer ett kommatecken. I fall 5 nedan är filen istället semikolonseparerad.


    Om du arbetar i datasal G213 så skapar du först en tillfällig mapp på enheten C t ex vid namn sqldata i vilken du sparar filerna. När du är helt färdig med alla uppgifterna nedan dvs efter det att du senare har skapat en SKV-fil i Excel så kopierar du alla filerna till mappen data i mappen grund på H. Om du inte arbetar i en datasal med ovannnämnda problem så sparar du allt från början i mappen data i mappen grund.


    Nr
    Sätt en bock här
    Sätt en bock här
    Välj filnamnet
    1 Enbart struktur Skicka maraton2strukturdatum.sql
    2 Struktur och data Skicka maraton2strukturdatadatum.sql
    3 Enbart data Skicka maraton2datadatum.sql
    4 CSV för MS Excel-data Skicka maraton2kommadatum.csv
    5 CSV Skicka maraton2semikolondatum.csv


  44. Du ska nu öva lite på att flytta data från din dator till databasen och tvärtom. Vi ska först göra en ny tabell med enbart den struktur som du nyss sparade i din dator. Vi ska ändra lite i den här filen. Vi ska byta ut orden maraton2 mot maraton3 så att en ny tabell vid namn maraton3 kan skapas.

  45. Tyvärr är det en del problem med phpMyAdmin på Per Brahegymnasiets övningsserver. Det fungerar inte att importera skv och csv-filer. Om du arbetar på Per Brahegymnasiets övningssserver så får du därför hoppa över punkterna 45-51. Skapa inte såsom det står i punkt 45 en ny tabell vid namn maraton3 utan följ anvisningarna i denna punkt och hoppa sedan till punkt 52. Om du arbetar på en annan server så ska dock punkterna 45-51 fungera och då kan du göra uppgifterna i dessa punkter iställlet för det som står nedan i denna punkt.

    För att du skall kunna fortsätta med punkt 52 direkt efter denna punkt hämtar du en färdig sqlfil med hela maraton3-tabellen inklusive både data och struktur. Jag har zippat filen. Zippa upp filen och lägg filen maraton3strukturdata.sql i mappen data i mappen grund i mappen kap48 som ligger i mappen php. I din databas i phpMyAdmin går du till raden Eller Textfilens plats : Där bläddrar du dig fram till filen maraton3strukturdata.sql. Du klickar sedan på Kör och hela tabellen maraton finns i databasen. Hämta alltså filen maraton3.zip som finns på följande adress:http://www.edu.jonkoping.se/it/ped/gy/uppsok/kap48/maraton3/maraton3.zip

  46. Det går inte i Dreamweaver att öppna en sqlfil genom att klicka på filen men du kan öppna den genom att klicka på Arkiv och sedan på Öppna osv. Öppna nu filen maraton2strukturdatum.sql på detta sätt. Byt ut ordet maraton2 mot maraton3 så att det nu står CREATE TABLE maraton3. Spara om filen med namnet maraton3strukturdatum.sql. Klicka nu i phpMyAdmin på databasen till vänster och gå till raden med texten Eller Textfilens plats :. Bläddra dig där fram till filen maraton3strukturdatum.sql och klicka sedan på Kör.


  47. Klicka nu till vänster på den nya tabellen maraton 3. Klicka därefter på länken Importera textfil till tabellen. Överst till höger om texten Textfilens plats bläddrar du dig fram till filen maraton2semikolondatum.csv. Klicka sedan på Sänd. Klicka därefter till vänster på tabellen maraton3 och sedan på Visa och du ser att alla data finns där.

  48. Om man behöver ändra mycket på de data som man har i en tabell så kan det vara bekvämt att göra dessa ändringar i ett program som Excel.

  49. Öppna nu Excel och välj att öppna filen maraton2semikolondatum.csv. (eller filen maraton2kommadatum.csv). När du försöker öppna en sådan fil så måste du först för att kunnna hitta den ändra Filformat från Alla Microsoft Excel-filer till Alla filer. När man bläddrar så ligger Alla filer överst. Nu kan du se filen som du ska öppna. Försök nu öppna filen. Nu visas i ett eget fönster Textimportguiden 1-3. Nu väljer du först att sätta en prick framför Avgränsade fält. Det vanligast är att Excel redan har markerat Avgränsade fält. Klicka på nästa och markera nu att sätt en bock framför semikolon (komma om du väljer den andra filen). Nu ser du att kolumnerna visas. Du kan nu välja nästa och sedan Slutför eller så väljer du Slutför direkt.

  50. Nu kan du passa på att ändra i tabellen. Gör följande ändring. Sortera nu om tabellen efter kolumn B så att lagen kommer i bokstavsordning. Välj Data, Sortera och efter kolumn B, Fallande. Ändra sedan i kolumn A för Plats så att talen där kommer i nummerordning från 1,2,3.. osv till 57. Välj att spara om filen men nu med namnet maraton3semikolondatum.skv. Filen (för)blir nu semikolonseparerad. När du sparar så bläddrar du ned till SKV. Ta bort eventuella citationstecken runt filnamnet. Du behöver aldrig spara filen som en Excelfil med filtillägget xls.

  51. Gå sedan till phpMyAdmin och klicka på din tabell maraton3. Klicka sedan överst på Töm och svara OK på frågan om du verkligen vill tömma tabellen på alla data.

  52. Klicka sedan på länken Importera textfil till tabellen. Bläddra fram till filen maraton3semikolondatum.skv Den här filen är redan semikolonseparerad så den blir lätt att importera till databasen. Klicka på Sänd. Klicka därefter på tabellens namn och på Visa för att se att alla data finns där. Ibland fungerar inte Visa ordentligt men då kan man gå ned till texten Visa SQL-satser för tabellen. Man markerar Enbart data och klickar på Kör så ser man om data har lagts in.

  53. FIL 30

    Vad innebär de ändringar vi nu gjort om vi skulle  göra om PHP-filerna så att de istället hämtar data från maraton3? Det borde inte vara någon skillnad om man bara inte visar värdena i kolumnen Plats.

  54. I den här filen är möjligheten att välja antalet lag utbytt mot möjligheten att välja vilket lag i nummerordning.

    Variablerna $begin och $end används för att tala om vilka av lagen i den valda sorteringsordningen som skall visas. Man kan t ex välja att se de tre sämsta lagen (start på 55 och slut på 57) vid den sorteringsordning som har valts.

    I fil 41 som finns med i övning 48:3 väljer man istället vilka (i det här fallet årtal istället för lag) som överhuvud taget skall vara med vid sorteringen.

    I fil 30 kan man också välja vilka kolumner som skall visas på bildskärmen.

    Koden i fil 30 ser för övrigt ut som koden i fil 29 förutom raden
    $sql="SELECT * FROM maraton3 ORDER BY $kolumn $ordning";
    där maraton2 är utbytt mot maraton3.

  55. Koderna i fil 30:

    <?php
    if ($kolumn)
    {
    $sql="SELECT * FROM maraton3 ORDER BY $kolumn $ordning";

    include("../connect.php");
    $result = mysql_query($sql,$db);

    echo "<table border=1 align=center cellspacing=2 cellpadding=3>\n";
    echo "<TR><TH>Plats";

    if($k1) echo"<TH>Lag";
    if($k2) echo"<TH>Antal<BR>år";
    if($k3) echo"<TH>Spelade<BR>matcher";
    if($k4) echo"<TH>Vunna<BR>matcher";
    if($k5) echo"<TH>Oavjorda<BR>matcher";
    if($k6) echo"<TH>Förlorade<BR>matcher";
    if($k7) echo"<TH>Gjorda <BR>mål";
    if($k8) echo"<TH>Insläppta <BR>mål";
    if($k9) echo"<TH>Mål-<BR>skillnad";
    if($k10) echo"<TH>Målkvot";
    if($k11) echo"<TH>Poäng";


    $i=1;
    $k=1;
    while ($rad = mysql_fetch_array($result))

    {



    $sum=$rad["V"]*3+$rad["O"];
    $skillnad=$rad["GM"]-$rad["IM"];
    $kvot=$rad["GM"]/$rad["IM"];
    $spelade=$rad["V"]+$rad["O"]+$rad["F"];
    if ($k>=$begin AND $k<=$end)
    {
    echo "<TR><TD ALIGN=RIGHT>".$i;
    if($k1) echo "<TD ALIGN=RIGHT>".$rad["Lag"];
    if($k2) echo "<TD ALIGN=RIGHT>".$rad["År"];
    if($k3) echo "<TD ALIGN=RIGHT>".$spelade;
    if($k4) echo "<TD ALIGN=RIGHT>".$rad["V"];
    if($k5) echo "<TD ALIGN=RIGHT>".$rad["O"];
    if($k6) echo "<TD ALIGN=RIGHT>".$rad["F"];
    if($k7) echo "<TD ALIGN=RIGHT>".$rad["GM"];
    if($k8) echo "<TD ALIGN=RIGHT>".$rad["IM"];
    if($k9) echo "<TD ALIGN=RIGHT>".$skillnad;
    if($k10) echo "<TD ALIGN=RIGHT>".round($kvot, 2);
    if($k11) echo "<TD ALIGN=RIGHT>".$sum;
    }
    $i=$i+1;
    $k=$k+1;

    }
    echo "</TABLE>";


    }
    else
    {
    ?>
    <form method="POST" action="<?php $PHP_SELF ?>">
    <table border="1" align="center" cellspacing=2 cellpadding=3>
    <tr>
    <th colspan="3">Visa maratontabellen p&aring; ditt s&auml;tt</th>
    </tr>
    <tr>
    <td><strong>Sorteringssätt</strong></td>
    <td><strong>Sorteringsordning</strong></td>
    <td><strong>Kolumner som ska visas</strong></strong></td>
    </tr>


    <tr valign="top">
    <td>
    <select size="1" name="kolumn">
    <option selected value=V*3+O>Total poäng</option>
    <option value=År>Antal år</option>
    <option value=V+O+F>Spelade matcher</option>
    <option value=V>Vunna matcher</option>
    <option value=GM-IM>Målskillnad</option>
    <option value=GM/IM>Målkvot</option>
    <option value=GM>Gjorda mål</option>
    <option value=O>Oavgjorda matcher</option>
    <option value=F>Förlorade matcher</option>
    <option value=IM>Insläppta mål</option>
    <option value=Lag>Lag</option>
    </select></td>
    <td>
    <select size="1" name="ordning">
    <option selected value=DESC>Avtagande</option>
    <option value=ASC>Stigande</option>
    </select></td>


    <td>
    <input type="checkbox" name=k1 checked="checked">Lag<BR>
    <input type="checkbox" name=k2 checked="checked">Antal år<BR>
    <input type="checkbox" name=k3 checked="checked">Spelade matcher<BR>
    <input type="checkbox" name=k4 checked="checked">Vunna matcher<BR>
    <input type="checkbox" name=k5 checked="checked">Oavgjorda matcher<BR>
    <input type="checkbox" name=k6 checked="checked">Förlorade matcher<BR>
    <input type="checkbox" name=k7 checked="checked">Gjorda mål<BR>
    <input type="checkbox" name=k8 checked="checked">Insläppta mål<BR>
    <input type="checkbox" name=k9 checked="checked">Målskillnad<BR>
    <input type="checkbox" name=k10 checked="checked">Målkvot<BR>
    <input type="checkbox" name=k11 checked="checked">Totalpoäng<BR>

    </td>

    </tr>



    <tr>
    <td colspan="3" valign="top"> <strong>Börja på nummer <input type="int" name="begin" size="10" value=1>
    av totalt
    <? include("rm2.php"); ?> efter vald sorteringsordning</strong>
    </td>
    </tr>
    <tr>
    <td colspan="3" valign="top"> <strong>Sluta på nummer <input type="int" name="end" size="10" value="<? include("rm2.php"); ?>">
    av totalt
    <? include("rm2.php"); ?>
    </strong></td>
    </tr>
    </table>
    <p align="center">
    <input type="submit" value="Visa tabellen" name="B1">
    </p>
    </form>

    <?php
    }
    ?>



  56. FIL 31
  57. Jag tänkte visa en annan modell för en söksida men jag behöver då en annan tabell. Det är ju inte så intressant att söka efter tal som i tabellen maraton.
  58. Länsstyrelserna har publicerat uppgifter om olika landskapssymboler. Jag har hämtat uppgifterna för de 21 översta landskapen. Uppgifterna för Öland, Halland, Blekinge och Skåne saknas. Dessa landskap ska du lägga till i kommande övningar. Skapa nu en ny tabell symboler1 i din databas med hjälp av filen symboler1strukturdata21.sql som finns i mappen data i mappen grund.

  59. När du är klar fungerar fil 31 som i strukturen är väldigt lik fil 29 och 30.

  60. Koderna i fil 31:


    <?php
    if ($kolumn)
    {
    $sql="SELECT * FROM symboler1 ORDER BY $kolumn $ordning";

    include("../connect.php");
    $result = mysql_query($sql,$db);
    echo "<table border=1 align=center cellspacing=2 cellpadding=3>\n";
    echo "<TR><TH ALIGN=RIGHT>Norr-söder<TH ALIGN=LEFT>Landskap <TH ALIGN=LEFT>Blomma <TH ALIGN=LEFT>Djur\n";
    echo "<TH ALIGN=LEFT>Fisk<TH ALIGN=LEFT>Fågel<TH ALIGN=LEFT>Sten\n";
    echo "<TH ALIGN=LEFT>Svamp<TH ALIGN=LEFT>Insekt<TH ALIGN=LEFT>Mossa</TR>\n";
    $i=1;
    while ($rad = mysql_fetch_array($result))
    if ($i<=$antal)

    {

    echo "<TR><TD ALIGN=RIGHT>".$rad["id"]
    ."<TD ALIGN=LEFT>".$rad["landskap"]
    ."<TD ALIGN=LEFT>".$rad["blomma"]
    ."<TD ALIGN=LEFT>".$rad["djur"]
    ."<TD ALIGN=LEFT>".$rad["fisk"]
    ."<TD ALIGN=LEFT>".$rad["fagel"]
    ."<TD ALIGN=LEFT>".$rad["sten"]
    ."<TD ALIGN=LEFT>".$rad["svamp"]
    ."<TD ALIGN=LEFT>".$rad["insekt"]
    ."<TD ALIGN=LEFT>".$rad["mossa"];
    $i=$i+1;
    }
    echo "</TABLE>";
    }
    else
    {
    ?>
    <form method="POST" action="<?php $PHP_SELF ?>">

    <table border="1" align="center" cellspacing=2 cellpadding=3>
    <tr>
    <th colspan="2">Visa landskapssymbolerna p&aring; ditt s&auml;tt</th>
    </tr>
    <tr>
    <td><font size="2"><strong>Sorteringssätt</strong></font></td>
    <td><font size="2"><strong>Sorteringsordning</strong></font></td>
    </tr>
    <tr>
    <td><select size="1" name="ordning">
    <option selected value=ASC>Stigande</option>
    <option value=DESC>Avtagande</option>
    </select></td>
    <td><select size="1" name="kolumn">
    <option selected value=id>Norr-söder</option>
    <option value=landskap>Landskap</option>
    <option value=blomma>Blomma</option>
    <option value=djur>Djur</option>
    <option value=fisk>Fisk</option>
    <option value=fagel>Fågel</option>
    <option value=sten>Sten</option>
    <option value=svamp>Svamp</option>
    <option value=insekt>Insekt</option>
    <option value=mossa>Mossa</option>

    </select></td>
    </tr>
    <tr>
    <td><font size="2"><strong>Ange hur många landskap som ska visas</strong></font></td>
    </tr>
    <tr>
    <td ><input type="int" name="antal" size="10" value="<? include("rs1.php"); ?>">
    <font size="2">Totala antalet &auml;r <? include("rs1.php"); ?></font></td>
    </tr>
    </table>



    <p align="center">
    <input type="submit" value="Visa tabellen" name="B1">
    </p>
    </form>

    <?php
    }
    ?>


  61. FIL 32
  62. Fil 32 är en söksida. Det som skiljer från den tidigare söksidan är att jag nu har tagit med en del av det som fanns med i fil 29, 30 och 31.

    Den stora förändringen är dock att när man nu söker så söker man i alla kolumnerna på en gång. Detta åstadkommer jag genom
    landskap LIKE '%$searchstring%' OR blomma LIKE '%$searchstring%' OR djur osv
    OR
    betyder naturligtvis eller dvs om värdet hittas i någon av kolumnerna som finns på en rad så skrivs hela raden ut på bildskärmen som sökresultat.

    Om du t ex söker på fjäll så kommer du att hitta träffar från fler olika kolumner.


  63. Koderna i fil 32:

    <?php
    if ($searchstring)
    {

    $sql="SELECT * FROM symboler1 WHERE landskap LIKE '%$searchstring%' OR blomma LIKE '%$searchstring%'
    OR djur LIKE '%$searchstring%' OR fisk LIKE '%$searchstring%' OR fagel LIKE '%$searchstring%'
    OR sten LIKE '%$searchstring%' OR svamp LIKE '%$searchstring%' OR insekt LIKE '%$searchstring%'
    OR mossa LIKE '%$searchstring%'
    ORDER BY $searchtype $ordning";

    include("../connect.php");
    $result = mysql_query($sql,$db);
    echo "<table border=1 align=center cellspacing=2 cellpadding=3>\n";
    echo "<TR><TH ALIGN=RIGHT>Norr-söder<TH ALIGN=LEFT>Landskap<TH ALIGN=LEFT>Blomma<TH ALIGN=LEFT>Djur\n";
    echo "<TH ALIGN=LEFT>Fisk<TH ALIGN=LEFT>Fågel<TH ALIGN=LEFT>Sten\n";
    echo "<TH ALIGN=LEFT>Svamp<TH ALIGN=LEFT>Insekt<TH ALIGN=LEFT>Mossa</TR>\n";
    $i=1;
    while ($rad = mysql_fetch_array($result))
    if ($i<=$antal)

    {

    echo "<TR><TD ALIGN=RIGHT>".$rad["id"]
    ."<TD ALIGN=LEFT>".$rad["landskap"]
    ."<TD ALIGN=LEFT>".$rad["blomma"]
    ."<TD ALIGN=LEFT>".$rad["djur"]
    ."<TD ALIGN=LEFT>".$rad["fisk"]
    ."<TD ALIGN=LEFT>".$rad["fagel"]
    ."<TD ALIGN=LEFT>".$rad["sten"]
    ."<TD ALIGN=LEFT>".$rad["svamp"]
    ."<TD ALIGN=LEFT>".$rad["insekt"]
    ."<TD ALIGN=LEFT>".$rad["mossa"];
    $i=$i+1;
    }
    echo "</TABLE>";
    }
    else
    {
    ?>
    <form method="POST" action="<?php $PHP_SELF ?>">

    <table border="1" align="center" cellspacing=2 cellpadding=3>
    <tr>
    <td><strong>Sök här</strong></td>
    <td><strong>Sorteringsordning</strong></td>

    </tr>
    <tr>
    <td><input type="text" name="searchstring" size="60"></td>
    <td><select size="1" name="searchtype">
    <option selected value=id>Norr-söder</option>
    <option value=landskap>Landskap</option>
    <option value=blomma>Blomma</option>
    <option value=djur>Djur</option>
    <option value=fisk>Fisk</option>
    <option value=fagel>Fågel</option>
    <option value=sten>Sten</option>
    <option value=svamp>Svamp</option>
    <option value=insekt>Insekt</option>
    <option value=mossa>Mossa</option>

    </select></td>

    </tr>
    <tr>
    <td><font size="2"><strong>Ange hur många landskap som ska visas</strong></font></td>
    <td><strong>Sorteringssätt</strong></td>
    </tr>
    <tr>
    <td><input type="int" name="antal" size="10" value="<? include("rs1.php"); ?>">
    <font size="2">Totala antalet &auml;r <? include("rs1.php"); ?></font></td>
    <td><select size="1" name="ordning">
    <option selected value=ASC>Stigande</option>
    <option value=DESC>Avtagande</option>
    </select></td>
    </tr>
    </table>



    <p align="center">
    <input type="submit" value="Sök" name="B1">
    <input type="reset" value="Töm sökraden ovan" name="B2">
    </p>
    </form>

    <?php
    }
    ?>

Den här sidan uppdaterades senast 2004-02-04 av tommy.maltell@edu.jonkoping.se