webForumDet fria alternativet

utan epost kan sidan ej visas

ASP

21 svar · 1 029 visningar · startad av PLks

Medlem sedan sep. 2004201 inlägg
Frågan#1

Hej jag har gjort en gästbok. Den funkar om eposten angivits..
Men om epost saknas så kommer en sida upp:

Ett problem uppstod med sidan du försöker nå och den kan inte visas.

Skulle behöva Er hjälp med en kodsnutt som säger:

Om eposten inte är i fylld så visa saknas.html

Medlem sedan juni 200032 967 inlägg
#2
If Request.Form("epost") = "" then response.redirect "saknas.html"

Det känns dock inte som rätt lösning. Jag skulle uppskatta om jag istället fick chansen att fylla i e-postadressen, inte bli ivälgskickad till något konstigt ställe.

Mvh

Medlem sedan sep. 2004201 inlägg
#3

tack för ditt inlägg

@nders skrev:

Det känns dock inte som rätt lösning. Jag skulle uppskatta om jag istället fick chansen att fylla i e-postadressen, inte bli ivälgskickad till något konstigt ställe

meningen är att på sidan saknas.html skallman få chansen att fylla i...

En fråga till:
På sidan skriv.html har skall anges

  1. namn
  2. epost
  3. meddelande
<table width="600" border="0">
  <tr>
    <td>
      <form name="skriv" method="post" action="add.asp">
        <p><br>
          Namn:<br>
          <input type="text" name="namn" size="50">
        </p>
        <p>E-post<br>
          <input type="text" name="mail" size="50">
 </p>
        <p>Meddelande:<br>
          <textarea name="message" cols="70"></textarea>
        <p align="right">
          <input type="submit" name="skriv" value="L&auml;gg till">
        
      </form>
    </td>
  </tr>
</table>

add.asp

<%
Set gbok = Server.CreateObject( "Adodb.Connection" )
gbok.Provider = "Microsoft.Jet.OLEDB.4.0"
MdbFilePath = Server.MapPath("\plelkes\db\guests.mdb")
gbok.ConnectionString = "Data Source='" & MdbFilePath & "'"
gbok.open

namn = Request.Form("namn")
Epost = Request.Form("mail")
Message = Request.Form("message")

strSQL = "INSERT INTO guestbook(namn, Epost, Message, Datum) VALUES('" & namn & "','" & Epost & "','" & Message & "','" & now() & "')"

gbok.Execute( strSQL )
Set gbok = Nothing

Response.Redirect "gastboken.asp"
 %>

Kan jag och i så fall hur fixar jag att på sidan saknas.html så finns namn och meddelande kvar?

Medlem sedan juni 200032 967 inlägg
#4

Jag hade gjort så här:

  1. Lägg formuläret på en asp-sida (samma asp-sida som koden som lägger in i databasen).
  2. Kolla med en if-sats innan du lägger in informationen så allt har skickats.
  3. Om inte allt har skickats, skriv ut formuläret igen, och gör utskrifter av det postade datat till value-attributen i fälten. Ex:
<input type="text" name="foo" value="<% = Request.Form("foo") %>">

mvh

Medlem sedan sep. 2004201 inlägg
#5

Ursäkta @nders, menjag förstår inte riktigt

Om inte allt har skickats, skriv ut formuläret igen, och gör utskrifter av det postade datat till value-attributen i fälten. Ex:
kod:--------------------------------------------------------------------------------<input type="text" name="foo" value="<% = Request.Form("foo") %>">--------------------------------------------------------------------------------

kan du förtydliga lite?
säg att eposten saknas. Hur skulle du skriva koden?

Fråga2:
du menar att formuläret skulle flytta in till add.asp? Men då måste jag väl ändra koden

<form name="skriv" method="post" action="add.asp">

hur då?

Medlem sedan jan. 20022 440 inlägg
#6
<%
	Select Case cmd
	Case ""
%>
<table width="600" border="0">
  <tr>
	<td>
	  <form name="skriv" method="post" action="denna.asp?cmd=Send">
	  <p><br>
		  Namn:<br>
		  <input type="text" name="namn" size="50" value="<%= Request.Form("namn")%>"></p>
		<p>E-post<br>
		  <input type="text" name="mail" size="50" value="<%= Request.Form("mail")%>"></p>
		<p>Meddelande:<br>
		  <textarea name="message" cols="70"><%= Request.Form("message")%></textarea>
		<p align="right">
		  <input type="submit" name="skriv" value="Lägg till">		
	  </form>
	</td>
  </tr>
</table>
<%
	Case "Send"
		If Epost <> "" Then
			namn = Request.Form("namn")
			Epost = Request.Form("mail")
			Message = Request.Form("message")
			
			Response.Write "Lyckades få in: " & namn & vbCrlf _
							& Epost & vbCrlf _
							& "<p>" & Message & "</p>"
		Else
			Response.Redirect("denna.asp")
		End If
End Select
%>
Medlem sedan sep. 2004201 inlägg
#7

Får det inte till det hela = oavsett vad jag skriver, så det enda som händer när jag trycker på "lägg till" är att sidan add1.asp visas igen - oifylld

<html>
<head>
<title>Skriv i g&auml;stboken</title>

</head>
<body bgcolor="#FFFFFF" text="#000000">
<%
	Select Case cmd
	Case ""
%>

<table width="600" border="0">
  <tr>
    <td>
      <form name="skriv" method="post" action="add1.asp?cmd=Send">
        <p><br>
          Namn:<br>
          <input type="text" name="namn" size="50">
        </p>
        <p>E-post<br>
          <input type="text" name="mail" size="50">
 </p>
        <p>Meddelande:<br>
          <textarea name="message" cols="70"></textarea>
        <p align="right">
          <input type="submit" name="skriv" value="L&auml;gg till">
        
      </form>
    </td>
  </tr>
</table>
<%
Set gbok = Server.CreateObject( "Adodb.Connection" )
gbok.Provider = "Microsoft.Jet.OLEDB.4.0"
MdbFilePath = Server.MapPath("\plelkes\db\guests.mdb")
gbok.ConnectionString = "Data Source='" & MdbFilePath & "'"
gbok.open

namn = Request.Form("namn")
Epost = Request.Form("mail")
Message = Request.Form("message")

Case "Send"
If Request.Form("epost") <> "" Then
  strSQL = "INSERT INTO guestbook(namn, Epost, Message, Datum) VALUES('" & namn & "','" & Epost & "','" & Message & "','" & now() & "')"
  gbok.Execute( strSQL )
  Set gbok = Nothing
  Response.Redirect "gastboken.asp"

Else
  Response.Redirect "add1.asp"
End If
End Select

 %>
</body>
</html>

Det jag vill göra är:

  1. om alla fälten är i fyllda -> gå till gastboken.asp
  2. om epost saknas -> tillbaka till add1.asp + namnet ifylld + meddelandet ifylld
Medlem sedan juni 200032 967 inlägg
#8
  1. Kontrollera att alla fälten är ifyllda innan du lägger in i databasen.
  2. Om fel, skriv ut postade värden till value-attribut och liknande i formuläret.
  3. Gör bara redirect efter du stoppat in i databasen, inte om du ska visa formuläret igen, då tappar du värdena.

Något sånt här:

<html>
<head>
<title>Skriv i gästboken</title>

</head>
<body bgcolor="#FFFFFF" text="#000000">
<%
namn = trim(Request.Form("namn"))
Epost = trim(Request.Form("mail"))
Message = trim(Request.Form("message"))

if namn = "" or Epost = "" or Message = "" then
if request.form("skriv") <> "" then response.write "Du måste fylla i alla fält<br>"

%>

<table width="600" border="0">
  <tr>
    <td>
      <form name="skriv" method="post" action="add1.asp?cmd=Send">
        <p><br>
          Namn:<br>
          <input type="text" name="namn" size="50" value="<%=Server.htmlencode(namn)%>">
        </p>
        <p>E-post<br>
          <input type="text" name="mail" size="50" value="<%=Server.htmlencode(Epost)%>">
 </p>
        <p>Meddelande:<br>
          <textarea name="message" cols="70"><%=Server.htmlencode(Message)%></textarea>
        <p align="right">
          <input type="submit" name="skriv" value="Lägg till">
        
      </form>
    </td>
  </tr>
</table>
<%
end if

if namn <> "" and Epost <> "" and Message <> "" then
	Set gbok = Server.CreateObject( "Adodb.Connection" )
	gbok.Provider = "Microsoft.Jet.OLEDB.4.0"
	MdbFilePath = Server.MapPath("\plelkes\db\guests.mdb")
	gbok.ConnectionString = "Data Source='" & MdbFilePath & "'"
	gbok.open
	strSQL = "INSERT INTO guestbook(namn, Epost, Message, Datum) VALUES('" & namn & "','" & Epost & "','" & Message & "','" & now() & "')"
	gbok.Execute( strSQL )
	Set gbok = Nothing
	Response.Redirect "gastboken.asp"
End If

 %>
</body>
</html>
Medlem sedan juni 200032 967 inlägg
#9

Glöm inte heller bort att skydda dig mot SQL injection på inmatade värden.

Medlem sedan sep. 2004201 inlägg
#10

tack @nders för dina svar! Skall kolla så snart jag kommer hem.
Ser redan att
men vad är

Glöm inte heller bort att skydda dig mot SQL injection på inmatade värden.

vad är

  1. SQL injection
  2. hur skyddar man?
Medlem sedan feb. 20034 441 inlägg
#11

PLks skrev:

  1. SQL injection
  2. hur skyddar man?

Sök lite här i Aspforumet så lär du hitta många trådar som förklarar ovanstående.

Medlem sedan maj 200010 687 inlägg
#12

@nders skrev:

Jag hade gjort så här:

  1. Lägg formuläret på en asp-sida (samma asp-sida som koden som lägger in i databasen).
  2. Kolla med en if-sats innan du lägger in informationen så allt har skickats.
  3. Om inte allt har skickats, skriv ut formuläret igen, och gör utskrifter av det postade datat till value-attributen i fälten. Ex:
<input type="text" name="foo" value="<% = Request.Form("foo") %>">

mvh

Vettigt kan ju vara att ha en Server.HTMLEncode på Request.Form("foo"). Annars flippar formuläret om man har med ett citattecken.

Medlem sedan juni 200032 967 inlägg
#13

Erik Juhlin skrev:

Vettigt kan ju vara att ha en Server.HTMLEncode på Request.Form("foo"). Annars flippar formuläret om man har med ett citattecken.

Absolut. Därför hade jag med det i mitt senaste kodförslag. :)

Mvh

Medlem sedan sep. 2004201 inlägg
#14

Tack @nders, din kod funkar klockrent! (som vanligt)
Fick ett nytt probelm:
kan ej skicka mail med nedanstående kod:

Response.Write "<BR><A HREF=""rsGbok('Epost')"">Skicka insändaren E-post:  </A>"
Medlem sedan juni 200032 967 inlägg
#15
Response.Write "<BR><A HREF=""mailto:" & rsGbok("Epost") & """>Skicka insändaren E-post:  </A>"

Red. pga extrem klantig- och blindhet.

Medlem sedan sep. 2004201 inlägg
#16

Response.Write "<BR><A HREF="mailto:<%=rsGbok('Epost')%>">Skicka insändaren E-post: </A>"

verkar vara fel med koden:
sidan kan ej visas..

Medlem sedan juni 200032 967 inlägg
#17

Sorry. Det ska inte vara apostrofer runt fältnamnet från recordsetet, utan citationstecken. Copy / Paste-fel från din kod...

Dessutom: Bort med egna http-felmeddelande i IE så får du vettiga felmeddelanden istället för "Sidan kan inte visas".

Det går ju inte att felsöka om du inte får reda på felmeddelandet.

Medlem sedan sep. 2004201 inlägg
#18

Trots att jag har flyttat apostrofer fram och tillbaka får jag

Microsoft VBScript compilation error '800a0409'

Unterminated string constant

/plelkes/gastboken.asp, line 77

Response.Write "<BR><A HREF=""mailto:<%=rsGbok(""Epost"")
---------------------------------------------------------^

Medlem sedan juni 200032 967 inlägg
#19

//Red: Dumheter! :D

Se nedan istället.

Medlem sedan juni 200032 967 inlägg
#20

Jag ser iofs att jag har varit alldeles för snabb på tangenterna. Krångla mindre är mitt råd till mig själv, och framför allt: skriv rätt. ;)

Nytt förslag:

Response.Write "<BR><A HREF=""mailto:" & rsGbok("Epost") & """>Skicka insändaren E-post:  </A>"
279 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
137 ms — deklarationer (db)
0 ms — hämta statistik (cache)
139 ms — hämta tråd, inlägg och bilagor (db)
137 ms — ändringar (db)