Avatar billede mibu Nybegynder
27. juli 2007 - 11:17 Der er 26 kommentarer og
2 løsninger

Delvis låsning af tabel?

Jeg har fået den tanke, at jeg kunne bruge en funktion der delvis låser for indtastning i en tabel.

Eks. bruger vil indtaste i en selvvalgt dato d. 12-02-2006 (den funktion har jeg) Men admin besluttet at låse for indtasning i perioden, d.01-02-2007 til 101-03-2007, så den gemmes intet i db.
Kan man lave en sådan funktion, der låser en given periode, men tillader at gemme på dato der ikke falder under den låste?

Det er ikke et "most" for mig at have den funktion, tænkte bare at det kunne sikre mod uønsket fejlindtast.
Avatar billede rocha_dk Nybegynder
27. juli 2007 - 11:20 #1
Du kunne checke på datoen der bliver indtastet via javascript, og hvis datoen ligger inden for en låst periode, smide en alert() på at den er låst.
Hvis du vil gøre det med php, bliver du nødt til at checke det indtastede efter formen er sendt, for derefter at returnere til formen med en fejlmeddelelse.
Avatar billede mibu Nybegynder
27. juli 2007 - 11:32 #2
Java lyder vist smartes!
Kender du et script der kan gøre tricket! Eller skal man selv prøve at "skrue" noget sammen.
Avatar billede rocha_dk Nybegynder
27. juli 2007 - 11:48 #3
JavaScript, java er noget andet ;)
Jeg kender ikke umiddelbart noget script til at gøre det, men det skulle ikke være så svært at lave. Kig engang på www.w3schools.com, de har en udemærket javascript reference.
Giv det en chance, og hvis du ikke kan få det til at virke, så post dit script herinde, så skal jeg nok hjælpe dig med at fejlfinde.
Avatar billede mibu Nybegynder
27. juli 2007 - 12:13 #4
Takker!
Jeg prøver! :-)

vil du ha' lidt for dit svar så - så svar!
Avatar billede rocha_dk Nybegynder
27. juli 2007 - 12:30 #5
ok :)
Avatar billede olebole Juniormester
27. juli 2007 - 12:32 #6
<ole>

Faktisk er dit spørgsmål et gribende smukt eksempel på dato-problemer. Tre forskellige formater til tre datoer! Når koderen ikke engang kan finde ud af det, hvordan i alverden skal brugeren så?  ;oD

Anyway, så må du endelig ikke tjekke den slags med JavaScript ... det er ikke en tøddel værd. En sikker løsning kan du kun lave på serveren  ;o)

/mvh
</bole>
Avatar billede rocha_dk Nybegynder
27. juli 2007 - 12:49 #7
Olebole: Gider du konkretisere hvorfor man ikke kan kontrollere et datoinput vha. javascript?
Avatar billede mibu Nybegynder
27. juli 2007 - 12:54 #8
Til <ole>
Jeg bruger dato format Y-m-d og mine bruger vælger dato vha. en date picker (det virker smukt)
Men din advarsel mod javascript, vil det betyde at på trods af alert popup, så kan man alligevel forsætte?
Og når nu det ikke er en tøddel værd, men skal/bør være server modellen, har du så også en fremgangsmetode? Jeg mener hvordan sættes spærringen, og hvordan tjekker mit input om der er spærret?
Avatar billede rocha_dk Nybegynder
27. juli 2007 - 13:09 #9
Hvis du lader javascript submitte formen, så er du ude over det problem.

mht. tødler, så er det korrekt, at der bør være en sikring på serveren også, men jeg mener stadig, at man sagtens kan fejlsikre inputtet på klientsiden, og derved mindske a) tiden brugeren skal bruge på at finde ud af at de har lavet en fejl og b) serverbelastningingen når 1.000.000 brugere har indtastet en forkert dato på samme tid.
Avatar billede mibu Nybegynder
27. juli 2007 - 13:23 #10
Hæ hæ!
1.000.000 brugere på en gang så tror jeg siden er blevet solgt! :-)
Avatar billede terrak Nybegynder
27. juli 2007 - 13:33 #11
I Firefox kan du slå Javascript fra og så kan brugeren indtaste hvilken som helst dato, uden at den bliver tjekket. Derfor skal det også tjekkes på serversiden.
Avatar billede mibu Nybegynder
27. juli 2007 - 13:38 #12
terrak! Det var da til at forstå :-)
Avatar billede olebole Juniormester
27. juli 2007 - 13:49 #13
mibu >> Ja, så længe, den ikke skal skrives, men vælges i en dropdown, date-picker, el.lign, skaber datoer ikke problemer.

rocha_dk >> "Hvis du lader javascript submitte formen, så er du ude over det problem."
Det passer simpelthen ikke! Der er _absolut_ ingen sikkerhed i at bruge JavaScript.
Som bruger kan du så let som ingenting manipulere alle formfelter i en browser og sende, hvad du har lyst til - hvorhen du vil.

JavaScript bruges til at forbedre brugeroplevelsen - men du skal under alle omstændigheder tjekke på serveren ... det _må_ du ikke undlade. JS giver _ingen_ sikkerhed  =)
Avatar billede rocha_dk Nybegynder
27. juli 2007 - 13:50 #14
Igen: sikring på serveren bør helt sikkert foregå ;)

Men... ved at checke på klientsiden også, opnår du de to tidligere nævnte fordele.
Avatar billede rocha_dk Nybegynder
27. juli 2007 - 13:51 #15
mht. javascript submit, så referer jeg blot til mibu's problem med at en alert ikke stopper formen fra at blive submittet.
Avatar billede olebole Juniormester
27. juli 2007 - 13:58 #16
Bare for at være helt tydelig i forhold til spørgsmålet:

Spørgsmålet handler ikke om brugeroplevelser. Spørgsmålet handler om at hindre indsætning af visse datoer i en database-tabel.

I forbindelse med spørgsmålet er et server-tjek derfor det eneste relevante at diskutere!

At man så kan krydre løsningen med alle mulige andre ting - herunder JavaScript-check til forbedring af brugeroplevelse, m.m. - er en helt anden sag. Løsningen på spm'et er et server-tjek ... intet andet  ;o)
Avatar billede rocha_dk Nybegynder
27. juli 2007 - 14:02 #17
Hvor blev <ole> og </bole> af?

Du har helt ret i at et servercheck er det eneste korrekte svar på spm. Men tag lige og krydr det med lidt JS, det vil varme en informatikers hjerte :)
Avatar billede terrak Nybegynder
27. juli 2007 - 14:07 #18
En anden metode, som olebole også er inde på, er at manipulere alle formfelter og sende hvad man har lyst til.

Eksempel:
Du har dit script, som modtager data fra din form. Siden med html og din form siger vi ligger på
www.blabla.dk/form.php
Siden med dit script, der behandler brugerinputtet ligger på
www.blabla.dk/script.php

Nu laver jeg mit eget html dokument og gemmer på min computer. Jeg viser kilden til form.php, kopierer din form samt fjerner eventuel Javascript der er tilknyttet til den og indsætter formen i mit eget dokument. I mit <form> tag ændrer jeg action så der står
<form action="www.blabla.dk/script.php">

Det vil sige at hvis du har noget dropdown med nogle datoer og man derved er tvunget til bestemte muligheder, kan jeg nu gå ind og ændre din dropdown (i mit dokument) til et normalt input med typen 'text', og skrive lige hvad jeg vil for derefter at sende det til script.php
Avatar billede olebole Juniormester
27. juli 2007 - 14:19 #19
rocha_dk >> Sjovt, du skulle spørge i netop denne tråd  =)
Jeg skriver kun mine 'tags' i første indlæg i en tråd - og det gør jeg via en BookMarklet. Prøv f.eks. at skrive dette i adresselinjen i browseren, mens du står på denne side og tryk 'Return':
    java script:document.fexp.message.value="<ole>\n\n\n\n\\mvh\n</bole>";void(0)

terrak >> Det kan, som du lige har set, sagtens lade sig gøre at manipulere formen i browseren - og så er referer'en endda som forventet  ;o)

Angående BookMarklets, så kik her:
    http://www.dengodekode.dk/bm_artikel.html
Avatar billede olebole Juniormester
27. juli 2007 - 14:20 #20
upsschhjj:
    java script:document.fexp.message.value="<ole>\n\n\n\n/mvh\n</bole>";void(0)
Avatar billede rocha_dk Nybegynder
27. juli 2007 - 14:32 #21
<ole style='cool:true;'>

Hahaha.. det har jeg alligevel aldrig set før! Fantastisk!

/mvh
</bole>
Avatar billede mibu Nybegynder
27. juli 2007 - 14:36 #22
<mibu>

:-) olebole>>Fedt trick! (du skal nok få lov til at beholde ideen!)


I er tilsynelade alle noget til enighed, i svaret på mit spørgsmål.

Så mangler jeg bare lige at finde ud af hvordan det gøres i praksis, men det er denne tråd nok lidt for fedtet med point til :-)

Jeg deler point til de nuværende kommentar der vil lægge et svar. Og så må jeg sætte lidt flere point ind på en løsning.


/mvh
</mibu>
Avatar billede olebole Juniormester
27. juli 2007 - 14:55 #23
Det kunne gøre snoget à la:

// Skal på én eller anden måde fsatsættes af Admin:
$from = mktime(0, 0, 0, 7, 21, 2007); // Fra 21. juli 2007
$to = mktime(0, 0, 0, 8, 30, 2007); // Til 30. august 2007

// Indtastet værdi fra bruger:
$fromUser = "10-08-2007";

// Beregn på skidtet:
$aFromUser = explode("-", $fromUser);
$userTime = mktime(0, 0, 0, $aFromUser[1], $aFromUser[0], $aFromUser[2]);

if ($userTime>$from && $userTime<$to) {
    // Indtastet brugertid ligger udenfor det forbudte område
        // Indsæt derfor al det, du vil  ;o)
}
Avatar billede olebole Juniormester
27. juli 2007 - 14:56 #24
Vrøvl  :D

if ($userTime<$from && $userTime>$to) {
    // Indtastet brugertid ligger udenfor det forbudte område
        // Indsæt derfor al det, du vil  ;o)
}
Avatar billede mibu Nybegynder
27. juli 2007 - 15:02 #25
kanon! jeg prøver at lege med det!
Jeg laver et nyt sprøgsmål "til olebole" med 100p

OK!
Avatar billede olebole Juniormester
27. juli 2007 - 15:08 #26
Nej, det skal du ikke. Der er masser af points i denne tråd ... og jeg har rigeligt i forvejen  =)
Avatar billede mibu Nybegynder
27. juli 2007 - 15:15 #27
Ok! Tak igen!

Men men! jeg deler point senere når alle har fået tid til at lægge svar.

Tak for en god tråd, lærte mange nye ting!
og god weekend
Avatar billede terrak Nybegynder
27. juli 2007 - 15:33 #28
:-)
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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