27. juli 2007 - 11:17Der 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.
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.
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.
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)
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?
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.
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.
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 =)
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)
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 :)
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
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)
// 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";
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.