Ö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)
- 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.
- 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.
- 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.
-
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.
- 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.
- 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.
- 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");
- 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.
-
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.
- Koden i filen connect.php
<?
include("config.php");
$db = mysql_connect("$server", "$username",
"$password");
mysql_select_db("$database", $db);
?>
- Koden i filen config.php
<?
$server = "localhost";
$username = "anvxxx";
$password = "??????????";
$database = "db_anvxxx";
$table = "table";
?>
- Ladda därefter upp filen config.php igen till
din webbplats.
- 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.
- 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.
- 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>
- 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>";
?>
- 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.
- 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>";
?>
- 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.
- 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.
- 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>
- 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
}
?>
- 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.
- 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
}
?>
- 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.
- 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.
- 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).
- 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.
- 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>";
?>
- 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
}
?>
- 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.
- 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å
ditt sä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
}
?>
- 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 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.
- 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> ".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å ditt
sä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
}
?>
- 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 är <? include("rm2.php"); ?></td>
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.
- 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";
?>
- 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> ".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å
ditt sä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"); ?>">
Totala antalet är <? include("rm2.php");
?></td>
</tr>
</table>
<p align="center">
<input type="submit" value="Visa tabellen"
name="B1">
</p>
</form>
<?php
}
?>
- 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.
- 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".
- 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.
- 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.
- Ä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 |
- 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.
- 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
- 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.
- 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.
- 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.
- Ö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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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å ditt
sä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
}
?>
- FIL 31
- 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.
- 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.
- När du är klar fungerar fil 31 som i strukturen är
väldigt lik fil 29 och 30.
- 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å
ditt sä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 är <? include("rs1.php");
?></font></td>
</tr>
</table>
<p align="center">
<input type="submit" value="Visa tabellen"
name="B1">
</p>
</form>
<?php
}
?>
- FIL 32
- 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.
- 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 ä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
}
?>
|