3
Tags:
asp
Skrevet af
Bruger #2796
@ 18.02.2003
Jeg vil så vise hvordan man laver en simpel tagwall/gæstebog i ASP. Jeg bruger i denne artikel en Access database, og grunden til det er at, det er den database man normalt forbinder ASP med. Man kan sagtens bruge f.eks. MySQL som database i stedet for, men da jeg ikke er sikker på, at alle har installeret en "ASP->MySQL" bro, vil jeg bare bruge Access i denne artikel.
Hvordan gør man?
Når man skal lave et program eller som her en hjemmeside, skal man jo først finde ud af hvordan rammen for ens projekt skal være. Dvs. at jeg, da jeg lavede denne tagwall, først fandt ud af hvordan jeg ville lave de forskellige ting, og derefter kodede det.
Det resulterede i følgende:
1. der skal være en database.
2. der skal kunne indsættes noget i databasen
3. der skal kunne hentes noget fra databasen
De ovenstående punkter er sådan set, alt hvad der skal til, for at man kan lave denne tagwall. Derefter har jeg så fundet ud af hvordan databasen skal opbygges, og derefter har jeg så lavet koden til at indsætte og udtrække data med.
Koden som jeg leverer, skal sættes ind i den rækkefølge som brud-stykkerne kommer i.
Databasen
Først skal vi så lave vores database, og den skal kunne følgende:
1. indeholde et navn
2. indeholde en email
3. indeholde en besked
4. indeholde en dato
Og ud af det kommer følgende:
et ID-felt med autonummerering som er primær nøglen
et OVERSKRIFTs-felt som skal indeholde overskriften
et NAVNe-felt som skal indeholde personens navn
et EMAIL-felt som skal indeholde personens e-mail
et BESKED-felt, som skal indeholde den besked som personen skriver
et DATO-felt, som skal indeholde datoen hvor beskeden blev indsat
Grunden til at BESKED-feltet er af typen "notat", er fordi at denne type kan indeholde mere tekst end et almindeligt felt af typen "tekst".
ASP-koden
Det allerførste som der skal gøres på siden er, at en forbindelse til vores database. Det kommer til at se sådan her ud, hvis man kalder sin database
tagwall.
set conn = server.createobject("ADODB.connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & server.mappath("tagwall.mdb")
conn.open DSN
Det som der sker er, at der forbindes til databasen. Dette regner jeg med at du kan i forvejen og jeg vil derfor ikke komme mere ind på det. Og hvis du ikke kan det, så skal du bare sige "ok" og acceptere at det er sådan det skal se ud.
Så skal vi lige have en lille finesse med på vores side. Dette er følgende:
strMode = Request.QueryString("mode")
Dette stykke kode gør, at hvis der f.eks. står:
http://www.udvikleren.dk/show_article.php?id=176Så er det teksten efter spørgsmål tegnet der vurderes. I min kode, har jeg valgt "
mode" i stedet for "
id". Dette skal bruges når jeg skal vise tagwall/gæstebogen hvor jeg så bruger selve siden
tagwall.asp og når jeg skal indætte en besked i den bruger jeg så
tagwall.asp?mode=addSådan her vil vi fange og indsætte beskeden i vores database. Det kan godt se ud som en stor mundfuld, men der er kommentar i koden, så jeg håber du kan finde ud af det:
' Bruges til at vise de forskellige sider, ved "[b]add[/b]" vises form-tingen,
' ved "ingen ting" vises tagwall/gæstebogen
strMode = request.QueryString("mode")
if request.form("send") <> "" then
strError = ""
' Her "trimmes" de forskellige felter, dvs. blanke fjernes
' hvis de f.eks. står foran et navn: " jimmi"
strOverskrift = trim(request.form("overskrift")) ' Overskriften på beskeden
strNavn = trim(request.form("navn")) ' Navnet som personen har skrevet.
strEmail = trim(request.form("email)) ' Personens e-mail
strBesked = trim(request.form("besked")) ' Beskeden som personens har skrevet
' Her tjekkes der om brugeren har skrevet noget i felterne
' Og hvis der ikke er skrevet noget, skrives fejlen til [b]strError[/b] variablen
if len(strOverskrift) = 0 then
strError = "<li>Du har ikke skrevet noget i feltet Overskrift</li>"
elseif len(strNavn) = 0 then
strError = "<li>Du har ikke skrevet noget i feltet navn</li>"
elseif len(strEmail) = 0 then ' kun hvis en email kræves, ellers fjen den
strError = "<li>Du har ikke skrevet noget i feltet e-mail</li>"
elseif len(strBesked) = 0 then
strError = "<li>Du har ikke skrevet noget i feltet besked</li>"
end if
' Hvis længden af [b]strError[/b] er nul, dvs. hvis der ikke er nogen fejl
' skal det indsættes i databasen
if len(strError) = 0 then
strNavn = Server.HTMLEncode(strNavn) ' Så der ikke kan skrives html-tags
strEmail = Server.HTMLEncode(strEmail) ' Så der ikke kan skrives html-tags
strBesked = Server.HTMLEncode(strBesked) ' Så der ikke kan skrives html-tags
' Her er sql-sætningen som indsætter beskeden i databasen
strSQL = "insert into tbl_tagwall(tag_overskrift,tag_navn,tag_email,tag_besked,tag_dato)"
strSQL = strSQL & " Values('"& strOverskrift &"','"& strNavn &"','"& strEmail &"','"& strBesked &"',Now())"
' Her eksekveres SQL-sætningen
conn.execute(strSQL)
' Her kastes vi tilbage til visningen af tagwall/gæstebog
response.redirect "tagwall.asp"
else
strError = "<center><p><ul><font color=red>"& strError &"</font></ul></p></center>
strMode = "add"
end if
end if
Jeg håber at kommentarene har hjulpet, og giver her en gennemgang af hvad der sker:
1. der tjekkes om noget er sendt fra form scriptet.
if request.form("send") <> "" then2. nogle variabler får værdien af felterne fra form scriptet.
strNavn = trim(request.form("navn"))3. der tjekkes om der står noget i de før lavede variabler, hvis ikke sættes strError lig med en fejl besked.
if len(strOverskrift) = 0 then
strError = "<li>Du har ikke skrevet noget i feltet Overskrift</li>"4. hvis der ikke er nogen fejl, indsættes beskeden i databasen.
if len(strError) = 0 then4/5. ellers udskrives fejlen, og brugeren kan prøve igen
else
strError = "<center><p><ul><font color=red>"& strError &"</font></ul></p></center>
strMode = "add"
Ved at bruge
request.from("bla") kan vi fange det, som bliver sendt til siden via form-scriptet.
Så skal der laves den form som skal sende beskeden til databasen. Dette er bare noget helt almindelig .HTML kode, og det kommer til at se sådan her ud:
' sætter SELECT CASE lig strMode, så der kan vælges sidens indhold, ved at
' bruge "[b]add[/b]" til form scriptet. dvs. [b]tagwall.asp?mode=add[/b]
select CASE strMode
' her laves en CASE som har værdien add.
CASE "add" ' Viser en form hvor man kan indtaste beskeden i.
%> <-- er der så vi ikke skal skrive response.write "bla" foran alt
<table width=400 align=center>
<form action=tagwall.asp method=post>
<tr><td><% response.write strError %></td></tr>
<tr><td>overskrift:</td></tr>
<tr><td><input type=tekst name=overskrift></td></tr>
<tr><td>navn:</td></tr>
<tr><td><input type=tekst name=navn></td></tr>
<tr><td>e-mail:</td></tr>
<tr><td><input type=tekst name=email></td></tr>
<tr><td>besked:</td></tr>
<tr><td><textarea name=besked rows=5 cols=30></textarea></td></tr>
<tr><td><input type=submit value=send name=send></td></tr>
</form>
</table>
<%
Grunden til at linjen
<% response.write strError %> er med, er for at vi kan se den fejl der forekommer, hvis noget er gået galt. (Der kunne også have stået
<% =strError %>, det giver det samme resultat.) Oppe i "indsæt" koden, har vi jo sagt, at der hver gang der er en fejl, sættes en fejl-besked ind i
strError.
Så mangler vi jo bare at lave den kode som skal vise os selve tagwall/gæstebogen. Den kommer så her, og igen bruges
SELECT CASE sætningen. Denne gang bruges der bare "else"-delen af den. Dvs. at det er den del, som vises hvis mode ikke sættes lig noget. Dvs. at der står sådan her
tagwall.asp
CASE ELSE ' Denne case viser tagwallen, dette gøres som standard
' Her vælges alt fra tagwallen, og det sorteres med den nyeste besked først
strSQL = "SELECT * FROM tbl_tagwall ORDER BY tag_id DESC"
set rs = conn.execute(strSQL)
response.write "<table width=500 align=center>"
' link til at tilføje en besked
response.write "<tr><td><a href=tagwall.asp?mode=add>tilføj besked</a></td></tr>"
do while NOT rs.EOF ' Denne løkke køre indtil der ikke er flere beskeder i tagwall/gæstebogen
strOverskrift = rs("tag_overskrift") ' her hentes overskriften
strNavn = rs("tag_navn") ' her hentes navnet
strEmail = rs("tag_email") ' her hentes emailen
strBesked = rs("tag_besked") ' her hentes beskeden
strDato = rs("tag_dato") ' her hentes datoen
%>
<tr><td><% =strOverskrift %> </td></tr>
<tr>
<td>
Skrevet af <a href="mailto:<% =strEmail %>"><% =strNavn %></a> d. <% =strDato %>
</td>
</tr>
<tr><td><% =strBesked %> </td></tr>
<%
rs.movenext ' her tages det næste element i databasen
loop ' "looper" while løkken
response.write "</table>"
END SELECT ' hele select casen sluttes her
conn.close ' database forbindelsen lukkes
set conn = nothing
%>
Det kan godt virke lidt forvirrende at kigge på koden, men det der sker er følgende:
1. en variabel sættes lig med en eksekvering af en SQL-sætning.
set rs = conn.execute(strSQL)2. en løkke køre databasen igennem 1 gang. dvs. at tag_id = 1
3. nogle variabler får værdien af felterne i databasen.
strNavn = rs("navn")4. variablerne udskrives.
<% =strNavn %> samme som
<% response.write strNavn %>5. løkken "tælles op" ved hjælp af
rs.movenext... løkken er færdig med at løbe databasen igennem, og forbindelsen lukkes.
conn.closeDette var hvad der skete i den sidste del af koden. Jeg håber i kan bruge denne gennemgang til noget. Og god programmering... !
Hvad synes du om denne artikel? Giv din mening til kende ved at stemme via pilene til venstre og/eller lægge en kommentar herunder.
Del også gerne artiklen med dine Facebook venner:
Kommentarer (28)
Hmm...?
Jeg forstod ikke helt så meget af den her artikel Jimmi...
Du propper for mange koder ind af gangen, og forklarer dem på en gang.. Derfor bliver til lidt svært at følge med, for dem, der ikke er så erfarne.
Hvis man til gengæld er god til ASP, men ikke lige ved hvordan man opretter en Tagwall, så er det en okay artikel..
Det ville også være bedre, hvis du til sidst lavede den komplette kode, så man lige kunne få et overblik over, hvordan det skulle se ud.
Ja den er sikkert meget god... men jeg kunne ikke rigtig følge med i den! Men nu er jo også absolut nybegynder med det dér asp
Til Thorkil Burup: Som jeg skrev i toppen af artiklen, skal du ligge koden ind, i den rækkefølge den er skrevet... (kodestykke efter kodestykke). Og du har nok ret i, at jeg skulle dele den noget mere op... Det må jeg lave, næste gang jeg laver en artikel. Tak for kommentaren
SKOOD!!!! DER ER JO 10000000000000000 FEJL!!!!!!!!
niks... kun 3...
1. der skal lige være en <% til at starte med...
2. omkring linje 20, skal være sådan: strEmail = trim(request.form("email"
) ' Personens e-mail
3. omkring linje 53, skal være sådan: strError = "<center><p><ul><font color=red>"& strError &"</font></ul></p></center>"
små fejl, men godt du så dem...
Du skriver dette stykke kode to gange.
strMode = Request.QueryString("mode"
I kodestykke 2 og starten af kodestykke 3.
Hilsen
Morten
Nu har jeg længe prøvet at lave en guestbook uden held. Så denne gang prøver jeg at lave en i ASP. Men mit problem er at jeg ikke kan lave databasen for jeg har ikke MS Access. Kan jeg ikke for en til at sende mig databasen fra access til viper@danbonet.dk. Så ville jeg blive meget glad.
skod det virker da af l... til.
Jeg synes det er meget godt gennemgået, men jeg kan ikke finde ud af, hvilken tekststreng der skal indsættes i hvilken fil. Hvad skal der indsættes i tagwall.asp?
tekststreng... hvad mener du?
kodestykker eller hvad? for de skal alle være i den fil.
jeg sys det er en meget god guide men jeg kan bar ikk få den til at virke for når jeg har lavet det hele ved den og gå ud og vil prøve den går det hele meget godt indtil at jeg siger send for der siger den at siden kan ikke vises men ellers syntes jeg at det er gået meget godt men nu er det også første gang jeg prøver at lave det så !...
Hvis du skriver problemet, så kan jeg måske hjælpe dig...
For en nybegynder for mig fattede jeg mins af den artikel... det kunne være fedt hvis den kunne blive forenklet lidt... eller hvis du gad at skrive den færdige kode til sidst!
Ville jeg gerne, men problemet ligger i, at jeg har skrevet denne artikel INDEN artikel systemet blev lavet om... Derfor kan jeg ikke redigere i denne artikel. Jeg har dog bragt problemet på banen i forummet, men der er ikke sket noget ved det...
Ehhh...
Hvor er den side der viser alle beskederne?
det sidste stykke kode...
Hey
Efter min mening er det en god guide, men med en del små fejl. Måske sku du ha skrevet lidt om hvordan man lavede den database helt fra bunden, så nybegynder også ku være med.
Ka ikk lig husk det , men ellers ogs lig at det hele ska lig i to filer nemlig tagwall.mdb og tagwall.asp...
Den virker fint hos mig, nu ska jeg bar lig ha rettet lidt på designet, for det er sku ikk det kønneste at se på, hehe.
Hey
Efter min mening er det en god guide, men med en del små fejl. Måske sku du ha skrevet lidt om hvordan man lavede den database helt fra bunden, så nybegynder også ku være med.
Ka ikk lig husk det , men ellers ogs lig at det hele ska lig i to filer nemlig tagwall.mdb og tagwall.asp...
Den virker fint hos mig, nu ska jeg bar lig ha rettet lidt på designet, for det er sku ikk det kønneste at se på, hehe.
hva fanden der kom sku to sry...
ja, det er også noget gammelt arbejde jeg havde lavet, som jeg lige ville ligge ind. Det reflekterede hvad jeg kunne lave i asp (for 4 år siden) og ville lige dele den med jer
Men ja, jeg er ikke grafiker, så...
Jimmy cant you right in english please ?
Synes din artikel er dårlig..
Den har vel hendvendt sig til nybegyndere..
Også er det nok med bare at oprette forbindelse til DB'en og hente med rs("et eller andet")..
Nybygndere fatter ikke str, trim,, replace .. ;P Osv!
Bare forklar hvordan man add'er til DB, og henter fra den .. Det ville MANGE nye være glade for ..
Jeg har et og sige: PHP ;D
God artikel.
Jeg lærte virkelig noget som jeg kan bruge.
Man kan bruge andre programmer en MS Access for at redigere en Access DB. Søg på google!
hejsa forstå ik noget af det der men vil lige spørg om der er en som kan hjælpe mig med at lave en tagwall?
hejsa forstå ik noget af det der men vil lige spørg om der er en som kan hjælpe mig med at lave en tagwall?
Du skal være
logget ind for at skrive en kommentar.