Avatar billede Slettet bruger
02. august 2005 - 06:55 Der er 25 kommentarer og
1 løsning

Ala autobud på auktion

Jeg sidder og fifler lidt med et lille auktionsscript, og er løbet ind i et problem...hvordan laver jeg fast budforøgelse på fx 50 kr pr bud... hvis der fx er budt 400 kr skal den der byder næste gang bude 450... hvordan får jeg scriptet til automatisk at ligge 50 kr på hvert bud?
bud.asp:
<form action="form_ac.asp" method="post">
<div align="center">
<center>
<table border="0" cellpadding="0" cellspacing="0" width="381">
<tr>
<td width="80">Navn:</td>
<td width="381"><input type="text" name="navn" size="20" maxlength="255"></td>
</tr>
<tr>
<td width="80">Adresse:</td>
<td>
<input type="text" name="adresse" size="20"></td>
</tr>
<tr>
<td width="80">Postnr:</td>
<td>
<input type="text" name="postnummer" size="4"></td>
</tr>
<tr>
<td width="80">By:</td>
<td>
<input type="text" name="town" size="20"></td>
</tr>
<tr>
<td width="80">Telefon:</td>
<td>
<input type="text" name="telefon" size="20"></td>
</tr>
<tr>
<td width="80">Email:</td>
<td>
<input type="text" name="email" size="20"></td>
</tr>
<tr>
<td width="80">Næste bud</td>
<td>
<input type="text" name="bud" size="6">
Dkr.</td>
</tr>
</table>
</center>
</div>
<p align="center"><input type="submit" value="Send bud" name="Send" class="button"></p>
</form>
<p>

form_ac.asp
<%
  ' Declaring variables
  Dim navn, adresse, postnummer, town, telefon, email, bud, data_source, con, sql_insert

  ' A Function to check if some field entered by user is empty
  Function ChkString(string)
  If string = "" Then string = " "
  ChkString = Replace(string, "'", "''")
  End Function

sql = "SELECT * from users where Id = " & ChkString(Request.Form("id")) & ""
If ChkString(Request.Form("users")) > bud Then
Response.Write "Du har budt under det foregående bud. Det kan du ikke."
Else
rs.Close
Set rs = Nothing

  ' Receiving values from Form
  navn = ChkString(Request.Form("navn"))
  adresse = ChkString(Request.Form("adresse"))
  postnummer = ChkString(Request.Form("postnummer"))
  town = ChkString(Request.Form("town"))
  telefon = ChkString(Request.Form("telefon"))
  email = ChkString(Request.Form("email"))
  bud = ChkString(Request.Form("bud"))
  Id = ChkString(Request.Form("Id"))

  data_source = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & _
            Server.MapPath("form.mdb")
sql_insert = "insert into users (navn, adresse, postnummer, town, telefon, email, bud, dato) values ('" & navn & "', '" & adresse & "', '" & postnummer & "', '" & town & "', '" & telefon & "', '" & email & "', '" & bud & "','"&date()&"')"
   
' Creating Connection Object and opening the database
  Set con = Server.CreateObject("ADODB.Connection")
  con.Open data_source
  con.Execute sql_insert
  ' Done. Close the connection
  con.Close
  Set con = Nothing
  Response.Write "<FONT FACE='VERDANA' SIZE='2'>Tak for dit bud.</FONT><br>"
      ' =============================================
Set JMail = Server.CreateObject("JMail.SMTPMail")
JMail.ContentType = "text/html"
JMail.ServerAddress = "mail3.cliche.dk"
JMail.Priority = 1
JMail.Sender = "test@test.dk"
JMail.AddRecipientEx "test@test.dk", ""
Jmail.AddRecipientCC "test@test.dk"
Jmail.AddRecipientBCC "test@test.dk"
JMail.Subject = "Der er givet et bud.."
JMail.Body = "Der er givet et bud."
JMail.Execute
Set JMail = Nothing

End if
%>
<p>
Avatar billede lund_dk Praktikant
02. august 2005 - 08:17 #1
Du trækker bare det sidste bud ud af databasen og ligger 50 kr oven i.

<%
Naestebub = rs("bud") + 50
%>
Avatar billede Slettet bruger
03. august 2005 - 00:22 #2
Jeg har fået det virke som det skal og dog...
når jeg forsøger at byde, så kommer den med denne fejl:
"Du har budt under det foregående bud. Det kan du ikke."
i form_ac.asp er der "lås på så der ikke kan bydes under det beløb der der er budt...så jeg rettede min form_ac.asp til dette:
<%
  ' Declaring variables
  Dim navn, adresse, postnummer, town, telefon, email, bud, data_source, con, sql_insert

  ' A Function to check if some field entered by user is empty
  Function ChkString(string)
  If string = "" Then string = " "
  ChkString = Replace(string, "'", "''")
  End Function

sql = "SELECT * from users where Id = " & ChkString(Request.Form("id")) & ""
If ChkString(Request.Form("users")) <= bud Then
Response.Write "Du har budt under det foregående bud. Det kan du ikke."
Else
rs.Close
Set rs = Nothing

  ' Receiving values from Form
  navn = ChkString(Request.Form("navn"))
  adresse = ChkString(Request.Form("adresse"))
  postnummer = ChkString(Request.Form("postnummer"))
  town = ChkString(Request.Form("town"))
  telefon = ChkString(Request.Form("telefon"))
  email = ChkString(Request.Form("email"))
  bud = ChkString(Request.Form("bud"))
  Id = ChkString(Request.Form("Id"))

  data_source = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & _
            Server.MapPath("form.mdb")
sql_insert = "insert into users (navn, adresse, postnummer, town, telefon, email, bud, dato) values ('" & navn & "', '" & adresse & "', '" & postnummer & "', '" & town & "', '" & telefon & "', '" & email & "', '" & bud & "','"&date()&"')"
   
' Creating Connection Object and opening the database
  Set con = Server.CreateObject("ADODB.Connection")
  con.Open data_source
  con.Execute sql_insert
  ' Done. Close the connection
  con.Close
  Set con = Nothing
  Response.Write "<FONT FACE='VERDANA' SIZE='2'>Tak for dit bud.</FONT><br>"
      ' =============================================
Set JMail = Server.CreateObject("JMail.SMTPMail")
JMail.ContentType = "text/html"
JMail.ServerAddress = "mail3.cliche.dk"
JMail.Priority = 1
JMail.Sender = "  test@test.dk" 
JMail.AddRecipientEx "  test@test.dk",  ""
Jmail.AddRecipientCC "  test@test.dk" 
Jmail.AddRecipientBCC "  test@test.dk" 
JMail.Subject = "Der er givet et bud.."
JMail.Body = "Der er givet et bud."
JMail.Execute
Set JMail = Nothing

End if
%>
men får denne fejl:
Microsoft VBScript runtime error '800a01a8'

Object required: 'rs'

form_ac.asp, line 67


line 67 rs.Close
Avatar billede softspot Forsker
03. august 2005 - 00:28 #3
Hvad står der i de foregående linier? Har du erklæret rs og er den åben?

Det ser umiddelbart spøjst ud at du starter en else-del med at lukke et recordset (formoder jeg det er pga. navngivning), det vil jeg da anbefale at du gør i forbindelse med at du aflæser data fra dette recordset...
Avatar billede Slettet bruger
03. august 2005 - 00:33 #4
der står:
sql = "SELECT * from users where Id = " & ChkString(Request.Form("id")) & ""
If ChkString(Request.Form("users")) <= bud Then
Response.Write "Du har budt under det foregående bud. Det kan du ikke."
Else
rs.Close
Set rs = Nothing
Avatar billede softspot Forsker
03. august 2005 - 00:35 #5
Ok, hvis der ikke står andet, hvorfor lukker du så rs???
Avatar billede Slettet bruger
03. august 2005 - 00:42 #6
jeg slettede rs.Close så virker det fint men scriptet ligger ikke 50 kr oveni det bud der er givet...
Avatar billede softspot Forsker
03. august 2005 - 01:06 #7
Jeg forstår ikke helt sammenhænget, for det ser ud til at du har indlæst nogle data inden dette kode bliver udført og jeg kan heller ikke se hvor din kode rent faktisk lægger 50 kr. til det eksisterende bud (hvorfor skal den egentlig det, hvis brugeren har angivet et bud der er højere end det eksisterende, er det vel det der skal gælde...? Hvis ikke så ville jeg nok vælge at skrive de 50 kr. som en fast tekst og så lave en knap der forøgede buddet - Nå, det skal jeg ikke blande mig i). Ej heller kan jeg se hvor det eksisterende bud bliver hentet - jeg kan bare se at den variabel der hedder bud bliver sammenlignet med en non-eksistent formværdi (users)...

Er bud en streng i databasen, jeg ville tro det skulle have været et tal (det gør i det mindste addition af værdier lidt lettere).

Som du kan fornemme mangler jeg lidt information inden jeg kan hjælpe dig videre... håber du har mod på at føre mig ind i sagerne :)
Avatar billede Slettet bruger
03. august 2005 - 01:11 #8
siden hvor budet skrives ser således ud:
<%
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "PROVIDER=MSDASQL;DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("form.mdb") & ";UID=admin;PWD=;"
Set rs = Server.CreateObject("ADODB.RecordSet")
sql = "SELECT * FROM users"
set rs = conn.execute(sql)

bud = RS("bud") + 50
%>
<form action="form_ac.asp" method="post">
<div align="center">
<center>
<table border="0" cellpadding="0" cellspacing="0" width="381">
<tr>
<td width="80">Navn:</td>
<td width="381"><input type="text" name="navn" size="20" maxlength="255"></td>
</tr>
<tr>
<td width="80">Adresse:</td>
<td>
<input type="text" name="adresse" size="20"></td>
</tr>
<tr>
<td width="80">Postnr:</td>
<td>
<input type="text" name="postnummer" size="4"></td>
</tr>
<tr>
<td width="80">By:</td>
<td>
<input type="text" name="town" size="20"></td>
</tr>
<tr>
<td width="80">Telefon:</td>
<td>
<input type="text" name="telefon" size="20"></td>
</tr>
<tr>
<td width="80">Email:</td>
<td>
<input type="text" name="email" size="20"></td>
</tr>
<td width="80">Næste bud</td>
<td>
<input type="text" name="bud" size="6" VALUE="<%=Bud%>"> Dkr.</td>
</tr>
</tr>
</table>
</center>
</div>
<p align="center"><input type="submit" value="Send bud" name="Send" class="button"></p>
<p align="center"><font face="Verdana" size="1"><a href="vis.asp">Tilbage </a></font></p>
</form>
<p>
<%
Conn.Close
Set Conn = Nothing
%>
Avatar billede softspot Forsker
03. august 2005 - 01:31 #9
Jeg synes din forspørgsel på hvad bud skal være er lidt vidtfavnende (iblandt alle brugere tager du den første og bedstes bud som du så bruger som det næste... eller hvad?). Jeg ville forvente en lidt mere specifik forspørgsel, f.eks. hvilken effekt er man ved at byde på og hvornår er buddet givet, men det er der måske ikke noget af i dit system...?

Nå, men med udgangspunkt i den form du lige har postet og den kode du tidligere har postet vil jeg foreslå denne kode i stedet:

<%
  ' Declaring variables
  Dim navn, adresse, postnummer, town, telefon, email, bud, gammelBud
  Dim data_source, con, sql_insert

  ' A Function to check if some field entered by user is empty
  Function ChkString(string)
    If string = "" Then
      string = " "
    ChkString = Replace(string, "'", "''")
  End Function

  ' skulle give nogenlunde samme vidtfavnende resulatat som formularen...
  sql = "SELECT * FROM users"
  ' Creating Connection Object and opening the database
  Set con = Server.CreateObject("ADODB.Connection")
  con.Open data_source
  set rs = con.Execute(sql)
  gammelBud = rs("bud")
  rs.Close

  If CDbl(ChkString(Request.Form("bud"))) <= CDbl(gammelBud) Then
    Response.Write "Du har budt under det foregående bud. Det kan du ikke."
  Else

    ' Receiving values from Form
    navn = ChkString(Request.Form("navn"))
    adresse = ChkString(Request.Form("adresse"))
    postnummer = ChkString(Request.Form("postnummer"))
    town = ChkString(Request.Form("town"))
    telefon = ChkString(Request.Form("telefon"))
    email = ChkString(Request.Form("email"))
    bud = ChkString(Request.Form("bud"))
    Id = ChkString(Request.Form("Id"))

    data_source = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & _
            Server.MapPath("form.mdb")
    sql_insert = "insert into users (navn, adresse, postnummer, town, telefon, email, bud, dato) values ('" & navn & "', '" & adresse & "', '" & postnummer & "', '" & town & "', '" & telefon & "', '" & email & "', '" & bud & "','" & date() & "')"
   
    con.Execute sql_insert
    ' Done. Close the connection
    con.Close
    Set con = Nothing

    Response.Write "<FONT FACE='VERDANA' SIZE='2'>Tak for dit bud.</FONT><br>"
    ' =============================================
    Set JMail = Server.CreateObject("JMail.SMTPMail")
    JMail.ContentType = "text/html"
    JMail.ServerAddress = "mail3.cliche.dk"
    JMail.Priority = 1
    JMail.Sender = "  test@test.dk" 
    JMail.AddRecipientEx "  test@test.dk",  ""
    Jmail.AddRecipientCC "  test@test.dk" 
    Jmail.AddRecipientBCC "  test@test.dk" 
    JMail.Subject = "Der er givet et bud.."
    JMail.Body = "Der er givet et bud."
    JMail.Execute
    Set JMail = Nothing
  End if
%>
Avatar billede Slettet bruger
03. august 2005 - 01:43 #10
jeg får denne fejl:
Microsoft VBScript compilation error '800a03f4'

Expected 'If'

form_ac.asp, line 63

End Function
----^
line 63 står der:  End Function
Avatar billede softspot Forsker
03. august 2005 - 01:49 #11
Prøv at udskifte ChkString-funktionen med denne:

  Function ChkString(string)
    If string = "" Then
      string = " "
    End If
    ChkString = Replace(string, "'", "''")
  End Function
Avatar billede Slettet bruger
03. august 2005 - 02:03 #12
jeg får nu denne fejl:
Microsoft OLE DB Provider for ODBC Drivers error '80004005'

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

form_ac.asp, line 70
Avatar billede softspot Forsker
03. august 2005 - 02:06 #13
Prøv at flytte denne linie op umiddelbart før con-objektet bliver oprettet første gang:

    data_source = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & _
            Server.MapPath("form.mdb")


(har du selv lavet den kode vi tog udgangspunkt i?)
Avatar billede Slettet bruger
03. august 2005 - 02:10 #14
nej jeg har fået hjælp til noget af det her inde.
Avatar billede softspot Forsker
03. august 2005 - 02:12 #15
ok, jeg synes nok jeg kunne spore en vis usikkerhed ifht. hvad koden rent faktisk gør...

Fik du noget ud af at flytte opsætningen af forbindelsen op før forbindelsesobjektet bliver oprettet?
Avatar billede Slettet bruger
03. august 2005 - 02:16 #16
tænker du på sådan:
data_source = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & _
            Server.MapPath("form.mdb")
' skulle give nogenlunde samme vidtfavnende resulatat som formularen...
  sql = "SELECT * FROM users"
  ' Creating Connection Object and opening the database
  Set con = Server.CreateObject("ADODB.Connection")
  con.Open data_source
  set rs = con.Execute(sql)
  gammelBud = rs("bud")
  rs.Close
Avatar billede softspot Forsker
03. august 2005 - 02:18 #17
Ja, nemlig! :)

Giver det noget positivt resultat ifht. gennemførslen af koden?
Avatar billede Slettet bruger
03. august 2005 - 02:21 #18
Microsoft VBScript runtime error '800a000d'

Type mismatch: 'ChkString'

form_ac.asp, line 77

linie 77  If CDbl(ChkString(Request.Form("bud"))) <= CDbl(gammelBud) Then
Avatar billede softspot Forsker
03. august 2005 - 02:39 #19
Hvad har du så indtastet i bud-feltet på formularen? Ikke et tal vel?

Hvis det er pga. formatet af data vil jeg anbefale at du får lavet et javascript der kan checke formatet inden formularen sendes til serveren (for at spare en tur omkring serveren hvis data ikke er valide). Ud over det skal du have lagt et check ind i form_ac.asp som sikrer sig at der er tale om et tal inden operationen går igang.

Er det korrekt forstået at den side som formularen vises på hedder vis.asp?

I så fald vil jeg bede dig lægge flg. kode ind på form_ac.asp lige efter funktionen ChkString:

if not isNumeric(Request.Form("bud")) then
  Response.Redirect "vis.asp"
end if

Jeg ved det ikke er en særlig pæn forklaring brugeren får i denne situation, men det kan du udbygge senere. Lige nu skal vi bare have den til at reagere på dit bud...
Avatar billede Slettet bruger
03. august 2005 - 02:49 #20
mener du sådan:
Function ChkString(string)
    If string = "" Then
      string = " "
    End If
    ChkString = Replace(string, "'", "''")
  End Function
if not isNumeric(Request.Form("bud")) then
  Response.Redirect "vis.asp"
end if
Avatar billede softspot Forsker
03. august 2005 - 02:52 #21
Jeps. Så vil der ligge en kontrol af at buddet er numerisk inden der forsøges opdatering af databasen. Hvis det ikke er numerisk, så vil formularen (vis.asp) blot blive vist igen...
Avatar billede Slettet bruger
03. august 2005 - 02:55 #22
nu virker det mange tak for hjælpen... :-)
Avatar billede softspot Forsker
03. august 2005 - 03:00 #23
Du får lige et svar...
Avatar billede softspot Forsker
03. august 2005 - 03:01 #24
...og det var så lidt :)
Avatar billede softspot Forsker
03. august 2005 - 03:06 #25
Tak for point :)
Avatar billede Slettet bruger
03. august 2005 - 03:13 #26
velbekomme :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester