V Vinnaren Medlem sedan sep. 2005 833 inlägg Frågan 30 maj 2006 16:03 #1 Hej
Jag håller på att bygga en artikelsida med kommentar funktion.
Det är den sista delen i koden jag behöver hjälp med. Hämtningen av själva kommentarerna till rätt artikel fungerar. Problemet är själva sparningen av nya kommentarer så att de hamnar till rätt artikel
Här är hela koden jag har:
<% Response.Buffer = True %>
<LINK REL=stylesheet HREF="stil.css" TYPE="text/css">
<%
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("../../db/admin.mdb")&";"
Set news = Server.CreateObject("ADODB.Recordset")
Addera = "SELECT artiklar.rubrik, artiklar.bild_nyhet, artiklar.nyhet, artiklar.Datum, artiklar.bild_text, artiklar.last, artiklar.skribent_id, redaktionen.ID, redaktionen.namn, redaktionen.email FROM redaktionen INNER JOIN artiklar ON redaktionen.ID = artiklar.skribent_id WHERE artiklar.id = " &Request.QueryString("visa")
news.Open Addera, Conn, 1, 2
%>
<html>
<head>
</head>
<body link="#000000" vlink="#000000" alink="#000000">
<table border="0" width="400" id="table2" cellspacing="0">
<tr>
<td><font face="Verdana" style="font-size: 7pt"><a href="index.asp">Allsvenskan</a> / <a href="artiklarna.asp">Artikel</a> / <b> <%=news("rubrik")%></b></font></td>
</tr>
</table>
<table border="0" width="178" id="table3">
<tr>
<td><font face="Verdana" style="font-size: 7pt"> </font></td>
</tr>
</table>
<table border="1" cellpadding="0" cellspacing="0" style="border-width:0; border-collapse: collapse" bordercolor="#111111" width="400" id="table1">
<tr>
<td width="100%" style="border-style: none; border-width: medium" align="center"><font face="Verdana"><img class="img" src="<%=news("Bild_nyhet")%>" align="left"></font></td>
</tr>
<tr>
<td width="100%" style="border-style: none; border-width: medium; font-family:Verdana; font-size:10px; font-style:italic"><font class="stor" size="1"><span style="font-weight: 400"><%=news("bild_text")%><br> </span></font></td>
</tr>
<tr>
<td width="100%" style="border-style: none; border-width: medium"><font class="stor" size="4"><%=news("rubrik")%><br></font><font face="Verdana" size="2"><br></font></td>
</tr>
<tr>
<td width="100%" style="border-style: none; border-width: medium"><font style="font-size: 8pt"><%=Replace(news("nyhet"),vbCrLf,"<br>")%></font></td>
</tr>
<tr>
<td width="100%" style="border-style: none; border-width: medium" align="right"><align="right"><font class="text"><b><font face="Verdana" size="2">
<br>
<a href="../om_oss/person.asp?visa=<%=news("id")%>&titel=<%=news("namn")%>');"><%=news("namn")%></a></font><font size="2"> </font></b></font><b><font size="2"><br> </font></b><font size="1" face="Verdana">Publicerad <%=news("datum")%></font></td>
</tr>
</table>
<%
Conn.Execute("update artiklar set last = last + 1 where id = " & CLng(Request.QueryString("visa")))
%>
<%
news.Close
%>
/*Kommentera delen*/
<table border="0" width="400" id="table4">
<tr>
<td><hr><font face="Verdana"><span style="font-size: 8pt; font-weight: 700">
<br>
</span>
<span style="font-size: 9pt; font-weight: 700; text-decoration:underline">
Kommentarer</span><span style="font-size: 9pt"> <br>
</span></font></td>
</tr>
<%
Addera = "SELECT * FROM artikelkommentar WHERE artikel_id = '" &Request.QueryString("visa") & "'"
news.Open Addera, Conn, 1, 2
Do While Not news.EOF
%>
<tr>
<td width="100%"><font face="Verdana"><span style="font-size: 8pt"><b><a href="mailto:<%=news("email")%>"><%=news("namn")%></a></b> </span>
<span style="font-size: 7pt">(<%=news("datum")%>)</span><span style="font-size: 8pt"><br>
<%=news("kommentar")%><hr size="1" noshade color="#000000"></span></font></td>
</tr>
<%
news.MoveNext
Loop
news.close
%>
</tr>
<tr>
<td><font face="Verdana"><span style="font-size: 8pt; font-weight: 700">Kommentera</span><span style="font-size: 8pt"> (E-post frivilligt)</span></font></td>
</tr>
<tr>
<td>
<form method="POST" action="artikel.asp?task=laggtill">
<table border="0" width="222" id="table5">
<tr>
<td width="64"><font face="Verdana">
<span style="font-size: 8pt">Namn</span></font></td>
<td width="148"><input type="text" name="namn" size="20"></td>
</tr>
<tr>
<td width="64"><font face="Verdana">
<span style="font-size: 8pt">E-post</span></font></td>
<td width="148"><input type="text" name="email" size="20"></td>
</tr>
</table>
<p><textarea rows="4" name="kommentar" cols="25"></textarea><br>
<input type="submit" value="Skicka >>" name="skicka"></p>
</form>
</td>
</tr>
</table>
<%
If Request.QueryString("task") = "laggtill" Then
strnamn = SafeSQL(Request.Form("namn"))
stremail = SafeSQL(Request.Form("mail"))
strkommentar = SafeSQL(Request.Form("kommentar"))
strartikel_id = SafeSQL(Request.QueryString("visa"))
strDatum = now()
Addera.Execute("INSERT INTO artikelkommentar (namn,email,kommentar,artikel_id,datum)" & "VALUES (#" & strnamn & "#,'" & stremail & "','" & strkommentar & "','" & strartikel_id& "','" & strdatum& "')")
Set Addera = nothing : Conn.Close : Set Conn = nothing
END IF
%>
<%
Conn.Close
Set news = nothing
Set Conn = nothing
%>
</body>
</html>
Kan man även göra så att IP nummret på den som skriver sparas i databasen?
Tacksam för all hjälp jag kan få :stud
J.N. Medlem sedan apr. 2003 1 660 inlägg HEJ!
Jodå, det är klart det går! Jag brukar alltid spara ip, när och webbläsare när någon utifrån kan spara saker i databasen.
Conn.Execute("INSERT INTO tbl (... posted, remote_adress, http_user_agent)
VALUES (... #" & now() & "#, '" & Request.ServerVariables ("REMOTE_ADDR") & "',
'" & request.servervariables("http_user_agent") & "')")
Fyra råd:
1. Byt namn på Addera till sql/strsql eller annat. Det går bra med Addera, men kan missförstås med att det är en uppdatering av en post du vill göra. Jag trodde det först. Men, du gör som du vill.
2. Lägg css i head, inte utanför. Fungerar säkert nu, men är egentligen fel.
3. Lägg mer av din kod i css, tex "style="border-style: none; border-width: medium""
4. Använd inte pt för storlekar, det hör till utskrifter. Använd em eller px. Eller absolut/relativ storlek, mer ovanligt. http://www.devguru.com/Technologies/css/quickref/css_fontsize.html
V Vinnaren Medlem sedan sep. 2005 833 inlägg ok, då vet jag hur den ska se ut.
Men det största problemet är hur jag får själva sparandet av ny kommentar att fungera?
Som det ser ut nu, så får jag felmeddelandet:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)
[Microsoft][Drivrutin för ODBC Microsoft Access] Syntaxfel (operator saknas) i frågeuttrycket 'artiklar.id ='.
news.asp, line 9
:OO
J.N. Medlem sedan apr. 2003 1 660 inlägg Skriv ut sql-strängen (addera om du inte bytt namn alltså).
Då ser du säkert att du saknar ett värde efter "artiklar.id =" som det korta felmeddelandet ger en vink om. Leta upp varför den inte finns, sedan är det klart!
V Vinnaren Medlem sedan sep. 2005 833 inlägg Addera = "SELECT artiklar.rubrik, artiklar.bild_nyhet, artiklar.nyhet, artiklar.Datum, artiklar.bild_text, artiklar.last, artiklar.skribent_id, redaktionen.ID, redaktionen.namn, redaktionen.email FROM redaktionen INNER JOIN artiklar ON redaktionen.ID = artiklar.skribent_id WHERE [B]artiklar.id = " &Request.QueryString("visa")[/B]
måste vara där felet ligger? men det är ju den som skriver ut kommentaren under artiklen :S
J.N. Medlem sedan apr. 2003 1 660 inlägg Ja, det är ju en select, och de är inte kända för att uppdatera databaser.
Om det är den kod du har längst upp som gäller, har du inget annat som passar. Lösningen är densamma, varför finns inte variabeln?
Koden visar inte att den hämtas.
V Vinnaren Medlem sedan sep. 2005 833 inlägg skrev visst fel innan, det är denna
Addera = "SELECT * FROM artikelkommentar WHERE artikel_id = '" &Request.QueryString("visa") & "'"
som hämtar själva kommentaren. men vilken ska jag ändra så det fungerar?
eller är det på denna felet ligger??
<%
If Request.QueryString("task") = "laggtill" Then
strnamn = SafeSQL(Request.Form("namn"))
stremail = SafeSQL(Request.Form("mail"))
strkommentar = SafeSQL(Request.Form("kommentar"))
strartikel_id = SafeSQL(Request.QueryString("visa"))
strDatum = now()
Addera.Execute("INSERT INTO artikelkommentar (namn,email,kommentar,artikel_id,datum)" & "VALUES (#" & strnamn & "#,'" & stremail & "','" & strkommentar & "','" & strartikel_id& "','" & strdatum& "')")
Set Addera = nothing : Conn.Close : Set Conn = nothing
END IF
%>
J.N. Medlem sedan apr. 2003 1 660 inlägg VAR felet är är väldigt viktigt att veta, och det vet endast du, eftersom du kan köra koden.
Rad 9 bör innebära den rad du skrev om i ditt föregående inlägg.
Det kan knappast vara den andra kodsnutten i ditt senaste inlägg; där existerar artiklar.id överhuvudtaget ej. Dessutom är det en INSERT.
V Vinnaren Medlem sedan sep. 2005 833 inlägg rad 9 är iof denna
news.Open Addera, Conn, 1, 2
men felet får jag när jag trycker på skicka, inget felmeddelande vid hämtningen :r
@nders Medlem sedan juni 2000 32 967 inlägg # ska man ha runt datumvärden.
apostrofer runt text/pm/memo-värden, och ingenting runt tal.
Fixa.
Dessutom:
J.N. skrev:
Skriv ut sql-strängen (addera om du inte bytt namn alltså).
Dvs, ut med den till webbläsaren med response.write istället för att exekvera den.
V Vinnaren Medlem sedan sep. 2005 833 inlägg Addera.Execute("INSERT INTO artikelkommentar (namn,email,kommentar,artikel_id,datum)" & "VALUES ('" & strnamn & "','" & stremail & "','" & strkommentar & "'," & strartikel_id & ",#" & strdatum& "'#)")
sådär?
men vilken sql??
@nders Medlem sedan juni 2000 32 967 inlägg
sådär?
Ja, typ.
men vilken sql??
Den SQL-fråga som inte fungerar är ju den som är intressant... Dvs den du postade. Men det är ointressant att se den så där. Skriv ut den med response.write, så ser vi om värden saknas / är felaktiga.
V Vinnaren Medlem sedan sep. 2005 833 inlägg har ingen response.write :(
V Vinnaren Medlem sedan sep. 2005 833 inlägg ok, men vart ska de ligga? Är det den jag ska ha när jag hämtar kommentarerna?
@nders Medlem sedan juni 2000 32 967 inlägg
@nders skrev:
Dvs, ut med den till webbläsaren med response.write istället för att exekvera den.
Det borde ge en hint om var response.write av SQL-frågan passar.
V Vinnaren Medlem sedan sep. 2005 833 inlägg Alltså här:
response.write ("INSERT INTO artikelkommentar (namn,email,kommentar,artikel_id,datum)" & "VALUES ('" & strnamn & "','" & stremail & "','" & strkommentar & "'," & strartikel_id & ",#" & strdatum& "'#)")
:stud
@nders Medlem sedan juni 2000 32 967 inlägg Japp.
Då skrivs den färdiga SQL-frågan, dvs det databasen tolkar, ut till webbläsaren.
Då kan man lättare se vad som är fel.
V Vinnaren Medlem sedan sep. 2005 833 inlägg får nu ett annat felmeddelande när jag laddar artiklen :S
Feltyp:
Körningsfel i Microsoft VBScript (0x800A01B6)
Objektet stöder inte egenskapen eller metoden.: 'Write'
news.asp, line 82
på rad:
response.write = "SELECT * FROM artikelkommentar WHERE artikel_id = '" &Request.QueryString("visa") & "'"