Avatar billede brynil Nybegynder
12. oktober 2002 - 23:45 Der er 36 kommentarer og
1 løsning

Undgå dobbeltOp

Jeg leger med et fora (VB) og det er NÆSTEN ved at lykkes for mig.
Bare lige denne her irriterende egenskab, at når der trykkes på submit/refresh flere gange, så laves indlægget igen.
Forleden fik jeg hjælp til at checke i db'en om indlægget allerede eksisterede. Det fungerer fint bortset fra, at det også forhindrer brugere i at skrive det samme, andre allerede har skrevet - f.ex. ja - på et spm.!
Har også forsøgt mig med If Session("side")=true, men kan ikke få det til at virke efter hensigten.
Kan nogen hjælpe mig med hvordan jeg fanger og undgår den uheldige egenskab at doble op?
Avatar billede stigc Nybegynder
12. oktober 2002 - 23:50 #1
PÅ formen hvor brugeren skrive indlægget laver du en hidden felt med dagsdato + en random tal. Dette gemmer du også i din database, for hvert indlæg.

Fremover testes der bare om der findes et indlæg med samme dato og tilfædlige tal, inde et indlæg læggess i databasen!
Avatar billede brynil Nybegynder
12. oktober 2002 - 23:59 #2
Genereres der ikke et nyt random tal når der refreshes/submittes igen?
Hvis ikke tallene er ens, hvordan kan jeg så afgøre om det er et "ægte" indlæg eller ej? Eller er det bare MIN matematik der er træt?
Avatar billede stigc Nybegynder
13. oktober 2002 - 00:03 #3
Når det hemmelige felt ikke findes i databasen i forvejen, gemmer du indlæget!

Dit problem er vel :

      Brugeren får trykket 2 gange på submit.
      Brugeren trykker tilbage i browseren, og trykker submit igen.

I begge disse tilfælde vil det hemmelige nummer være det samme, og indlægget vil derfor kun blive gemt en gang...
Avatar billede jakobandersen Nybegynder
13. oktober 2002 - 00:08 #4
Kan du ikke blot sammenligne det indlæg der bliver sat ind med det der er sat ind sidste gang?

Hvis de er ens skal indlæget ikke oprettes igen hvis de ikke er ens skal indlæget oprettes, Afhængig af databasesystem kan dette gøres i en Stored Procedure e.lign.
Avatar billede stigc Nybegynder
13. oktober 2002 - 00:10 #5
Ofte skriver man jo bare "ja" eller "nej" eller bare ":)" som indlæg. Må man kun det en gang?
Avatar billede stigc Nybegynder
13. oktober 2002 - 00:10 #6
:)
Avatar billede brynil Nybegynder
13. oktober 2002 - 00:11 #7
Det var lige det jeg fandt ud af! Desværre.
Avatar billede jakobandersen Nybegynder
13. oktober 2002 - 00:14 #8
Hvis man sammenligner flere faktirer som f.eks.

forfatter, emne og tekst burde det være MEGET usandsynligt at der ligger 2 ens indlæg lige efter hindanden i databsen
Avatar billede jakobandersen Nybegynder
13. oktober 2002 - 00:14 #9
faktirer = faktorer
Avatar billede brynil Nybegynder
13. oktober 2002 - 00:24 #10
Ja - jeg har en brugertabel og en indlægtabel med init som fælles pkt'er. Dit argument er godt nok. Jeg vil lige prøve dem af. Men som nævnt er min matematik (og mere) lidt træt efter en hel dag her ved skærmen, så jeg håber det er ok jeg smider points imorgen formiddag.
Især hvis jeg skal til at lege med inner joins.
Avatar billede jakobandersen Nybegynder
13. oktober 2002 - 00:37 #11
Hvilken database er det?
Avatar billede brynil Nybegynder
13. oktober 2002 - 00:38 #12
Access2k
Avatar billede jakobandersen Nybegynder
13. oktober 2002 - 00:41 #13
Ok, så bliver du nok nødt til at hente det sidste nye indlæg ud i ASP'en og så sammenligne der.
Avatar billede brynil Nybegynder
13. oktober 2002 - 00:44 #14
>>moonduck - ja, men umiddelbart tror jeg det må blive løsningen. For...
>>stigc - når jeg tester ved at udskrive værdien af random tallet, så skifter det hver gang jeg submitter eller refresher.
Avatar billede brynil Nybegynder
13. oktober 2002 - 00:49 #15
Men jeg prøver det rigtigt af imorgen. G'nat
Avatar billede cms Nybegynder
13. oktober 2002 - 11:18 #16
Randomtallet skal udskrives som hidden felt i formen, så vil det samme tal sendes med lige meget hvor mange gange du trykker "Send/Udfør" på klienten !
Avatar billede brynil Nybegynder
13. oktober 2002 - 11:23 #17
>>stigc - jeg har fået det til at virke med refresh, men endnu ikke med submit. Det arbejder jeg på. Husk svar til points i kan dele.

>>moonduck - jeg skal til at lave emner, så jeg tager det med dér, MEN...

..jeg har en ældre side hvor jeg efter cmd.fill, databind og nulstiller textbokse, laver en redirect til samme side. Det ser også ud til at fjerne problemet. Kan det skabe komplikationer i anden sammenhæng?
Avatar billede brynil Nybegynder
13. oktober 2002 - 11:32 #18
>>cms Er ikke helt med på udskrivning i formen. Jeg har lagt
    Dim Nummer as Integer = int(10000 * rnd)+1  umiddelbart efter <script..> og
    <input name="hidden1" type="hidden" value="<%= Nummer %>">
    <input type="submit" Value="Submit" >

i <form>. Når jeg så checker denne:
        if Not Page.IsPostBack then
        if request.form("hidden1") <> "" Then
        Message.text = "<br>Gemt værdi:" + Request.form("hidden1")
        end if
virker det med refresh/f5 men ikke Submit.
Avatar billede brynil Nybegynder
13. oktober 2002 - 11:35 #19
har ikke forsøgt, men hvis jeg lægger valideringen ned i sub Submit der opdaterer db osv, vil den så ikke afvise nye indlæg fordi den fastholder værdien? Jeg er lidt usikker på hvornår tildelingen af ny værdi egentlig sker!
Avatar billede cms Nybegynder
13. oktober 2002 - 12:17 #20
Du skal jo lægge random nummeret ind i din row og så ved submit tjekke om der allerede findes en row med den random id.
Er det det du gør?
Avatar billede jakobandersen Nybegynder
13. oktober 2002 - 12:23 #21
Der er da dumt at oprette en ekstra Row blot til dette, det er nemmere at tjekke op imod de eksisterende felter altså:

Emne, Forfatter, Tekst

Så er man ret godt dækket ind.
Avatar billede brynil Nybegynder
13. oktober 2002 - 12:24 #22
Nej endnu ikke. Men som nævnt skal jeg til at tilrette siderne med db, så jeg vil bruge det dér.
Der er kommet flere gode forslag, så hvis i vil lægge svar ind, så smider jeg points af.
Takker så meget for hjælpen.
Avatar billede brynil Nybegynder
13. oktober 2002 - 12:29 #23
if response not true
direct points to moonduck
end if
Avatar billede cms Nybegynder
13. oktober 2002 - 12:32 #24
Jeg snakker ikke om en ekstra Row, men en Column (!!) - og der kan sagtens være éns indlæg hvis du tænker på de værdier du lige har nævnt. Desuden er det langt hurtigere at tjekke på en 30-tegns værdi end på en TEXT-værdi som kan være flere tusinde karakterer langt !!
Avatar billede jakobandersen Nybegynder
13. oktober 2002 - 12:39 #25
cms>> Jeg tror sandsynligheden for at værdierne er ligesåstore som at man får det samme randomtal to gange i træk.

Og sammenligningen foregår i ASP.NET og når vi snakker en Insert operation er det begrænset hvor ofte den køres og derfor ser jeg ikke nogen grund til at ødelægge datamodellen op blot for at undgå dette.
Avatar billede brynil Nybegynder
13. oktober 2002 - 12:43 #26
Er der ingen af jer der har anvendt den redirect(side) som jeg nævnte? Den ser ud til at tømme siden for gamle informationer og et af problemerne er jo, at selv om tekstfeltet nulstilles, så er værdien fra sidste indlæg stadig til stede i hukomm. (indtil redirecten!) og kan opdatere siden ved submit eller refresh!
Avatar billede cms Nybegynder
13. oktober 2002 - 12:54 #27
Moonduck -> Det er et forum vi taler om. Du har ret sålænge forummet skal bruges til hobbyarbejde med vennerne. Men nu skal vi vel også lære noget, og ikke altid springe over hvor gærdet er allerlavest - forestil dig fx at det var eksperten, der skulle sammenligne alle indlæg i en tråd før éns nye indlæg blev godkendt. Sandsynligheden for at jeg skriver ":)" to gange i en tråd er _ikke_ den samme som for at jeg får to 30-cifrede randomtal i træk !
Avatar billede jakobandersen Nybegynder
13. oktober 2002 - 13:02 #28
cms -> Nej men hvor stor er chancen for at den samme forfatter skriver ":)" to gange i træk i samme tråd uden at der har været en anden der har lavet et indlæg i hele forummet.

For mig at se er problemet ikke stort, jeg har selv haft foras kørende på intranets med +100 brugere simultant hvor jeg ikke har lavet noget tjek og det har fungeret fint og det er ikke tit at folk kommer til at trykke 2 gange.
Avatar billede cms Nybegynder
13. oktober 2002 - 13:21 #29
Ja det har du jo ret i :) Iøvrigt synes jeg ikke jeg kan finde dokumentation for hvordan jeg skal trække en netop indsat id-værdi ud, i en storedproc, hvis jeg samtidigt skal tage hensyn til multithreading.. Noget du har erfaringer med?
Avatar billede brynil Nybegynder
13. oktober 2002 - 13:30 #30
moonduck -> hvis nu flg. ordveksling fandt sted:
a1) Kommer du til mødet?
b1) ja
a2) Alene?
b2) ja
..blir' b2) så ikke frasorteret i din fremstilling?
Avatar billede cms Nybegynder
13. oktober 2002 - 13:35 #31
Nej, han tjekker kun på det sidst postede indlæg, så idet b2 != a2, bliver den postet
Avatar billede brynil Nybegynder
13. oktober 2002 - 13:42 #32
Så faldt tiøren - du skrev det endda i dit svar!
Har du overskud til at fortælle mig, hvordan jeg skal 'isolere' hvad der er det sidste indlæg i db'en? Altså hvordan en 'SELECT sidste indlæg' - query skal skrues sammen? Så'n cirka!
Avatar billede cms Nybegynder
13. oktober 2002 - 13:49 #33
SELECT TOP 1 indhold FROM table WHERE afsender='migselv' ORDER BY afsendertid DESC

og med mysql:

SELECT indhold FROM table WHERE afsender='migselv' ORDER BY afsendertid DESC LIMIT 1
Avatar billede brynil Nybegynder
13. oktober 2002 - 13:52 #34
Sorry cms - bemærkede ikke det var dit svar. Er du ikke interesseret i points?  Jeres indlæg har hjulpet mig meget, så jeg vil godt oprette et nyt point-spm!
Og takker meget for hjælpen.
Avatar billede jakobandersen Nybegynder
13. oktober 2002 - 13:53 #35
cms -> Hvis du bruger transactioner og @@Identity så burde du være rimelig godt sikret.
Avatar billede jakobandersen Nybegynder
13. oktober 2002 - 13:54 #36
cms -> Jeg smider da gerne en stak point til dig, skal jeg det?
Avatar billede cms Nybegynder
13. oktober 2002 - 14:01 #37
Nej-nej, ellers tak =)
Transactioner og @@Identity... Okaj jeg kigger lidt i dok.
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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