webForumDet fria alternativet

Kunna kommentera artikel

ASP

55 svar · 1 449 visningar · startad av Vinnaren

Medlem sedan sep. 2005833 inlägg
Frågan#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">&nbsp;</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>&nbsp;</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">&nbsp;</font></b></font><b><font size="2"><br>&nbsp;</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>
&nbsp;</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 &gt;&gt;" 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

Medlem sedan apr. 20031 660 inlägg
#2

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

Medlem sedan sep. 2005833 inlägg
#3

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

Medlem sedan apr. 20031 660 inlägg
#4

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!

Medlem sedan sep. 2005833 inlägg
#5
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

Medlem sedan apr. 20031 660 inlägg
#6

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.

Medlem sedan sep. 2005833 inlägg
#7

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
%>
Medlem sedan apr. 20031 660 inlägg
#8

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.

Medlem sedan sep. 2005833 inlägg
#9

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

Medlem sedan juni 200032 967 inlägg
#10

# 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.

Medlem sedan sep. 2005833 inlägg
#11

Addera.Execute("INSERT INTO artikelkommentar (namn,email,kommentar,artikel_id,datum)" & "VALUES ('" & strnamn & "','" & stremail & "','" & strkommentar & "'," & strartikel_id & ",#" & strdatum& "'#)")

sådär?
men vilken sql??

Medlem sedan juni 200032 967 inlägg
#12

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.

Medlem sedan sep. 2005833 inlägg
#13

har ingen response.write :(

Medlem sedan juni 200032 967 inlägg
#14

Iiiih!

Lägg till det då! :o

Medlem sedan sep. 2005833 inlägg
#15

ok, men vart ska de ligga? Är det den jag ska ha när jag hämtar kommentarerna?

Medlem sedan juni 200032 967 inlägg
#16

@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.

Medlem sedan sep. 2005833 inlägg
#17

Alltså här:

response.write ("INSERT INTO artikelkommentar (namn,email,kommentar,artikel_id,datum)" & "VALUES ('" & strnamn & "','" & stremail & "','" & strkommentar & "'," & strartikel_id & ",#" & strdatum& "'#)")

:stud

Medlem sedan juni 200032 967 inlägg
#18

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.

Medlem sedan sep. 2005833 inlägg
#19

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") & "'"
Medlem sedan juni 200032 967 inlägg
#20

Ta bort =.

272 ms totalt · 4 externa anrop · v20260731065814-full.e96017d9
126 ms — deklarationer (db)
0 ms — hämta statistik (cache)
139 ms — hämta tråd, inlägg och bilagor (db)
130 ms — ändringar (db)