Arkiv för kategori ‘ASP’

Redirecta obefintliga sidor i ASP

söndag, 21 mars, 2010

På en av mina sajter har jag märkt att Google har indexerat sidor som egentligen inte finns. De består bara av sajtens ”skelett”, d.v.s. header, meny och högerkolumn, medan innehållsdelen saknas. Detta problem uppkommer då jag använder mig av s.k. QueryStrings i ASP, där varje sidas innehållsdel väljs beroende på vilken QueryString som anropas i URL:en (sida.asp?page=sida). Det blir dock endast synligt om man råkar länka till en QueryString som inte har något innehåll, vilket jag alltså varit slarvig och gjort.

För att få bort den ”tomma” sidan från Google har jag därför gjort en 301 Permanent Redirect från den felaktiga sidan/QueryStringen till den korrekta adressen. Det ser ut såhär i ASP:

<%@ Language=VBScript %>
<%
aktuellQS = Request.Querystring

IF aktuellQS = ”page=felaktig-querystring” THEN
Response.Status = ”301 Moved Permanently”
Response.AddHeader ”Location”, ”http://www.doman.se/sidan.asp?show=korrekt-querystring
Response.End
END IF
%>

Koden läggs högst upp i den ASP-fil som innehåller den felaktigt indexerade QueryStringen.

Jag tycker det är nödvändigt att få bort innehållslösa sidor från Googles index eftersom de just inte innehåller någonting. I mitt fall så syns ju ändå sajtens navigering, vilket man kan tycka är bra eftersom besökarna då kan klicka sig vidare. Jag tror dock att man tjänar på att hjälpa Google att bara indexera de sidor som faktiskt har ett innehåll. Dessutom så skickar man ju över den eventuella styrka den tomma sidan har till en sida som faktiskt har ett innehåll.

Mer Permanent Redirect i ASP

måndag, 5 oktober, 2009

Jag har tidigare skrivit hur man gör en enkel 301-redirect från domän.se till www.domän.se. Nu har jag börjat använda nedanstående kod för att automatiskt kunna redirecta speciella sidor till adressen som inkluderar www. Placera koden längst upp på alla ASP-sidor du vill använda Permanent Redirect på.

<%@ Language=VBScript %>
<%
aktuellsida = Request.ServerVariables(”URL”)
aktuellQS = ”?” & Request.Querystring

IF ((Request.ServerVariables(”SERVER_NAME”)) = ”doman.se”) THEN
Response.Status = ”301 Moved Permanently”
Response.AddHeader ”Location”, ”http://www.doman.se” & aktuellsida & aktuellQS
Response.End
END IF
%>

Variabeln ”aktuellsida” visas i denna färg, och ”aktuellQS” i denna färg.

http://www.doman.se/sida.asp?page=undersida

Unika Title-taggar med ASP

onsdag, 23 september, 2009

Ur SEO-synpunkt är det viktigt att ha unika Title-taggar för varje sida på din sajt, men det är även viktigt ur ett användarperspektiv. Med unika Title-taggar vit besökaren lätt vilken sida han/hon befinner sig på och var i sidhierarkin. För sökmotorernas del är Title-taggen en viktig källa till sökord som är relevanta för den aktuella sidan.

Här kommer jag visa både hur du skapar automatiskt genererade och manuellt ändringsbara Title-taggar om du använder flera QueryStrings på samma ASP-sida.

Manuellt med olika QueryStrings:

<html>
<head>
<meta http-equiv=”content-
type” content=”text/html; charset=utf-8″>
<meta name=”language” content=”sv”>
<link href=”style.css” type=”text/css” rel=”stylesheet”>

<%If Request.Querystring(”page”) = ”” Then%>
<title>Sajten.se – Startsidan på sajten.se</title>
<%End If%>
<%If Request.Querystring(”page”) = ”kontakta” Then%>

<title>
Sajten.se – Kontakta oss</title>
<%End If%>
</head>
….

Automatiskt genererade från databas:

<html>
<head>
<meta http-equiv=”content-
type” content=”text/html; charset=utf-8″>
<meta name=”language” content=”sv”>
<link href=”style.css” type=”text/css” rel=”stylesheet”>

<%
Set Conn = Server.CreateObject(”ADODB.Connection”)
Conn.Open ”Provider=Microsoft.Jet.OLEDB.4.0;Data Source=” &Server.MapPath(”d_bas\d_bas.mdb”)
Set RecSet = Conn.Execute(”SELECT * FROM en_tabell WHERE pageID=”& Request.Querystring(”page”))
%>

<title>Sajten.se<%=RecSet(”avdelning”)%><%=RecSet(”sidans_titel”)%></title>
<%
Conn.Close
End If
%>

</head>
….

Denna kod är från mina egna sajter och ändrad för att passa som exempel. Det kan hända att den inte fungerar klockrent, men jag hoppas att den ändå hjälper er på traven. För att att den automatiskt genererade Title-taggen ska fungera måste självklart informationen finnas tillgänglig i en databas.

Skriv till Access-databas med ASP

lördag, 5 september, 2009

Tänkte nu göra en liten guide till hur man enkelt skriver information från ett formulär till en Access-databas i ASP. I detta exempel är det en kommentarfunktion från en av mina sajter som får agera exempel. Först börjar vi med att skapa formuläret i HTML, ni får ursäkta den omoderna tabellösningen utan CSS jag använder här. För att göra det snyggare föreslår jag att du sätter en class på alla input och bilder för att styla dem i en extern CSS-fil.

<table width=”550″ align=”left” border=”0″>
<form method=”post” action=”
?do=spara”>
<tr>
<td colspan=”3″ width=”550″><b>Rubrik:</b> (max 45 tecken)<br><input maxlength=”45″ name=”rubrik”></td>
</tr>
<tr>
<td colspan=”3″ width=”550″><b>Text:</b><br><textarea name=”comment”></textarea></td>
</tr>
<tr>
<td width=”245″ valign=”top”><b>Namn:</b><br><input value=”" name=”namn”></td>
<td width=”245″ valign=”top”><b>Hemsida:</b><br><input value=”http://www.” name=”hemsida” ></td>
</tr>
<tr>
<td width=”275″ valign=”top”><b>E-post:</b><br><input value=”" name=”epost”>
</td>
<td width=”275″ valign=”top”><b>Spamskydd:</b><br><img src=”grafik/kod2.jpg”><input value=”" name=”spamprot”></td>
</tr>
<tr>
<td colspan=”3″ width=”550″>
<input type=”submit” value=”Posta kommentar”>
</td>
</tr>
</form>
</table>

När formulärt är färdigt ska vi skriva ASP-koden som hämtar informationen från formuläret, lägger dem i variabler och sedan matar in dem på rätt plats i databasen. Ursäkta att koden är lite slarvigt skriven med en blandning av engelska och svenska.

<%
If Request.Querystring(”do”) = ”spara” Then
Set Conn = Server.CreateObject(”ADODB.Connection”)
Conn.Open ”Provider=Microsoft.Jet.OLEDB.4.0;Data Source=” &Server.MapPath(”databas\db.mdb”)spamprotection = Request.Form(”spamprot”)

If spamprotection = ”34$LkT” Then
SQL = ”Insert Into comments (title,comment,datum,namn,hemsida,epost) Values(‘” & Request.Form(”rubrik”) & ”‘,’” & Request.Form(”comment”) & ”‘,’” & date & ”‘,’” & Request.Form(”namn”) & ”‘,’” & Request.Form(”hemsida”) & ”‘,’” & Request.Form(”epost”) & ”‘)”
Conn.Execute(SQL)
RecSet.Close
Conn.Close
Set RecSet = Nothing
Set Conn = Nothing
Response.Redirect ”kommentarer.asp”
Else
Response.Redirect ”kommentarer.asp”
End If
End If
%>

Spamskydda dina formulär

måndag, 31 augusti, 2009

Tidigare har jag skrivit ett inlägg där jag förklarar hur man skapar ett spamskydd i ASP. Det går ut på att låta besökaren upprepa tecken och siffror som syns i en bild, s.k captcha. Denna metod känner ni säkert igen från alla möjliga webbplatser.

Robert Falkén kommenterade inlägget och gav mig en alternativ metod för att förhindra spamrobotar att posta information via formulär. Han skapar helt enkelt en dold input som döps till något som lätt fångar spamrobotarnas intresse, t.ex. ”link” eller ”url”. Eftersom detta formulärfält är dolt för vanliga besökare så kommer det inte fyllas i av någon utom spamrobotar. Därefter kodar man en enkel funktion som kollar av om fältet är ifyllt eller ej. Är det ifyllt så avbryts postningen av formuläret. Ungefär som i det här exemplet:

<%
spamskydd = Request.Form(”url”)
If spamskydd <> ”” Then
Response.Redirect ”formularsida.asp”
Else
‘Hämta alla fält och mata in i databasen som vanligt
%>

Spamskydd i ASP

tisdag, 23 juni, 2009

Här bjuder jag på ett enkelt spamskydd i ASP. Det har inte släppt igenom en enda spammning på de sajter jag använder det.

Formulär
<form method=”post” action=”?do=save”>
Spamskydd: <img src=”graphics/antispamcode.jpg”><input name=”spamprot”>
</form>

ASP (do=save)
<%If Request.Querystring(”do”) = ”save” Then
Set Conn = Server.CreateObject(”ADODB.Connection”)
Conn.Open ”Provider=Microsoft.Jet.OLEDB.4.0;Data Source=” &Server.MapPath(”database\database.mdb”)

spamprotection = Request.Form(”spamprot”)
If spamprotection = ”5Z3fk” Then
SQL = ”INSERT INTO comments (title,comment,postdate,postername,website) VALUES(‘” & Request.Form(”rubrik”) & ”‘,’” & Request.Form(”comment”) & ”‘,’” & date & ”‘,’” & Request.Form(”namn”) & ”‘,’” & Request.Form(”hemsida”) & ”‘)”
Conn.Execute(SQL)
Response.Redirect ”comments.asp”
Else
Response.Redirect ”comments.asp”
End If
End If%>

Som du säkert ser så har jag bantat ner formuläret till enbart den input som användaren skriver in captcha-koden på bilden. Du skapar alltså en bild (JPG förslagsvis) och ser till att skriva exakt samma teckenkombination i if-satsen i ASP-koden ovan. Om användaren/spamboten skriver in något annat än just den räätta kombinationen så skickas denne tillbaka till formulärsidan utan att något matas in i databasen.

Problem med betygsystem

lördag, 13 juni, 2009

Jag har kört fast i arbetet med att koda ett betygsystem till Favoritrecept.com. Det är ett simpelt script som bara adderar betygen 1-5 till en tabell, och för att få fram snittbetyget så ska den totala summan divideras med antalet betygsättningar. Problemet är bara att jag inte får inmatningen att funka på det aktuella recept-id man befinner sig på. Nu har jag suttit med skiten i tre nätter i rad och börjar bli uppgiven, speciellt eftersom jag misstänker att det är något simpelt misstag jag gjort.

Mer om referrer-scriptet

onsdag, 3 juni, 2009

När jag skrivit klart förra inlägget kom jag på att jag redan har förbättrat det existerande referrer-scriptet en aning. Det handlar om funktionen som kollar upp om den aktuella hänvisande domänen ska blockeras eller matas in i databasen. Tidigare använde jag en lång och svåruppdaterad If-sats där adresserna lagrades direkt i koden. När jag bestämde mig för en ny lösning var denna If-sats redan 25 rader med fyra blockerade domäner per rad.

<%If url <> “www.google.se” AND url <> “www.google.com” AND url <> “www.google.dk” AND url <> “www.google.no” AND url <> “www.google.fi” Then%>

Nu har jag alltså förbättrat scriptet så att det söker igenom rader i en tabell och jämför med den aktuella hänvisningsdomänen för varje besök (som kommer via just en länk).

<%
Set Conn = Server.CreateObject(”ADODB.Connection”)
Conn.Open ”Provider=Microsoft.Jet.OLEDB.4.0;Data Source=” &Server.MapPath(”databasen\refererfilter_databas.mdb”)
Set RecSet = Server.CreateObject(”ADODB.RecordSet”)SQL = ”SELECT * FROM refererfilter WHERE url like ‘%”&url&”%’”
RecSet.Open SQL, Conn

If RecSet.EOF Then
‘Kod för inmatning
Else
End If
%>

Detta gör det mycket lättare att lägga till oönskade domäner/adresser i filtret, t.ex genom ett enkelt adminformulär. Jag kommer lägga upp hela det uppdaterade scriptet här på bloggen senare.

Uppmana besökarna att uppgradera IE6

onsdag, 27 maj, 2009

Jag har skapat en funktion i ASP som automatiskt visar ett meddelande enbart för de som besöker min sajt med Internet Explorer 6. Detta gör det möjligt att upp-märksamma personer om att de kör en föråldrad webbläsare utan att reta upp de andra med varningsmeddelanden som inte rör dem. Använd detta script hur du vill.

Gör en include av filen ie6check.asp i HEAD-taggen på alla dina sidor.
<!–#include file=”includes/ie6check.asp”–>

ie6check.asp
<%
Dim myUA,ua,ua2
myUA = Request.ServerVariables(”HTTP_USER_AGENT”)
ua = lcase(myUA)
ua2 = instr(ua,”msie 6″)
%>

Lägg därefter in en include av filen ie6varning.asp på lämplig plats där du vill visa den stylade div:en som meddelandet finns i.
<!–#include file=”includes/ie6varning.asp”–>

ie6varning.asp
<%
If ua2 > 0 Then
%>
<div style=”width: 550px; float: left; margin-bottom: 20px; border: 2px solid #FFFFFF; padding: 10px; background-color: #000000;”>
<p class=”varningstext_rubrik”>Uppgradera din webbläsare!</p>
<p class=”varningstext”>Du använder den otroligt gamla webbläsaren Internet Explorer 6. Detta gör att denna  sida (och många andra) inte ser ut, och beter sig som de ska. Vi ber dig att uppdatera till en ny version. Här är några bra märken och tillverkare:</p>
<p class=”text”>
<a href=”http://www.microsoft.com/windows/Internet-explorer/default.aspx” target=”_blank”>Internet Explorer</a>,
<a href=”http://www.opera.com/download/” target=”_blank”>Opera</a>,
<a href=”http://www.google.com/chrome” target=”_blank”>Google Chrome</a>,
<a href=”http://sv-se.www.mozilla.com/sv-SE/” target=”_blank”>FireFox</a>
</p>
</div>
<%
Else
End If
%>

Uppdaterar inlägget med en bild som beskriver hur jag föredrar att utforma informationsrutan. Mycket synlig men inte särskilt störande.

Uppfinn hjulet igen!

fredag, 15 maj, 2009

Många anser att det är bättre och smidigare att återanvända gammal kod för olika funktioner på webbplatser. Det främsta argumentet brukar vara att det är tidsbesparande. Jag anser dock att det kan vara dumt i många fall att använda sig av befintliga lösningar. Det handlar om att ha full kunskap om vad koden gör, vilket du har om du skrivit den själv. Det är dessutom utvecklande för dig och dina programmerings- kunskaper.

Det slitna uttrycket ”att uppfinna hjulet igen” syftar som bekant på att det är onödigt att lägga energi på något som redan finns tillgängligt. Men även hjulet har förbättrats genom åren. Bilar kör ju knappast omkring med trästockar som hjul, de har fått gummidäck för att minska buller och friktion m.m. Det jag vill komma till är att jag tycker det är helt ok att vidareutveckla befintlig kod, att kombinera kodstycken för att komma fram till en bättre och effektivare lösning.

Om du vill lära dig programmera och utvecklas inom programmeringen bör du inte enbart använda färdiga lösningar och pussla ihop dem. Alla kan bygga ihop en IKEA-möbel, men man kan inte kalla sig snickare eller hantverkare för den sakens skull.