Avatar billede ttopholm Nybegynder
08. september 2003 - 00:15 Der er 50 kommentarer og
3 løsninger

må kun sende 5 gange

Hvordan laver man et script der giver en bruger mulighed for kun at sende postkort 5 gange fra en hjemmeside, Brugeren logger ind for at komme til det, så jeg skal bruge en counter der tæller op til 5, hvor efter den pågældene bruger ikke må sende postkort mere den dag, men næste dag, kan han/hun sende 5 igen, hvordan gør man det.
Avatar billede ocp Nybegynder
08. september 2003 - 00:22 #1
Jeg går ud fra at du har brugeren liggende i en tabel?

Du skal først lave et ekstra felt, AntalSendte (f.eks. en tinyint)
Hver gang der sendes et postkort tæller du en op.

Der ud over skal du lige lave en lille tabel eller lign. der indeholder dags dato.

Hvis dags dato er mindre end nuværende dato skal dags dato opdateres og samtidig skal du sætte samtlige brugeres AntalSendte til 0:

update bruger
set Antalsendte = 0
Avatar billede Slettet bruger
08. september 2003 - 00:24 #2
du skal have 1 række ekstra i din brugertabel der hedder dato...

siden hvor postkortet bliver sendt:


IF year(rs("dato"))<>year(now) AND month(rs("dato"))<>month(now) AND day(rs("dato"))<>day(now) THEN
conn.execute("update table set count=0, dato='now'")
END IF

IF rs("count")<=5 THEN

send postkort


conn.execute("update table set count=" & rs("count")+1 & ", dato='now'")

END IF
Avatar billede Slettet bruger
08. september 2003 - 00:25 #3
hov... troede, du selv havde en counter-række.. den skal du self også oprette...
Avatar billede Slettet bruger
08. september 2003 - 00:27 #4
hov igen... det skal self se sådan her ud:

IF year(rs("dato"))=year(now) AND month(rs("dato"))=month(now) AND day(rs("dato"))=day(now) THEN
ELSE
conn.execute("update table set count=0, dato='now'")
END IF

IF rs("count")<=5 THEN

send postkort


conn.execute("update table set count=" & rs("count")+1 & ", dato='now'")

END IF
Avatar billede ocp Nybegynder
08. september 2003 - 00:27 #5
Skal det ikke være:

conn.execute("update table set count=0, dato=now()")

???
Avatar billede ocp Nybegynder
08. september 2003 - 00:28 #6
JEG MENER: getdate() :o)
Avatar billede ttopholm Nybegynder
08. september 2003 - 00:38 #7
Så der skal tilføjes i tabel bruger, dato og count eller hvad
Avatar billede ocp Nybegynder
08. september 2003 - 00:41 #8
Som sagt - AntalSendte som tinyint
Avatar billede ttopholm Nybegynder
08. september 2003 - 00:48 #9
ja.. men hvor skal jeg smide fejl tingen ind, hvis de ikke kan sende
Avatar billede ocp Nybegynder
08. september 2003 - 00:50 #10
Åhh... jamen du skal checke om de må sende endnu et postkort før de kommer ind på postkortsiden (eller ved login) sådan at folk ikke sidder og skriver postkort for så at få det hele kylet væk.
Avatar billede ttopholm Nybegynder
08. september 2003 - 00:53 #11
okay.. altså når man tjekker userid og brugerid, tjekker den også lige det her eller hvad
Avatar billede ocp Nybegynder
08. september 2003 - 00:54 #12
Yes... du returnerer bare det ekstra felt med antal sendte og giver besked hvis værdien er 5 (eller derover)
Avatar billede ttopholm Nybegynder
08. september 2003 - 00:56 #13
Jeg har det her login script

<%
if request ("mode") = "login" then



'ændre input
Login = Trim(Replace(Request.Form("bruger"),"'","''" ))
Password = Trim(Replace(Request.Form("pass"),"'","''" ))


'Opbygger Sql-sætningen
rsSQL = "SELECT * FROM bruger where bruger = '" & bruger & "' and kodeord = '" & pass & "'"

' hvis brugeren var i databasen
set rs = Conn.execute(rsSQL)
If Not (rs.BOF Or rs.Eof) Then
Session("ID") = rs("ID")
session("login") = True
Response.redirect "default1.asp"

Else

'
' Hvis brugeren ikke var i databasen
Response.redirect "default.asp"


End If

' Lukker forbindelse til databasen
Conn.Close
Set Conn = Nothing

End if
%>

hvor skal det der ind så
Avatar billede ocp Nybegynder
08. september 2003 - 00:57 #14
hvis brugeren var i databasen
set rs = Conn.execute(rsSQL)
If Not (rs.BOF Or rs.Eof) Then
if rs("AntalSendte") >= 5 then
  Response.redirect "KomIgenIMorgen.asp"
end if
Session("ID") = rs("ID")
session("login") = True
Response.redirect "default1.asp"
Avatar billede ttopholm Nybegynder
08. september 2003 - 00:59 #15
oki....

hvor skal jeg smide det her

IF year(rs("dato"))=year(now) AND month(rs("dato"))=month(now) AND day(rs("dato"))=day(now) THEN
ELSE
conn.execute("update table set count=0, dato='now'")
END IF
Avatar billede ocp Nybegynder
08. september 2003 - 01:02 #16
Lige over det statement jeg satte ind.
Avatar billede ttopholm Nybegynder
08. september 2003 - 01:04 #17
oki... kanon
Avatar billede ttopholm Nybegynder
08. september 2003 - 01:17 #18
Skal det her ikke være :

f rs("AntalSendte") >= 5 then
  Response.redirect "KomIgenIMorgen.asp"
end if

ikke være det her istedet
f rs("AntalSendte") > 5 then
  Response.redirect "KomIgenIMorgen.asp"
end if
Avatar billede ocp Nybegynder
08. september 2003 - 01:18 #19
Nix, så kan man jo sende 6 beskeder før udtrykket bliver sandt.
Avatar billede ttopholm Nybegynder
08. september 2003 - 01:26 #20
oki.... når man udfører formen skal man bare huske at smide det her ind, eller hvad

IF rs("count")<=5 THEN

send postkort


conn.execute("update table set count=" & rs("count")+1 & ", dato='now'")
else
Response.redirect ("Komigenimorgen.asp")
END IF
Avatar billede ttopholm Nybegynder
08. september 2003 - 01:27 #21
ved den her
conn.execute("update table set count=" & rs("count")+1 & ", dato='now'")

skal brugeren ikke også med, fordi den skal jo ikke opdatere alle brugeres antalsendte
Avatar billede ocp Nybegynder
08. september 2003 - 01:28 #22
Du kan såmænd nøjes med:

conn.execute("update table set count=count+1 & ", dato='now'")
Avatar billede ttopholm Nybegynder
08. september 2003 - 01:32 #23
table er lig hvad min tabel hedder ik? hvorfor skal jeg ikke bruge:

IF rs("count")<=5 THEN

send postkort


conn.execute("update table set count=" & rs("count")+1 & ", dato='now'")
else
Response.redirect ("Komigenimorgen.asp")
END IF

brugeren er jo logget ind så den tjekker jo ikke om han ikke kan sende mere, så jeg bliver da nødt til at have den her med ik
Avatar billede ocp Nybegynder
08. september 2003 - 01:34 #24
Det var såmænd bare for at simplificere tingene - begge dele virker på samme måde.
Avatar billede ttopholm Nybegynder
08. september 2003 - 01:38 #25
virker:
conn.execute("update table set count=count+1 & ", dato='now'")

som det samme som

IF rs("count")<=5 THEN

send postkort


conn.execute("update table set count=" & rs("count")+1 & ", dato='now'")
else
Response.redirect ("Komigenimorgen.asp")
END IF

det kan jeg ikke følge fordi, den første der tjekker den jo ikke om brugeren har sendt flere end han må
Avatar billede ocp Nybegynder
08. september 2003 - 01:42 #26
Nej, men den lægger 1 til count
Avatar billede ttopholm Nybegynder
08. september 2003 - 01:46 #27
ja.. men den skal jo også tjekke, fordi han kan jo så sende mange hvis bare han ikke logger ud, eller hvad
Avatar billede ttopholm Nybegynder
08. september 2003 - 03:27 #28
jeg får denne fejl, når jeg prøver med det her:

set rs = Conn.execute(rsSQL)
If Not (rs.BOF Or rs.Eof) Then
Session("ID") = rs("ID")
session("login") = True
IF year(rs("dato"))=year(now) AND month(rs("dato"))=month(now) AND day(rs("dato"))=day(now) THEN
ELSE
Conn.execute("update table set count=0, dato=now()")
END IF
if rs("count") >= 15 then
  Response.redirect "default.asp?valg=1&Titel=Desværre&Msg=Du kan ikke sende flere idag!!!"
end if
Response.redirect "default.asp"

Else

'
' Hvis brugeren ikke var i databasen
Response.redirect "Login.asp"


End If

' Lukker forbindelse til databasen
Conn.Close
Set Conn = Nothing

End if


I denne linie her:

Conn.execute("update table set count=0, dato=now()")
Fejlen er:
Syntax error in UPDATE statement.

hvad går der galt
Avatar billede ocp Nybegynder
08. september 2003 - 09:05 #29
Læs mine tidligere indlæg vedr. dette spørgsmål:

update table set count = 0, dato = getdate()
Avatar billede ttopholm Nybegynder
08. september 2003 - 09:52 #30
satte dette ind
Conn.execute = ("update table set count = 0, dato = getdate()")

men giver med stadig samme fejl..

har også prøvet
Conn.execute = ("update table set count = '0', dato = 'getdate()'")

samme fejl
Avatar billede ocp Nybegynder
08. september 2003 - 10:22 #31
table skal naturligvis være navnet på din tabel
Avatar billede ttopholm Nybegynder
08. september 2003 - 10:27 #32
er ændret... for lang tid siden .-)
Avatar billede ocp Nybegynder
08. september 2003 - 10:48 #33
bruger du access eller sql server?
Avatar billede ttopholm Nybegynder
08. september 2003 - 10:50 #34
access men den skal nok køre på mysql senere..
Avatar billede ocp Nybegynder
08. september 2003 - 10:53 #35
Så skal du STRAKS sætte en sql server op og køre på den i stedet. Access' syntaks er forskellig på flere områder. Getdate er en stored procedure i SQL  Server, så den virker naturligvis ikke i Access.
Jeg har knap så meget check på access som SQL Server - sorry.
Avatar billede ttopholm Nybegynder
08. september 2003 - 11:01 #36
oki... det gør jeg senere :-)
Avatar billede ttopholm Nybegynder
08. september 2003 - 11:10 #37
oki, skal jeg ikke bruge den her

conn.execute ("Update bruger set antalsendte = '0', dato= 'getdate()' Where BrugerID <> 0")

da den opdatere alle bruger

Den her er der jo ingen where <> 0, eller er det underordnet når vi snakker mysql..
("update table set count = '0', dato = 'getdate()'")

og det samme må så være gældende ved:
conn.execute("update table set count=" & rs("antalsendte")+1 & ", dato='now'")

eller skal der også en where = Session("ID")

eller kan den godt finde ud af hvad brugeren hedder..
Avatar billede ocp Nybegynder
08. september 2003 - 11:31 #38
Er det ny MySQL du kører? den er ENDNU mere forskellig fra Acccess end MSSQL.

Nå, men: Nej, hvis der ikke er angivet noget i WHERE-delen bliver det kørt på ALLE records i din tabel.

Hvad angår:
conn.execute("update table set count=" & rs("antalsendte")+1 & ", dato='now'")
Skal der naturligvis være en "WHERE brugerid = " & Session("ID"), ellers tælles samtlige brugere op.

Jeg ved ikke om getdate() er understøttet i MySQL - ellers findes der nok en anden metode.
Avatar billede ttopholm Nybegynder
08. september 2003 - 11:46 #39
oki.. det er den seneste ver. mysql jeg kører 4.0.14
Avatar billede ocp Nybegynder
08. september 2003 - 11:49 #40
Sådan skal den se ud:

conn.execute("update table set count=" & rs("antalsendte")+1 & ", dato=now()
Avatar billede ocp Nybegynder
08. september 2003 - 11:49 #41
tsk tsk tsk... SÅDAN:

conn.execute("update table set count=" & rs("antalsendte")+1 & ", dato=now()")
Avatar billede ttopholm Nybegynder
08. september 2003 - 12:01 #42
:-)

Hvis jeg køre den her:
Update bruger set antalsendte = '0', dato= 'getdate()' Where BrugerID <> 0

så får jeg fejlen:

No value given for one or more required parameters.

Det skal lige siges at jeg stadig køre med access.

Jeg smutter nemlig snart i seng, så jeg konfigurer det til mysql imorgen :-) (Aften dansk tid)
Avatar billede ocp Nybegynder
08. september 2003 - 12:02 #43
Glimrende - skal vi så ikke tage den derfra?
Avatar billede ttopholm Nybegynder
08. september 2003 - 12:05 #44
jo.... det gør vi :-) God dag... skrives ved i aften ved en 23.00 tiden
Avatar billede Slettet bruger
08. september 2003 - 17:23 #45
Hvis du bruger count='" & rs("antalsendte")+1 & "' virker det ikke... det skal enten hedde count='" & rs("count")+1 & "' eller antalsendte='" & rs("antalsendte")+1 & "'... dette kan også gøres nemmere ved bare at sige count= count+1


sådan her skal hele koden se ud:


'Hvis der ikke er sendt nogle postkort i dag, bliver count nulstillet og dato sat til now

IF year(rs("dato"))<>year(now) AND month(rs("dato"))<>month(now) AND day(rs("dato"))<>day(now) THEN
conn.execute("update table set count=0, dato='now'")
END IF

'Hvis der ikke allerede er sendt 5 postkort i dag, skal brugeren kunne sende et postkort...
IF rs("count")<=5 THEN
%>
<form action="sendpostkort.asp">
<input type="text" name="tilbruger">
<input type="text" name="hvordanpostkortetnuskalseud"> (eller hvordan man nu skal sætte postkortet sammen....)
<input type="text" name="osv">
</form>
<%
END IF
%>

sendpostkort.asp

conn.execute("update table set count=count+1 dato='now', bruger='" & session("bruger")")

conn.execute("insert into postkort (tilbruger,frabruger,hvordanpostkortetnuskalseud,osv) values('" & request.form("tilbruger") & "','" & session("bruger") & "','" & request.form("hvordanpostkortetnuskalseud") & "','" & request.form("osv") & "'")
Avatar billede Slettet bruger
08. september 2003 - 17:25 #46
jeg kopierede et forkert indlæg... det er bare det med datoen, der var forkert ovenover...


sådan her skal hele koden se ud:


'Hvis der ikke er sendt nogle postkort i dag, bliver count nulstillet og dato sat til now

IF year(rs("dato"))=year(now) AND month(rs("dato"))=month(now) AND day(rs("dato"))=day(now) THEN
ELSE
conn.execute("update table set count=0, dato='now'")
END IF

'Hvis der ikke allerede er sendt 5 postkort i dag, skal brugeren kunne sende et postkort...
IF rs("count")<=5 THEN
%>
<form action="sendpostkort.asp">
<input type="text" name="tilbruger">
<input type="text" name="hvordanpostkortetnuskalseud"> (eller hvordan man nu skal sætte postkortet sammen....)
<input type="text" name="osv">
</form>
<%
END IF
%>

sendpostkort.asp

conn.execute("update table set count=count+1 dato='now', bruger='" & session("bruger")")

conn.execute("insert into postkort (tilbruger,frabruger,hvordanpostkortetnuskalseud,osv) values('" & request.form("tilbruger") & "','" & session("bruger") & "','" & request.form("hvordanpostkortetnuskalseud") & "','" & request.form("osv") & "'")
Avatar billede ttopholm Nybegynder
08. september 2003 - 23:55 #47
Den virker hvis jeg laver det her
tid = date()
conn.execute("update table set count=0, dato="& tid &"")

Så virker den ellers virker den ikke
Avatar billede ttopholm Nybegynder
09. september 2003 - 01:04 #48
skal dato have et specielt property, fordi den ikke skrive hele datoen, hvis jeg bruger now, fejler den, og hvis jeg bruger date, skriver den kun -2003 i datoen
Avatar billede ttopholm Nybegynder
09. september 2003 - 01:17 #49
Skal siges at jeg gøre med dansk på serveren, så dato format er DD-MM-YYYY og Date i mysql er YYYY-MM-DD, så hvad gør jeg
Avatar billede Slettet bruger
09. september 2003 - 19:06 #50
så skal du bare skrive conn.execute("update table set count=0, dato='"& now &"'")
Avatar billede ttopholm Nybegynder
09. september 2003 - 23:49 #51
ja.. men der for jeg en fejl af mysql, hvor den brokker sig over HH:MM:SS
Avatar billede ttopholm Nybegynder
10. september 2003 - 04:38 #52
løste den med '" & date() & "'
Avatar billede ttopholm Nybegynder
16. juli 2004 - 19:45 #53
Lukker.. vi deler
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