/ Forside / Teknologi / Udvikling / ASP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
ASP
#NavnPoint
smorch 9259
Harlekin 1866
molokyle 1040
Steffanst.. 758
gandalf 657
smilly 564
gibson 560
cumano 530
MouseKeep.. 480
10  Random 410
Advarsel om Dubletter i db
Fra : Spintailmastiff@mail~


Dato : 14-02-06 11:34

Hej NG
Nu har jeg brugt det meste af Natten på at finde en kode som skal
advare en bruger mod dubletter i db, har fundet nogen kode stykker som
jeg ikke kan få til at virke eller måske jeg sætter dem forkert ind.


Jeg er ved at lave en tunering tilmelding hvor man fra sin Profil skal
kunne tilmelde sig, men kun EN gang, hvis så forsøger at tilmelde sig

sammen tur igen tænkte jeg på en lille box med ok som fortæller at
man allerede er tilmeld og man vil blive stille til hoved siden!. Jeg
koder i ASP!

Se evt mine koder her:
www.pockets.dk/t.asp

Tillægs koden som indsætter data i db
www.pockets.dk/t2.asp



Jeg har et feldt [tourid] i min access DB dette er sat til Yes (No
Duplicates) dette felt indholder et tourid som man sætter ind når man

tilmelder sig.


jeg får så denne fejl som ikke er køn


Microsoft JET Database Engine error '80004005'
The changes you requested to the table were not successful because they



would create duplicate values in the index, primary key, or
relationship. Change the data in the field or fields that contain
duplicate data, remove the index, or redefine the index to permit
duplicate entries and try again.


Hvordan laver man en pæn advarsel?


Tak
Allan


Her er et par af de kode stykker jeg har rodet med
___________________________________________________________
Private Sub Form_Error(DataErr As Integer, Response As Integer)
Select Case DataErr
Case 3022 'duplicate value in index/PK
MsgBox "You're an idiot, you've already entered this " & _
"registration number!", vbExclamation, "Twit!"
Response = acDataErrContinue
Case Else
Response = acDataErrDisplay 'shows normal error message
End Select
End Sub
________________________________________________________
With Me.Registration
If .Value = .OldValue Then
'do nothing
Else
strWhere = "Registration = """ & .Value & """"
If Not IsNull(DLookup("Registration", "MyTable", strWhere)) Then
MsgBox "Dupe!"
End If
End If
End With
End Sub


 
 
Tom Jensen (14-02-2006)
Kommentar
Fra : Tom Jensen


Dato : 14-02-06 20:31

Spintailmastiff@mail.dk skrev:
> Hej NG
> Nu har jeg brugt det meste af Natten på at finde en kode som skal
> advare en bruger mod dubletter i db, har fundet nogen kode stykker som
> jeg ikke kan få til at virke eller måske jeg sætter dem forkert ind.
>
>
> Jeg er ved at lave en tunering tilmelding hvor man fra sin Profil skal
> kunne tilmelde sig, men kun EN gang, hvis så forsøger at tilmelde sig
>
> sammen tur igen tænkte jeg på en lille box med ok som fortæller at
> man allerede er tilmeld og man vil blive stille til hoved siden!. Jeg
> koder i ASP!

Her åbner du et recordset baseret på tourID:

SQL2 = "select * from tur where tourid="&Request.QueryString("id")
set rs2 = conn.execute(SQL2)

Hvis det recordset er tomt er findes vedkommedne IKKE i forvejen
og hvis der er et hit er det en dublet:

If rs2.bof and rs2.eof then
' Ingen fundet
else
' En dublet
end if

Med venlig hilsen

Tom Jensen
- Læs mere om asp og databaser her -
www.ffsoft.dk

Jens Gyldenkærne Cla~ (15-02-2006)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 15-02-06 11:58

spintail skrev:

>> Men problemet med at
>> skrive en Request.Form direkte ind i SQL'en er, at det kan
>> misbruges.

> Hvordan kan det misbruges?

Hvis man indtaster en passende værdi, kan man koble kriteriet i
sql-sætningen (WHERE-delen) helt fra. I en select-sætning kan det
betyde at brugeren ser mere end han/hun har lov til. I en delete-
sætning kan det betyde at man sletter en hel tabel (samt evt.
refererede tabeller hvis man bruger kaskadesletninger).

En anden mulighed for misbrug er at indtaste en værdi der får
scriptet til at fejle. Det kan i visse tilfælde afsløre dele af
asp-koden (fx navnet på databasen, navne på tabeller eller felter
o.l.)


Og endelig er der også muligheden for tilfældige fejl fordi en
bruger kommer til at indtaste et ugyldigt tegn (apostrof i et
tekstfelt eller tekst i et talfelt). Selv om det ikke direkte
kompromiterer sikkerheden, ser det ikke godt ud hvis en rå asp-fejl
sendes til en almindelig bruger.

> Linket virker ikke!

Asp-faq.dk var nede i går aftes, men den er oppe igen nu.
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

spintail (15-02-2006)
Kommentar
Fra : spintail


Dato : 15-02-06 05:43

Hej
Jeg har nu selv prøvet at flette noget sammen men det ser ud til den
stadig fejler, fordi den ikke får det tourid med

set rs = conn.Execute("SELECT tourid FROM tour WHERE tourid = " & fast)

Det er alså i denne sætning det fejler. Request.Form("fast")
indeholder nemlig det tourid jeg forsøger at samligne med duben.

Fejl:

Microsoft JET Database Engine error '80040e10'

No value given for one or more required parameters.

/login/tilmeld.asp, line 22

WHERE tourid = " & fast) Her går det galt!


Hvordan putter man Request.Form("fast") ind i stedet for kun fast?

Tak
Allan


Jørn Andersen (15-02-2006)
Kommentar
Fra : Jørn Andersen


Dato : 15-02-06 05:57

On 14 Feb 2006 20:42:36 -0800, "spintail" <Spintailmastiff@mail.dk>
wrote:

>Jeg har nu selv prøvet at flette noget sammen men det ser ud til den
>stadig fejler, fordi den ikke får det tourid med
>
>set rs = conn.Execute("SELECT tourid FROM tour WHERE tourid = " & fast)

>Hvordan putter man Request.Form("fast") ind i stedet for kun fast?

intFast = Request.Form("fast")
' Her kan der med fordel laves noget validering

strSql = "SELECT tourid FROM tour WHERE tourid = " & intFast
set rs = conn.Execute(strSql)

Som du kan se, har jeg defineret SQL-strengen i sin egen variabel. Det
giver dig mulighed for at checke indholdet af den, inden du kører "set
rs", hvilket er meget nyttigt, hvis man får en fejl.
Det gøres ved (midlertidigt) at indsætte en (eller to) linier inden
"set rs ...":

strSql = "SELECT tourid FROM tour WHERE tourid = " & intFast
Response.Write strSql
(og evt.):
Response.End
set rs = conn.Execute(strSql)

Når jeg er ved at eksperimentere med en side har jeg ofte 5-10
Response.Write linier (eller mere) stående. De kan så bare
udkommenteres, når de ikke bruges.
Og når man mener at man er ved at være færdig kan man evt. rydde op i
dem til slut.

Good luck!

--
Jørn Andersen,
Brønshøj

spintail (15-02-2006)
Kommentar
Fra : spintail


Dato : 15-02-06 07:21

Hej Jørn
Jeg sætter pris på din hjælp men bruger jeg det du har lavet får
jeg denne fejl:

Microsoft VBScript compilation error '800a03f3'

Expected '='

/login/tilmeld.asp, line 27

set rs conn.Execute(strSql)
--------^

Koden stadig her:
http://www.pockets.dk/t2.asp

Hvis jeg sætter = ind
således:

intFast = Request.Form("fast")

SQL2 = "SELECT tourid FROM tour WHERE tourid = " & intFast
Response.Write SQL2
'Response.End
set rs2 = conn.Execute(SQL2)

Skriver den rigtigt nok tourid=spintail6 dette er det tour id som jeg
skal bruge, jeg har så et videre problem som du kan se på denne
fejlmedelelse:
___________Fejl_______
SELECT tourid FROM tour WHERE tourid = spintail6
Microsoft JET Database Engine error '80040e10'

No value given for one or more required parameters.

/login/tilmeld.asp, line 27
__________fejl slut________

Denne fejl må ligge her et sted :
If Not rs2.EOF Then
Response.Redirect("test.asp")
Else

Selvom line 27 er :set rs2 = conn.Execute(SQL2)

Håber du kan hjælpe jeg kan mærke jeg er tæt på


Må hellere lige tilføje at hvis jeg fjerner alt det jeg omtaler her,
virker formen perfekt!
Allan


spintail (15-02-2006)
Kommentar
Fra : spintail


Dato : 15-02-06 08:04

Hej Jørn
Jeg vil lige starte med at takke for din hjælp

Mit problem har jeg løst.
Jeg fandt den måde at skrive Request.Form("fast") ind i SQL´en som
ser således ud:

strSQL2 = "Select tourid From tour Where tourid = '" &
Request.Form("fast") & "';"

Så var der bingo skønt!

Takker igen

MvH
Allan


Jørn Andersen (15-02-2006)
Kommentar
Fra : Jørn Andersen


Dato : 15-02-06 08:22

On 14 Feb 2006 23:03:40 -0800, "spintail" <Spintailmastiff@mail.dk>
wrote:

>Jeg vil lige starte med at takke for din hjælp

Velbekomme!

>Mit problem har jeg løst.

Glimrende.

>Jeg fandt den måde at skrive Request.Form("fast") ind i SQL´en som
>ser således ud:
>
>strSQL2 = "Select tourid From tour Where tourid = '" &
>Request.Form("fast") & "';"

Det er for så vidt udmærket, og det virker. Men problemet med at
skrive en Request.Form direkte ind i SQL'en er, at det kan misbruges.
Prøv at tage et kig på:
<url: http://asp-faq.dk/article/?id=95>


Good luck!

--
Jørn Andersen,
Brønshøj

spintail (15-02-2006)
Kommentar
Fra : spintail


Dato : 15-02-06 09:14

>Men problemet med at
>skrive en Request.Form direkte ind i SQL'en er, at det kan misbruges.
>Prøv at tage et kig på:

Hvordan kan det misbruges? Linket virker ikke!

Allan


spintail (15-02-2006)
Kommentar
Fra : spintail


Dato : 15-02-06 09:21

>Men problemet med at skrive en
>Request.Form direkte ind i SQL'en er, at det kan misbruges.

Tænker du da på hvis det bruges i et login? så er jeg enig !

http://activedeveloper.dk/artikler/default.asp?articleid=180

Dette bruges kun til at tilmelde sig en event.

MvH
Allan


spintail (15-02-2006)
Kommentar
Fra : spintail


Dato : 15-02-06 13:58

Hej Jens

De ting du beskriver er oxo meget rart at vide var godt klar over noget
af det.

Her hvor jeg bruger det KAN man ikke taste noget ind nogen steder, da
det kun bruges som en tilmeldings link man kan kun tilmelde sig når
man er logget ind og der har jeg sikret mig (så godt jeg nu kan). Det
eneste man kan er at Submite!

Men tak for de info alligevel det er da meget rart at vide.

MvH
Allan


Søg
Reklame
Statistik
Spørgsmål : 177496
Tips : 31968
Nyheder : 719565
Indlæg : 6408491
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste