Denne her burde gøre det <form> <input type="text" onblur="this.value = this.value.replace(':','.');if (!this.value.match(/[0-2][0-3]\.[0-5][0-9]/)){alert('forkert tid');this.focus();}"> </form>
onblur=\"this.value = this.value.replace(':','.');if (!this.value.match(/[0-2][0-3]\.[0-5][0-9]/)){alert('Det indtastede tidspunkt er ugyldigt\n Indtast venligst et nyt tidspunkt');this.focus();}\"
hvis du laver en funktion uden for det hele og giver dine input hvert deres id så noget ala --- <script> function valider(){ var kl1 = document.getElementById('kl1'); var kl2 = document.getElementById('kl2'); var regexp = '/[0-2][0-3]\:[0-5][0-9]/'; if (!kl1.value.match(regexp) || !kl2.value.match(regexp){ alert('Et af de angivne klokkeslet er forkerte'); return false; }else{ k1.value.replace(':','.'); k1.value.replace(':','.'); return true; } } </script> <form onsubmit="return valider();"> <input type="text" id="kl1"> <input type="text" id="kl2"> </form> ---- Ovenstående burde teste om kl er 00:00 - 23:59 Hvis ikke giver den fejl og submitter ikke Ellers retter den til 00.00 - 23.59 og submitter formen (ikke testet men tror den er god nok)
<script type="text/javascript"> function valider(){ var kl1 = document.getElementById('kl1'); var kl2 = document.getElementById('kl2'); var regexp = '/[0-2][0-3]\:[0-5][0-9]/'; if (!kl1.value.match(regexp) || !kl2.value.match(regexp){ alert('Et af de angivne klokkeslet er forkerte'); return false; }else{ k1.value.replace(':','.'); k1.value.replace(':','.'); return true; } } </script>
ok, bruger du FF eller IE? I IE kommer der jo en fejl nede til venstre og i FF kommer den i javascript konsollen Altid en god ide at kigge der :o) Den siger fx at den forventer en ) her -- if (!kl1.value.match(regexp) || !kl2.value.match(regexp){ -- og det er fordi det skal rettes til -- if (!kl1.value.match(regexp) || !kl2.value.match(regexp)){ -- Det er bare mig som ikke kan tælle paranteser :o) Dernæst skal linjen ovenover rettes til det her ---- var regexp = new RegExp('[0-2][0-3]\:[0-5][0-9]$');
sådan her i stedet var regexp = new RegExp('([0-1][0-9])|(2[0-3])\:[0-5][0-9]$'); -- forklaring hvis første tal er 0-1 skal andet være 0-9 hvis første tal er 2 skal andet være 0-3 Det må være rigtig :o)
hvis du har ændret koden så er det nok klart for i regexp står der jo \: dvs den regner med et kolon Hvis du inden du kører funktionen har rettet det til et "." så skal du også rette \: til \.
jamen du har jo også lavet om i koden Det er jo ikke nemt når du beder mig rette noget for derefter selv at ændre det og så siger du at det du har ændret giver fejl Jeg kan jo ikke spå om hvad du ændrer ved det jeg laver vel ;o)
<script type="text/javascript"> function valider(){ var kl1 = document.getElementById('kl1'); var kl2 = document.getElementById('kl2'); var regexp = new RegExp('([0-1][0-9])|(2[0-3])\.[0-5][0-9]$'); if (!kl1.value.match(regexp) || !kl2.value.match(regexp)){ alert('Et af de angivne klokkeslet er forkerte'); return false; }else{ return true; } } </script>
Fra : <input type="text" name="work_start" id="kl1" onblur="this.value = this.value.replace(':','.');"><br> Til : <input type="text" name="work_end" id="kl2" onblur="this.value = this.value.replace(':','.');"><br>
sådan her ser min kode ud, hvis du kan finde fejl, så råb højt.
jeg er som sagt ikke 100 inde i regexp, så hvis den anden virker så er det fint med mig at du bruger den Jeg ved bare så meget at . matcher alt, så hvis det skal bruges til at fange et punktum skal der en \ foran,,,altså \. -- prøv sådan her var regexp = new RegExp('([0-1][0-9]|2[0-3])\.[0-5][0-9]$'); Så fanger den ikke 28 ved mig
<script type="text/javascript"> function valider(){ var kl1 = document.getElementById('kl1'); var kl2 = document.getElementById('kl2'); var regexp = new RegExp('([0-1][0-9]|2[0-3])\.[0-5][0-9]$');
if (kl1.value == kl2.value) { alert('Du skal angive 2 forskellige tidspunkter.'); return false; } else if(kl1.value >= kl2.value) { alert('Det angivet \'Fra\' tidspunkt er senere det angivet \'Til\' tidspinkt'); return false; } else if (!kl1.value.match(regexp)){ alert('Det angivet \'Fra\' tidspunkt er ugyldigt.'); return false; } else if (!kl2.value.match(regexp)) { alert('Det angivet \'Til\' tidspunkt er ugyldigt.'); return false; } else{ return true; } } </script>
sådan her ser hele funktionen ud, tror ikke jeg har glemt noget, men er ikke sikker.
virker det? for det er jo streng sammenligning ,,hmmm måske :o)
Det var så lidt da Husk lige at hvis du skal benytte det op imod en database og indsætte det eller lignende Så er javascript validering ikke garanti for at det korrekt! Klientside benyttes til brugervenlighed Serverside til sikkerhed Så hvis det er strengt nødvendig der ikke sker fejl skal du helst gentage tjekket i php :o)
Det er an på hvor vigtig du ser på det Prøv at gå op i dine internet instillinger og slå javascript fra :o) Så virker din funktion ikke og formen vil submittes uanset hvad! Så hvis man har noget som kan give sikkerhedsbrist eller lignende skal man tjekke det serverside Ellers risikerer du din database bliver udsat for sql injection
ok det er jo dit valg hvis ikke siden er mere vigtig end man kan tåle at risikere at en ondsindet person sletter ens database med mere Ja såå er det jo fint nok ;o) Valget er helt på din side :o)
Altså det må du jo selvom Jeg siger bare at alt er muligt Hvis han skriver noget med "drop database" Ja så er hele din database slettet og så kan du jo ikke gå ind i databasen og se hvem der gjorde det :o)
ork jo, han kan kigge i din kildekode og se navnene på input og form, Så kan han lave sin egen side med en tilsvarende form, uden begrænsninger Og vupti, pist væk :o) --- Jeg ved det lyder utopisk osv osv Siger bare at hvis man vil være sikker så er det absolut eneste der virker at tjekke det serverside
hvorfor så ikke bare lave det andet ? Det er jo fint nok at vide hvem synderen er den dag det går galt Men det gør altså ikke at du får dine tabte data tilbage jo
Men nok om det Lyder som om du er ligeglad, og det står dig jo frit for
Hvis du ikke checker serverside for sql-injection, findes der et sødt lille trick på 8 tegn, som kan cracke en hvilkensomhelst adgangs-sikkerhed !-)
-- du tester vel id ved at slå op i databasen og finde en record med et id ?-)
-- hvis nu id'et er angivet til sql-koden for 'eller 1 er lig med 1', så vil svaret fra databasen godt nok være ingen records, men resten vil alligevel returnere med en sandhedsværdi, som giver adgang !o]
sql injection har ikke noget med dit password og gøre Hvis du har en bruger med navn børge og kode hukka så vil din sql sætning se ud som cirka sådan her Select * From user Where pass = 'hukka' And name = 'børge' hvis nu brugeren istedet for "hukka" indtaster "hukka';drop table;'" Så ser din sql pludselig sådan her ud Select * From user Where pass = 'hukka';drop table;' And name = 'børge' Og da ; fortæller at der kommer en ny kommando, så udfører den kommandoen "Drop table" og sletter derfor hele din tabel
Så sådan er det Jeg ved dog intet om hvordan sikkerheden er omkring dette i php mysql
men som jeg har sagt før, så er det jo helt op til en selv hvordan man beskytter sine sider Hvis man ikke gør det godt nok, skal man bare være klar over det og være klar med en backup :o)
jeg er desværre ikke sikker i php, har hørt noget om addslashes tror jeg Men ja, er ikke sikker pointen er at alle "sql tegn" skal escapes så de ikke kan benyttes
har lige kørt Select * From user Where pass = 'hukka';drop table; And name = 'børge' igennem en test database i phpmyadmin, og får følgende fejl:
MySQL returnerede:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
' afslutter jo strengen alt derefter vil da kunne bliver betragtet som sql Men ja, kender ikke alle tegn i den sammenhæng og har kun erfaring i asp med det Men prøv google på "sqæ injection" og mysql fx
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.