webForumDet fria alternativet

håller på att göra dett forum men behöver lite hjälp

ASP

45 svar · 1 844 visningar · startad av Mycodez

Medlem sedan feb. 2010445 inlägg
Frågan#1

Jag håller på med ett forum men behöver lite hjälp med det

Detta är koden till att skriva meddelandet till databasen:

<%

const connstring="provider=SQLOLEDB;Data source=*****;user id=******; password=******;initial catalog=******"
set conn= server.CreateObject("ADODB.CONNECTION")
conn.Open(connstring)
fran=session("anvnamn")
till=request("till")
rubrik=replace(request("rubrik"),"'","´")
meddelande=replace(request("inlagg"),"'","´")
SQL="insert into meddelande (fran,till,rubrik,meddelande)"
SQL=SQL & "values('" & fran & "', '" & till & "', '" & rubrik & "','" & meddelande & "')
'response.Write(SQL)
conn.Execute(SQL)
Response.Redirect("gastbok.asp?anvnamn=" & agare)

%>

första frågan detta "till" vad gör den? gör den så alla kan se detta som skrivs i rubrik och i inlägg? att alla kan se sen det som skriv ut på sidan vill ju att alla ska kunna se det (det som gör att man skriver ut det kommer snart)

nu andra saken jag vill att denna kod ska vara anpassad i till min design
den som jag fick fram är detta som ska skriva ut den koden ovan

<table>
<%
'fråga för att hämta alla mina meddelanden, dvs alla som är till mig, mitt användarnamn finns ju i sessionvariabeln
SQL="select * from meddelande where till='" & session("anvnamn")& "' "
SQL=SQL & "order by datum desc "
'kör frågan
set rs=conn.Execute(SQL)
'snurra igeno alla poster
do while not rs.eof
	skriv ut meddelandet
	Response.Write("<tr><td bgcolor=""silver""><table bgcolor=""white"" cellpadding=""3"" border=""1"" cellspacing=""1"">")
	Response.Write("<tr><td>från   </td><td>" & rs("fran") & "</td></tr>")
	Response.Write("<tr><td>datum  </td><td>" & rs("datum") & "</td></tr>")
	Response.Write("<tr><td>rubrik </td><td>" & rs("rubrik") & "</td></tr>")
	Response.Write("<tr><td>text   </td><td>" & rs("meddelande") & "</td></tr>")
	Response.Write("</td></tr></table>")
	Response.Write("<tr><td bgcolor=""white""></td></tr>")
	'hämta bästa meddelande
	rs.movenext
loop

%>

</table>

och den koden vill jag ska anpassa in till min kod som är så här

<body bgcolor="#000000">
<div class="layout">
	<div class="box">
    </div>
	<div class="head">
	</div>
    <div class="box">
    </div>
    <div class="meny">
    	<div class="menybox"></div>
    </div>
    <div class="scrollbox">
    	<div class="text">   
            <table width="700" border="1">
  <tr>
    <td width="115">Insänt av:</td>
    <td width="588">Rubrik:</td>
  </tr>
  <tr>
    <td>Inlägg:</td>
    <td>    här ska Inlägget skrivas ut   </td>
  </tr>
</table>
         
        </div>
    </div>
</div>
</body>

Hoppas det finns någon som kan hjälpa mig med detta.
och gör detta så alla min medlemmar på min sida kan se allt som skrivs ut med skriv ut koden?

Förlåt att det blev lite mycket nu och så hoppas jag att ni förstår vad jag menar.

MVH Mycodez

Medlem sedan aug. 2008815 inlägg
#2

"första frågan detta 'till' vad gör den? gör den så alla kan se detta som skrivs i rubrik och i inlägg? att alla kan se sen det som skriv ut på sidan vill ju att alla ska kunna se det (det som gör att man skriver ut det kommer snart)"

Nej, den gör så att bara den som har samma användarnamn som "till" kan läsa inlägget! Det är svårt att veta hur du har tänkt bygga upp ditt forum. Men den här koder liknar mera "privata meddelanden". Ett forum brukar ha flera olika förbestämda ämnen som bara du kan ändra. Sedan kan medlemmarna skapa egna inlägg i ämnes katalogerna. Sen kan vem som helst svara på inläggen. Det enklaste är att man har tre tabeller i databasen. En där alla ämnen finns, en där alla inlägg finns och en där alla svaren på inläggen finns.

Jag gjorde ett litet diskussions forum förut, då jag använde detta system.
Jag skapade tre tabeller: "Amne", "Inlagg" och "Svar"
i tabellen "Amne", skapade jag 2 kolumner: ID och Amne.
i tabellen "Inlagg", skapade jag 4 kolumner: ID, AmneID, Rubrik och inlagg
i tabellen "Svar", skapade jag 3 kolumner: ID, InlaggID och svar

På startsidan visades alla ämnen ur tabellen "Amne". När man klickade på ett ämne så visades alla Rubriker ur tabellen "Inlagg" som hade samma AmneID som den ID'n som ämnet hade. Och när man klickade på en Rubrik så visades Inlägget och svaren. Du kan lägga till användarnamn och datum och sådant i tabellerna om du vill. Jag har inte kvar koden som jag skrev, men jag hoppas att detta hjälpte dig lite.

För att hjälpa dig med din andra fråga så kan du skriva så här:


<body bgcolor="#000000">
<div class="layout">
	<div class="box">
    </div>
	<div class="head">
	</div>
    <div class="box">
    </div>
    <div class="meny">
    	<div class="menybox"></div>
    </div>
    <div class="scrollbox">
    	<div class="text">

            <table width="700" border="1">
<%
SQL="select * from meddelande where till='" & session("anvnamn")& "' "
SQL=SQL & "order by datum desc "
'kör frågan
set rs=conn.Execute(SQL)
'snurra igeno alla poster
do while not rs.eof
%>
  <tr>
    <td width="115">Insänt av: <%=rs("fran") %></td>
    <td width="588">Rubrik: <%=rs("rubrik") %> </td>
  </tr>
  <tr>
    <td>Inlägg:</td>
    <td><%=rs("meddelande")%></td>
  </tr>
<% rs.movenext
loop %>
</table>
         
        </div>
    </div>
</div>
</body>
Medlem sedan feb. 2010445 inlägg
#3

okej tack. men När du göra tabeller i en SQL databas vad man man ha för Värde på den? är det integer?

Medlem sedan feb. 2010445 inlägg
#4

Ditt svar hjälpa ganska mycket faktiskt

Medlem sedan aug. 2008815 inlägg
#5

Du blandar ihop begreppen lite. SQL är ett språk som nästan alla databaser använder. Det du menar är fömodligen MYSQL som är en databas. De två vanligaste databasen är access och MYSQL.

ID ska vara int och ställas på auto increment. Int står för integer och betyder heltal.

De andra kolumnerna kan vara av typen String. Om du har med datum så kan du sätta den kolumnen till date.

Medlem sedan feb. 2010445 inlägg
#6

Okej .. DÅ har man lärt sig lite nytt. Tack så myckt har hittat massa kod på hur man gör ett forum i asp nu så ska försöka testa den;)

Men en fråga hur gör jag så man skriver ut datumet då det skrev under Insändare som här på Webfroum?

Medlem sedan aug. 2008815 inlägg
#7

Ändra:

    <td width="115">Insänt av: <%=rs("fran") %></td>

till:

    <td width="115">Insänt av: <%=rs("fran") %><br> Senast ändrat: <%=rs("datum") %></td>

Sen får du väll fixa storleken på texten och sådant själv.

Då utgår jag ifrån att du har en kolumn som heter datum och att du lagt in datumet i den när inlägget skrevs. här är en lista på all funktioner i VBSCRIPT som har med datum att göra. http://www.w3schools.com/VBscript/vbscript_ref_functions.asp

"Date" är den funktion som du ska använda. Det finns även många andra funktioner som har med datum att göra. Kan kanske vara intressant att veta.

Medlem sedan feb. 2010445 inlägg
#8

Okej tack så mycket ska pröva detta så får vi se hur det går :)

Medlem sedan feb. 2010445 inlägg
#9

det jag sände först var ju ett privat meddelande. men nu kommer själva Forumet jag har kodat men vet inte riktigt vad som är fel :(
jag får detta fel meddelande när jag ska saka en tråd i mitt forum

Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

[MySQL][ODBC 3.51 Driver][mysqld-5.0.45]You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'meddelande' at line 1

/skapat.asp, line 34

<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>

<body>

<%
 connectionString = "Driver={MySQL ODBC 3.51 Driver};Server=*****;Option=3;Database=*******;Uid=******;Pwd=******;" 

if NOT request.querystring("namn") = "" AND NOT request.querystring("titel") = "" AND NOT request.querystring("meddelande") = "" then

dim namn
dim titel
dim epost
dim meddelande

namn = request.querystring("Namn")
titel = request.querystring("titel")
epost = request.querystring("Epost")
meddelande = request.querystring("meddelande")

set connection = Server.createobject("ADODB.Connection")
set rs = Server.Createobject("ADODB.Recordset")

connection.open connectionString

rs.open "meddelande", connectionString

rs.AddNew

rs("namn") = namn
rs("titel") = titel
rs("epost") = epost
rs("meddelande") = meddelande
rs.update
response.redirect "forum.asp"

else
response.write "Du måste fylla i namn, titel och meddelande för att kunna posta något"
end if
%>

</body>
</html>

rad 34 är
rs.open "meddelande", connectionString

vad kan vara fel?? om ni vill få tag på mer kod kan jag skriva den här

Medlem sedan aug. 2008815 inlägg
#10

Prova med:

sql = "INSERT INTO meddelande (namn,titel,epost,meddelande) VALUES ('"&namn&"', '"&titel&"','"&epost&"','"&meddelande&"')"
connectionString.Execute(sql)

istället för:

set connection = Server.createobject("ADODB.Connection")
set rs = Server.Createobject("ADODB.Recordset")

connection.open connectionString

rs.open "meddelande", connectionString

rs.AddNew

rs("namn") = namn
rs("titel") = titel
rs("epost") = epost
rs("meddelande") = meddelande
rs.update
Medlem sedan aug. 2008815 inlägg
#11

Sen måste du skydda dig mot sql injection.

Skriv:

namn = Replace(request.querystring("Namn"), "'", "''")
titel = Replace(request.querystring("titel"), "'", "''")
epost =Replace( request.querystring("Epost"), "'", "''")
meddelande = Replace(request.querystring("meddelande"), "'", "''")

istället för:

namn = request.querystring("Namn")
titel = request.querystring("titel")
epost = request.querystring("Epost")
meddelande = request.querystring("meddelande")

Så borde du vara säker.

Medlem sedan feb. 2010445 inlägg
#12

jag ändra det och så fick jag detta fel meddelande

Microsoft VBScript runtime error '800a01a8'

Object required: 'Driver={MySQL ODBC 3'

/skapat.asp, line 30

Rad 30 är connectionString.Execute(sql)

<%
 connectionString = "Driver={MySQL ODBC 3.51 Driver};Server=mysql26.kontrollpanelen.se;Option=3;Database=db;Uid=****;Pwd=*****;" 

if NOT request.querystring("namn") = "" AND NOT request.querystring("titel") = "" AND NOT request.querystring("meddelande") = "" then

dim namn
dim titel
dim epost
dim meddelande

namn = Replace(request.querystring("Namn"), "'", "''")
titel = Replace(request.querystring("titel"), "'", "''")
epost =Replace( request.querystring("Epost"), "'", "''")
meddelande = Replace(request.querystring("meddelande"), "'", "''")

sql = "INSERT INTO meddelande (namn,titel,epost,meddelande) VALUES ('"&namn&"', '"&titel&"','"&epost&"','"&meddelande&"')"
connectionString.Execute(sql)

response.redirect "forum.asp"

else
response.write "Du måste fylla i namn, titel och meddelande för att kunna posta något"
end if
%>
Medlem sedan aug. 2008815 inlägg
#13

prova:

set connectionString = createobject("ADODB.Connection") 
 connectionString.open = "Driver={MySQL ODBC 3.51 Driver};Server=mysql26.kontrollpanelen.se;Option=3;Database=web77725_mycodez;Uid=web77725_master;Pwd=flagga;"

istället för:

connectionString = "Driver={MySQL ODBC 3.51 Driver};Server=mysql26.kontrollpanelen.se;Option=3;Database=web77725_mycodez;Uid=web77725_master;Pwd=flagga;"
Medlem sedan aug. 2008815 inlägg
#14

Sen om du vill att det ska stå vilket datum tråden skapades så borde du ha en till kolumn i databasen där du lägger in datumen!

Medlem sedan feb. 2010445 inlägg
#15

Hur ska jag skriva in så Datumet vissas också? om jagf har en kolumn i databasen som heter Datum??

Medlem sedan feb. 2010445 inlägg
#16

Nu funkar det i alla fall att skapa tråden men det finns fortfarande lite så fel i hela forumet känns det som. Men hoppas ni kan hjälpa mig :)

när jag har skapat tråden och klickat på tråden som finns så ska man ju komma in till själva tråden ju, men då får jag detta fel meddelande

Microsoft OLE DB Provider for ODBC Drivers error '80004005'

[Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified

/meddelande.asp, line 22

koden är:

<%

connectionString = "Driver={MySQL ODBC 3.51 Driver};Server=mysql26.kontrollpanelen.se;Option=3;Database=******;Uid=*******;Pwd=******;" 

set connection = server.createobject("Adodb.connection")
set rs = server.createobject("adodb.recordset")
set rs1 = server.createobject("adodb.recordset")

sql = "select * from svar where svarid = " & request.querystring("fid")
sql1 = "select * from meddelande where svarid= " & request.querystring("fid")
connection.open strconn
rs.open sql, strconn
rs1.open sql1, strconn

%>
<%

response.write "HUVUDMEDDELANDE START<br>"
response.write "Namn " &rs1("namn") & "<br></td></tr>"
response.write "Titel : " &rs1("Titel") & "<br>"
response.write "Epost :  " & rs1("epost") & "<br>"
response.write "Meddelande: "&rs1("meddelande") & "<br>"
response.write "HUVUDMEDDELANDE SLUT<p>&nbsp;</p>"

if rs.eof <> "" then
do until rs.eof
%>
<table border="0" width="25%">
<%

%>
svar <%=antal%>
<tr>
<td width="30%">Namn</td>
<td width="50%"><%=rs("namn")%></td>
</tr>
<tr>
<td width="30%">Epost</td>
<td width="50%"><%=rs("email")%></td>
</tr>
<tr>
<td width="30%">Meddelande</td>
<td width="50%"><br><%=rs("meddelande")%></td>
</tr>
</table>

<p>&nbsp;</p>

<%
rs.movenext
loop
end if
%>

Svara på detta meddelande<p>&nbsp;</p>
<form actiOn="svara.asp?fid=<%=request.querystring("fid") %>" method="post">
<table width="40%" border=0>
<tr>
<td width="50%">Namn</td>
<td width="50%"><input type="text" name="txtName"></td>
</tr>
<tr> 
<td width="50%">Epost</td>
<td width="50%"><input type="text" name="txtEpost"></td>
</tr>
<tr>
<td width="50%">Meddelande</td>
<td width="50%"><textarea rows=10 cols=40 name="txtMeddelande"></textarea>
</tr>
</table>
<input type="submit" value="Svara">
</form>
Medlem sedan juni 200032 967 inlägg
#17

Din connectionstring har du ju valt att kalla connectionString - då är det det du ska ange när du ska öppna ditt connectionobjekt:

connection.open connectionString
Medlem sedan aug. 2008815 inlägg
#18

för att skriva datum till databasen:

namn = Replace(request.querystring("Namn"), "'", "''")
titel = Replace(request.querystring("titel"), "'", "''")
epost =Replace( request.querystring("Epost"), "'", "''")
meddelande = Replace(request.querystring("meddelande"), "'", "''")
datum=date

sql = "INSERT INTO meddelande (namn,titel,epost,meddelande,datum) VALUES ('"&namn&"', '"&titel&"','"&epost&"','"&meddelande&"','"&datum&"')"
connectionString.Execute(sql)
Medlem sedan feb. 2010445 inlägg
#19

det var ju ett ganska simpelt fel. men tack för hjälpen. och noshornin okej det måste man ju fixa det, det är ju smidigt att se när tråden/ svaret gjordes ju :)

Medlem sedan feb. 2010445 inlägg
#20

men jag har en fråga till. När man man ska svara på en tråd så blir det bara att else satsen körs e det något fel i koden över eller vad kan det vara för fel?? ser inte vart felet kan vara

<%

connectionString = "Driver={MySQL ODBC 3.51 Driver};Server=mysql26.kontrollpanelen.se;Option=3;Database=******;Uid='******;Pwd=******;" 

if NOT request.form("name") = "" AND NOT request.form("meddelande") = "" then

set connection = server.createobject("Adodb.connection")
set rs = server.createobject("adodb.recordset")
connection.open connectionString

rs.open "svar", connectionString, adopendynamic, adlockpessimistic

svarID = request.Querystring("fid")
namn = request.form("Name")
epost =request.form("Epost")
meddelande = request.form("meddelande")
rs.addnew
rs("svarid") = svarID
rs("namn") = namn
rs("email") = epost
rs("meddelande") = meddelande
rs.update
rs.close
connection.close
response.redirect request.servervariables("HTTP_REFERER")

else
response.write "Du måste fylla i namn och meddelande för att det ska bli sparat."
end if
%>

en fråga till vad menas med response.redirect request.servervariables("HTTP_REFERER")

272 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
145 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)