webForumDet fria alternativet

Klura lite med slarvig kod

ASP

7 svar · 323 visningar · startad av DefenderOfChaos

Medlem sedan dec. 20022 inlägg
Frågan#1

Tjenare!

Jag anser mig fortfarande vara en nybörjara på det här med ASP och sån't, så jag tror ni kan hjälpa mig, om ni har tid och lust dvs.. Jag har gjort ett inloggningsscript.. På sidan man kommer till visas medlemmar som kan posta nyheter, samt ett formulär för att posta nyheter själv. Men jag tror jag har styrt till det och lagt till MASSOR med onödig kod.
Undrar bara om ni kan vara snälla och ta er en titt för att se om det går att förkorta ner koden och lära mig nåt ;) ?

inloggad.asp (inloggning sker också här, som ni säkert ser ;), på "default.asp?path=main" är själva formuläret för inloggnin)

<table border=1 cellspacing=0 bgcolor=#006699 cellpadding=2>
<tr><td background=images/cellpic1.gif height=30 colspan=2>

<% If Request.Querystring("action") = "login" Then

username = (Request.Form("username"))
password = (Request.Form("password"))

Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("db1.mdb")
Set Recset = Server.CreateObject("ADODB.Recordset")
Addera = "SELECT * FROM members Where username = '"& username &"' AND password = '"& password &"'"
Recset.Open Addera, Connect, 3, 3

If Recset.eof Then
Recset.Close
Response.Redirect("default.asp?action=fel")

Else
session("inloggad") = "ja"

End If
End If
%>
<% If Session("inloggad") = "ja" Then %>

<font size=1>
Inloggad
</td></tr><tr><td valign=top bgcolor=white width=200>

<font size=1>
<b>Medlemmar:</b><br><br>
<%
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("db1.mdb")
Set RecSet = Server.CreateObject("ADODB.Recordset")
Addera = "SELECT * FROM members ORDER BY username"

RecSet.Open Addera, Conn, 3, 3
Count = RecSet.Recordcount

Do Until RecSet.EOF
%>

<b>Namn:</b> <%=RecSet("username")%><br>
<b>Master:</b> <%=RecSet("Master")%><br><br>

<%
RecSet.MoveNext
loop
%>

Antal Medlemmar: <%=Count%>
</font>
</td><td valign=top bgcolor=white width=200>
<font size=1>
<%

Recset.Close
%>
<%

Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & server.mappath ("db1.mdb")
Set rs = Server.CreateObject("ADODB.Recordset")
Addera = "SELECT top 5 * FROM nyheter order by id desc"
rs.Open Addera, Connect, 3, 3

If Request.Querystring("action") = "spara" Then

rs.addnew
rs("nyhet") = request.form("nyhet")
rs("rubrik") = request.form("rubrik")
rs("skribent") = request.form("skribent")
rs("datum") = now
rs.update

rs.close
set rs = nothing
connect.close
set connect = nothing

Response.Write("Postat och klart")

End If
%>

<form name="form" method="post" action="default.asp?path=inloggad&action=spara">
Rubrik:<br>
<input type="text" name="Rubrik" class=form>
<br>
Skribent:<br>
<input type="text" name="Skribent" class=form>
<br>
Nyheten:<br></font>
<textarea name="nyhet" class=form></textarea>
<br>
<input type="submit" name="Submit" value="Spara" class=form>
</form>
</td></tr></table>

<% End If %>

Medlem sedan feb. 200112 078 inlägg
#2

Låt mig gissa; webStudio på IDG.se, va? ;)

Dela upp inloggning, uppdatering och addering av data på separata sidor istället för att skilja på dem med en querystring, som du gör nu. Då slipper du problem om någon laddar om sidan, och får även en mer strukturerad applikation/kod. Alltså; en sida för inloggning, en för uppdatering av data, en för radering osv.

Jag delar upp dem i tre olika delar. Först inloggning:

<%
username = Request.Form("username")
password = Request.Form("password") 

Set Connect = Server.CreateObject("ADODB.Connection") 
Connect.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("db1.mdb") 
SQL = "SELECT * FROM members Where username = '"& replace(username,"'","''") &"' AND password = '"& replace(password,"'","''") &"'" 
set rs = connect.execute(SQL)

If not Recset.eof Then 
	session("inloggad") = "ja" 
	set rs = nothing
	set conn = nothing
[red]	response.redirect "nan_sida.asp"[/red]
Else 
	set rs = nothing
	set conn = nothing
	response.redirect "default.asp?action=fel"
End If 
%>

För att visa data:

<% If Session("inloggad") = "ja" Then %> 

<font size=1> 
Inloggad 
</td></tr><tr><td valign=top bgcolor=white width=200> 

<font size=1> 
<b>Medlemmar:</b><br><br> 
<% 
Set Conn = Server.CreateObject("ADODB.Connection") 
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("db1.mdb") 
[blue]'detta ändrar jag inte, eftersom du använder recordcount längre ner, execute funkar inte då. [/blue]
[red]Set RecSet = Server.CreateObject("ADODB.Recordset") 
Addera = "SELECT * FROM members ORDER BY username" 
RecSet.Open Addera, Conn, 3, 3 
Count = RecSet.Recordcount [/red]

Do Until RecSet.EOF 
%> 

<b>Namn:</b> <%=RecSet("username")%><br> 
<b>Master:</b> <%=RecSet("Master")%><br><br> 

<% 
RecSet.MoveNext 
loop 
%> 

Antal Medlemmar: <%=Count%> 
</font> 
</td><td valign=top bgcolor=white width=200> 
<font size=1> 
<% 

set recset = nothing
set conn = nothing

end if
%>

Kod för att uppdatera, formuläret skall du ha på en annan sida, så jag tog bort det. :)

<% 
Set Connect = Server.CreateObject("ADODB.Connection") 
Connect.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("db1.mdb") 
SQL = "INSERT INTO nyheter (nyhet,rubrik,skribent,datum) VALUES ('" & request.form("nyhet") & "','" & request.form("rubrik") & "','" & request.form("skribent") & "',#" & now & "#)"
connect.execute(SQL),,128

set rs = nothing 
set connect = nothing 

Response.Write "Postat och klart"
%>
Medlem sedan dec. 20002 526 inlägg
#3

Override for i hela...........
nyare db-koppling :D, sa andra det sista koden du fick och bytt ut mot:

Set Conn = Server.CreateObject("ADODB.Connection") 
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("db1.mdb")

Hhahah, maste vara korrekt!

Medlem sedan feb. 200112 078 inlägg
#4

Oj då, det såg jag faktiskt inte. :)

RED. Ändrat.

Medlem sedan dec. 20022 inlägg
#5

Tack så mycket!

Jag ska dela upp det på flera sidor ;)

*update*
Jag tar och lägger "visa" och formuläret för posta på samma sida, annars blir det massa onödiga sidor.

if you don't mind ;)

*update*

Medlem sedan feb. 200112 078 inlägg
#6

Gör som du vill. :)

Medlem sedan mars 2002823 inlägg
#7

Ursäkta mig, men i citatet

Override for i hela...........
nyare db-koppling , sa andra det sista koden du fick och bytt ut mot:

kod:--------------------------------------------------------------------------------
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("db1.mdb")
--------------------------------------------------------------------------------

Hhahah, maste vara korrekt!

Ser jag ingen skillnad till den ursprungliga koden?!??

Är jag blind eller har den ursprungliga koden ändrats?

Medlem sedan dec. 20002 526 inlägg
#8

ja....? som override skickade!

265 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
128 ms — deklarationer (db)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)
119 ms — ändringar (db)