05 maj 2006

Småfixet och det överblivna

Igår kväll gjorde jag en snabbuppfräschning av utseendet. Så att det inte skulle se så erbarmligt ut när jag visar det för klassen. Georgia istället för Times, större marginaler och blommor i bakgrunden.

Och så fixade jag en lite detalj som gör artikelsidorna lite trevligare:
echo "<head><title>Animeshoppen: " . $titel . "</title>";
?>
</head>
Så filmtiteln syns i title. Enkelt och smart av mig, tycker jag..!

Det är de sista dagarna som det har varit som roligast. De är nu man är inne i det och förstår lite mer av hur det fungerar med PHP och mySQL.

Onsdag var varukorgsdagen

Bestyren med varukorgen, retroaktivt:

Jag ville ha köpknapparna på de vardera artikelsidorna, och inte ha möjlighet beställa flera exemplar av samma.

Kundvagnsexemplet i php-boken var uppbyggt på ett lite annorlunda sätt än vad vi lärt oss, med functions och variabler jag inte kände igen. Den verkade krångligt (och tråkig), tyckte jag, så jag gav mig ut för att hitta något enklara exempel. Jag hade för mig att Internetworld hade haft en webbshopbyggarguide för ett tag sedan. Jag hittade dock ingen sån i deras artikelarkiv.

Istället hittade jag en e-bok via bibliotekets hemsida: "How to Do Everything with PHP and MySQL". Där fanns ett varukorgsexempel. Så jag lade ner en massa jobb på att sätta mig in i den och anpassa den efter mina tabeller och idéer. Gjorde så att artikelsidan skickar ArtID till butiksidan när man klickar på köp, etc. Men jag fick det aldrig att fungera.

Så sent på onsdagen beslöt jag mig för att ge upp mina höga tankar om shoppen, och utgå från PHP-bokens exempel. När jag satte mig in i det den här gången insåg jag att så konstig var den inte. Function är bara ett annat, ibland smidigare sätt att samla en if-sats under ett namn som man kan anropa.

Jag anpassade allt efter mina tabeller, och valde att visa filmerna med länk till artikel-sida. Jag har tidigare skrivit om hur det gick sen den dagen och hur det löste sig.

04 maj 2006

Hallelujah vilken lycka!

Varukorgen fungerar!

Det är sant. Jag kom till skolan. Slog mig ner, och satte mig in i koden ännu en gång. Tog allt lugnt. Har jag döpt något fel, glömt något? Jag hittade två variabler som blivit feldöpta (en bokstav fel) och en $result = för mycket som hade smugit sig in. Det fungerade fortfarande inte.

Efter lite ytterligare koll så hittade jag ett intressant ställe. Ska det inte vara ett semikolon efter det där? Jo det ska det! In med det, ftp:a och så kolla i Firefox. Tada! Superbt. Sen krävdes det lite mer trixande innan den registrerade köpen i köp-tabellen, och sedan innan den registrerade kundID också. Men nu gör den det. Och datum med.

När jag letade efter det "stora" felet så hittade jag ju en del som skulle ställt till det senare. Så det var ju väldigt bra. Jag har lite mer att lägga till innan det är klart. Jag får vänta med gårdagens redovisning till senare.

03 maj 2006

Varukorg hela dan

Är på väg hem nu med pendeln. Jag har suttit hela dagen med varukorgen, två olika varianter. Men jag har inte fått den att fungera. Och utan den så är ju hemsidan rätt värdelös.

Helt hemskt är det inte. Jag är närmare en lösning nu än tidigare. Nu får jag varukorgen att ta emot innehåll iallafall. Men inte att visa mer än antal. Inte titel.

Precis när jag var tvungen att rusa till pendeln blev det något ner fel. Nu är jag trött. Jag får skriva mer om idag imorrn.

Gårdagens formulär-bekräftelse

Först berättar jag om vad jag gjorde igår kväll. Jag gav mig inte på kundvagnen, istället försökte jag skapa en bekräftelse-funktion till nyregistreringen för kunder.

Jag tog helt enkelt den befintliga sidan, ändrade den befintliga if-satsen och lade till en ny: Om man klickar på spara så får man se vilka data man matat in. När man sedan klickar på Bekräfta, så skickas uppgifterna till kund-tabellen. Det var iallafall tanken.

På sidan där man ska bekräfta dök ett tomt ifyllnads-formulär upp under tabellen med det man tidigare skrivit in. Något fel på if-satserna alltså. Först försökte jag med att stoppa in bekräftelse-if-satsen i den föregående. Det fungerade inte. Så då gjorde jag bekräftelse-ifen till en elseif. Och då såg det rätt ut.

Dock så skickades ingen data till min kundtabell. Efter ett tag förstod jag att den tappar variablerna när de tagits emot på bekräftelse-sidan. Så då löste jag det genom att lägga in alla i en varsin hidden input, så att de skickas med när man klickar på Bekräfta. T.ex. så här:
echo "<input type='hidden' name=
'fornamn' value='" . $fornamn . "' />";
Och det fungerade! Då var klockan mycket, mycket. Så jag fick låta kundvagnen vänta till nästa dag. Mer om det senare.

02 maj 2006

Inner joins

Idag provade jag vidare med att få artikel-sidan att läsa in mer än ArtID från artikel-tabellen. Jag diskuterade med Jonas och Jens. Efter att jag hade meckat en del kom Jonas på att svaret borde finnas i UPDATE-övningen. Den gjorde jag dagen innan jag åkte till Köpenhamn, men jag fick den aldrig att fungera. Och lösningen gicks igenom den när jag var bortrest.

Jag provade med den lösningen, och det fungerade! Så här blev det:
$sql = "SELECT artikel.* FROM artikel WHERE
ArtID='$artikel'";

...

while($minrad = mysql_fetch_array($result)) {

$titel = $minrad['Titel'];
$ar = $minrad['År'];
$pris = $minrad['Pris'];

//Skriver ut fakta om filmen
echo "<h2>" . $titel . "</h2>";
echo "Produktionsår: " . $ar . "<br />";
echo "Pris: " . $pris . " kr";
}
Det var en lättnad.

Då gav jag mig på INNER JOIN, med hjälp av boken. Jag provade SQL-frågor i phpMyAdmin, och lyckades koppla Namn i Regi-tabellen till Titel i Artikel via regisserar-tabellen. Så när jag angav t.ex. ArtID=1 så visades regissören för art. nr 1, d.v.s. Spirited away.
SELECT regi.Namn
FROM artikel INNER JOIN regisserar
ON artikel.ArtID = regisserar.ArtID
INNER JOIN regi
ON regisserar.RegiID=regi.RegiID
WHERE artikel.ArtID=1
Nu skulle jag använda det i artikel.php. Eftersom jag inte visste hur jag skulle använda det ihop med den SELECT-fråga jag redan hade så tog jag bort den gamla så länge. Trots detta fungerade inte INNER JOIN-frågan när jag använde den.

Efter lite klurande kom jag fram till att jag måsteange SQL-frågan från andra hållet. Det är ju från Regi jag vill hämta regissörens namn, och inte från artikeln. Ganska självklart, men när man är mitt inne i det så kan det vara svårt att komma på. Så då blev det så här istället:
SELECT regi.Namn
FROM regi INNER JOIN regisserar
ON regi.RegiID = regisserar.RegiID
INNER JOIN artikel
ON regisserar.ArtID=artikel.ArtID
WHERE artikel.ArtID=1
...i myAdmin. Jag skrev det på en rad i artikel.php, och ersatte 1 med querystringens ArtID, som jag hämtat till '$artikel'. Då fungerade det! När jag klickar på Spirited away på butikens förstasida får jag veta att Hayao Miyazaki har regisserat den. Fantastiskt.

Då gällde det bara att kombinera detta med info från Artikel-tabellen. Först provade jag med att lägga till en ny sql= -rad. Det fungerade inte. Det visade sig dock vara enkeltDet var enkelt gjort, med ett kommatecken i SELECT-frågan.

Nu började jag känna att jag behärskar det här någorlunda. Jag börjar komma in i det. Jämfört med tidigare, alltså.

Då gav jag mig på att infoga ytterligare en många-till många-tabell, för att få in vilka skådespelare som är med i filmen (här röstskådespelare). Först provade jag i phpMyAdmin att få fram Namn från Skådespelar-tabellen via ArtID i Artikel, så här:
SELECT skådespelare.SkådNamn
FROM skådespelare INNER JOIN spelar_i
ON skådespelare.SkådID = spelar_i.SkådID
INNER JOIN artikel
ON spelar_i.ArtID=artikel.ArtID
WHERE artikel.ArtID=1
Det funkade fint. Då gällde det bara att få in detta på artikel-sidan. Jag provade att bara lägga till det med kommatecken, bland det jag lagt in tidigare. Men det fungerade inte alls. Jag letade och letade bland SQL- och PHP-hjälpsidor. Inget svar. Det fanns säkert någonstans där, men det var i så fall svårhittat.

Jag fick hjälp av Mats. Man skulle göra en ny "Kör fråga" efter SQL-frågan,

// SQL-fråga, kopplar artikel o skådespelare via spelar_i
$sql = "SELECT skådespelare.SkådNamn FROM skådespelare
INNER JOIN spelar_i ON skådespelare.SkådID = spelar_i
.SkådID INNER JOIN artikel ON spelar_i.ArtID=
artikel.ArtID WHERE artikel.ArtID='$artikel'";

// Kör fråga
$result = mysql_query($sql, $connectionstring);

while($minrad = mysql_fetch_array($result)) {
$skadespelare.= $minrad['SkådNamn'] . ", ";
Då visade den alla skådespelare för aktuellt ArtID, med kommatecken mellan. För att trimma bort det kommatecken som blir efter sista namnet skriver man
echo "Skådespelare: " . substr($skadespelare, 0,
(strlen($skadespelare)-2));
Klockan är mycket, bäst att sätta lite fart. Ska försöka skapa en kundvagn.

Queries

Nu när jag är mitt uppe i shoppen så ska jag försöka stanna upp och minnas vad jag gjort. Jag borde ha bloggat igår, förstår jag nu. För nu är det svårt att minnas vad jag gjort.

Nu ska vi se... Jo jag fixade en registreringssida för nya kunder. Jag utgick från den övning vi gjort tidigare. Jag lade till Användarnamn och Lösenord-fält på registreringssidan (nyreg.php) och i kundtabellen.

Och så fixade jag med kundinloggning. När jag gjorde det förra gången kopplade jag det bara till en testversion av min tabell. Så nu kopplade jag om det. Och ändrade vad man ska fylla i till Anv.namn och Lösenord. Jag ändrade lösenordfältet till
type="password"
så att det blir stjärnor när man skriver in det. Man loggar in på login_1.php och får loginbekräftelse på login_2.php, som det ser ut nu.

Och så vet jag att jag lyckades få artikel.php att hämta ArtID från querystringen. Dock så ville jag ju att den skulle hämta in lite fler fakta från Artikel-tabellen än bara ID. Men det ville den inte. Hur jag än försökte hämta in Titel, År o.s.v. så visade den bara ArtID.

I boken och övningar vi gjort tidigare hittade jag bara hur man får den att skriva ut data som finns i querystringen. Och hur man skriver ut alla data på en viss rad. Men inte hur man valde ut vissa data. Jag testade en massa olika lösningar, men ingen fungerade. Jag somnade utan en lösning den kvällen...
Jag har för mig att jag tillslut iallfall förstod att det handlade om vad jag skrev efter:
while($minrad = 
Överhuvud taget så tycker jag det är svårt att hitta bland de olika hjälp-hemsidorna.

Fortsättning följer...

01 maj 2006

Länkerfarenheter mm

Igår satt jag ensam i skolan igen. Jag la ner lite för mycket tid på en designidé som ni kan se här i bakgrunden (iallafall i skrivande stund). Dock ser jag nu att den måste förändras lite om den ska fungera i 1024*768. Alltihopa halkar in under texten.

Jag lärde mig den hårda vägen vikten av att placera dubbelfnuttarna rätt när man vill ha något från en tabell automatiska utskrivet med länkar till. Jag flyttade, drog ifrån och la till, och tillslut fungerade det. "Ja just det där måste det va en, och runt den ">" ska det vara både före och efter.

Det tog ett tag, även om det verkar lätt. Så här blev det tillslut:
echo "<a href=artikel.php?ArtID=" . $minrad['ArtID']
. ">" . $minrad['Titel'] . "</a><br />";

Och ser t.ex. ut så här:
Spirited away
Tokyo godfathers
(Länkarna är dock relativa, så de kommer aldrig att fungera här.)

30 april 2006

Mina tankar med webbshoppen

Jo jag ska ju tala om vad jag tänkt mig.
Jag ska sälja japanska animefilmer (d.v.s. animerade filmer).

Första sidan består av ett knippe filmtitlar med länkar till de olika artiklarna, samt regissör- och skådespelarlänkar, där man får se vilka filmer respektive person deltagit i.

På artikelsidorna (filmsidorna) finns fakta om vald film: titel, genre, år, regi, skådespelare och pris. Även en Köp-knapp. När man klickar på den läggs varorna i en varukorg.

På varje sida finns en länk till varukorgen. På varukorgssidan listas de filmer man klickat på Köp vid, med länkar till filmerna samt artikelpris, och totalt pris. Detta blir alltså en bekräftelsesida.

Under de artiklar man valt på varukorgssidan finns en länk till att logga in som användare. På den sidan finns fält för Användarnamn och Lösenord (dessa ska jag lägga till i min kundtabell) och en Skicka-knapp. Och en länk för att registrera sig som ny användare.

På Ny användare-sidan fyller man i namn, adress, anv.namn och lösen etc., vilka registreras i kundtabellen när man väljer att skicka. Sedan kan man direkt logga in på inloggningssidan.

När man loggat in registreras KöpID, artiklar och kund i köp-tabellen och man får ett meddelande om att beställningen skickats.

Blir det för ont om tid får jag göra det mindre omfattande, som t.ex. att ta bort regi- och skådespelar-funktionen. Primärnycklar använder jag ju ändå.

29 april 2006

Ååååååååh vilken dator

Idag har jag suttit ensam i skolan. Eftersom jag kommer behöva använda mig av sessioner i min webbshop så bestämde jag mig för att göra den övningen idag. Så jag satt och pysslade med att anpassa och koppla den till min kundtabell o.s.v.

Men när jag provade att logga in så kom bara mitt felmeddelande "Felaktigt användarnamn eller lösenord, försök igen" upp gång på gång. Lite finjusteringar här och där, testa ditt och datt... Fortfarande samma. Eller nej, ibland stod det att det var ett MySQL-fel. Och fel anv & lösen.

I brist på någon att fråga kom jag på att jag ju kunde kolla hur någon annan i klassen löst det, via ftp:n. Så jag provade två personers lite skilda lösningar och anpassade dem till min databas. Fortfarande samma sak. Pillade lite här och där. Ingen skillnad.

Jag tror jag satt i tre timmar och försökte få inloggningen att fungera.

Sen provade jag Jens hemtenta-inloggning. Den fungerade inte heller. Så då ringde jag honom för att höra om det var något fel på de inloggningsinstruktioner vi fått. Men det hade fungerat för honom. Då provade jag min sida med Explorer. Då fungerade det. Det var Firefox som inte ville! Förmodligen hade det fungerat hela tiden egentligen.

Jag provade med Firefox på en annan dator. Där funkade det. Så det är det Firefox jag sitter med nu som jävlas.

Det var de tre timmarna det. Men de var nog inte helt värdelösa. Jag blev ju tvungen att finkolla allt i php-dokumentet och tror att jag lärde mig en del på det. Både om uppbyggnaden och om de små detaljerna...

Och så blev jag påmind om vikten av att kolla i olika webläsare. Det gjorde jag mycket under Publicering via internet-kursen, men trodde väl inte att det skulle behövas med inloggningen. Men nu vet jag bättre.


Soundtracket idag var DR Jazz, vilket visade sig vara perfekt som bakgrundsmusik. Då och då kommer det in en vänlig stämma och pratar lite danska.

Jo och så har jag såklart skapat de tabeller jag behöver till shoppen.