Avatar billede blackscorpion Nybegynder
06. august 2005 - 14:33 Der er 118 kommentarer og
1 løsning

Validering og Ændring af tal.

Hej eksperter.

leder efter noget script halløj, der kan ændre et klokkeslet, f.eks 14:35 til 14.35 i en input form, som brugerne smider ind.

nogle bud?
Avatar billede busschou Praktikant
06. august 2005 - 14:43 #1
<script>
var str = "14:35"
var nyStr = str.replace(":",".")
document.write(nyStr)
</script>
Avatar billede busschou Praktikant
06. august 2005 - 14:44 #2
<form>
  <input type="text" onblur="this.value = this.value.replace(':','.');">
</form>
Avatar billede busschou Praktikant
06. august 2005 - 14:45 #3
så bliver de rettet af sig selv når man forlader input feltet
Avatar billede busschou Praktikant
06. august 2005 - 14:45 #4
det var i hvert fald et bud :o)
Avatar billede blackscorpion Nybegynder
06. august 2005 - 14:51 #5
tester det lige om 5 mins, sidder lige og roder lidt med noget include, og det driller, så det virker pt ikke. ;)
Avatar billede blackscorpion Nybegynder
06. august 2005 - 14:55 #6
nice... Takker. ;)
Avatar billede blackscorpion Nybegynder
06. august 2005 - 14:56 #7
har du så også en fiks hurtig måde hvorpå man kan tjekke om det tal der er skrevet ind, er mellem 00.00 og 23.59 ??
Avatar billede busschou Praktikant
06. august 2005 - 14:58 #8
uff så er det nemmeste vist noget reg.exp, og det er jeg ikke så stor haj til :o/
men vendt og se om ikke en kommer forbi med en løsning på det også
Avatar billede blackscorpion Nybegynder
06. august 2005 - 14:59 #9
er ved at lave en arbejds kalender til en gut, og det ville være ret rart hvis man lige kunne tjekke det, just in case du ved. ;)
Avatar billede blackscorpion Nybegynder
06. august 2005 - 15:00 #10
men det forbløffer mig lidt hvor nemt og simplet det var at udskifte tegn. ;)
Avatar billede busschou Praktikant
06. august 2005 - 15:05 #11
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>
Avatar billede blackscorpion Nybegynder
06. august 2005 - 15:06 #12
tjekker. ;)
Avatar billede busschou Praktikant
06. august 2005 - 15:06 #13
det er muligt det er mere smart at putte alt validering i en funktion som køres når man klikker submit, men nu er der da lidt at lege med :o)
Avatar billede blackscorpion Nybegynder
06. august 2005 - 15:09 #14
det virker delvist... den acceptere 23:61 :(
Avatar billede blackscorpion Nybegynder
06. august 2005 - 15:12 #15
hmm never mind... havde beskeden i alert boksen, og det fuckede det op... :(
Avatar billede busschou Praktikant
06. august 2005 - 15:12 #16
gør den ikke ved mig, har du husket at refreshe browseren så den ikke har "gammel" javascript i hukommelsen?
Avatar billede blackscorpion Nybegynder
06. august 2005 - 15:13 #17
har ændret beskeden til:

"Det indtastede tidspunkt er ugyldigt\n Indtast venligst et nyt tidspunkt"

og så kegler den... hvorfor?
Avatar billede blackscorpion Nybegynder
06. august 2005 - 15:13 #18
yep yep. ;)
Avatar billede busschou Praktikant
06. august 2005 - 15:13 #19
må jeg se koden?
Avatar billede blackscorpion Nybegynder
06. august 2005 - 15:14 #20
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();}\"
Avatar billede blackscorpion Nybegynder
06. august 2005 - 15:15 #21
det er kun når jeg ændrer beskeden.
Avatar billede blackscorpion Nybegynder
06. august 2005 - 15:15 #22
hmm... siden hvornår kan javascript ikke li \n ??
Avatar billede blackscorpion Nybegynder
06. august 2005 - 15:17 #23
okey har løst det... \\n er svaret. ;)
Avatar billede busschou Praktikant
06. august 2005 - 15:17 #24
hvad laver dine \ først og sidst??
Avatar billede busschou Praktikant
06. august 2005 - 15:17 #25
okey hvorfor skal du have \ foran? skal jeg altså ikke... fordi du bruger det inden i anden kode eller?
Avatar billede blackscorpion Nybegynder
06. august 2005 - 15:18 #26
det er smidt sammen med php, derfor. ;)
Avatar billede blackscorpion Nybegynder
06. august 2005 - 15:18 #27
et lille insight i koden.

  echo "<input type=\"hidden\" name=\"int_date\" value=\"".$_REQUEST['date']."\">\n";
  echo "<input type=\"hidden\" name=\"userid\" value=\"".$_REQUEST['userid']."\">\n";
  echo "Fra : <input type=\"text\" name=\"work_start\" onblur=\"this.value = this.value.replace(':','.');\"><br>\n";
  echo "Til : <input type=\"text\" name=\"work_end\" 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();}\"><br>\n";
  echo "<input type=\"submit\" value=\" Opdater \"><br>\n";
Avatar billede blackscorpion Nybegynder
06. august 2005 - 15:20 #28
har fundet en fejl. *G*

når jeg smider den ind på den øverste input, så kommer den med en fejl som den skal, men selv om jeg trykker ok, så bliver fejl-boksen stående. ;)
Avatar billede blackscorpion Nybegynder
06. august 2005 - 15:24 #29
tænkte på om man ikke kunne smide det ind i en OnSubmit sådan at den tjekker begge felter til sidst, istedet for med det samme?
Avatar billede busschou Praktikant
06. august 2005 - 16:13 #30
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)
Avatar billede blackscorpion Nybegynder
06. august 2005 - 16:21 #31
hehe okey prøver lige ;)
Avatar billede blackscorpion Nybegynder
06. august 2005 - 16:25 #32
virker ikke... sker ikke en bjælde. :(

Valider fundtionen skal smides ind i headeren, ikke?
Avatar billede busschou Praktikant
06. august 2005 - 16:33 #33
jo og den skal også have type="text/javascript" på
Avatar billede blackscorpion Nybegynder
06. august 2005 - 16:34 #34
stadig intet. :(
Avatar billede busschou Praktikant
06. august 2005 - 16:36 #35
kan du vise mig din "vis kilde"
Avatar billede busschou Praktikant
06. august 2005 - 16:36 #36
eller give et link :o)
Avatar billede blackscorpion Nybegynder
06. august 2005 - 16:38 #37
kan ikke give dig et link, men kan give dig sovsen.

<html>
<head>
  <style type="text/css">
  .td.header {
    font-size: 12px;
    color: #000000;
    border-bottom: 1px solid #CCCCCC;
  }
 
  A:link, A:visited, A:active {
    color: #000000;
    text-decoration: none;
    font-size: 12px;
  }
 
  A:hover {
    text-decoration: underline;
    color: #000000;
    font-size: 12px;
  } 
 
  input {
    border: 1px solid black;
    font-size: 12px;
  }
 
  .content {
    font-size: 12px;
  }
  </style>
 
  <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>
 
</head>
<body topmargin="5" leftmargin="5">

<table cellpadding="0" cellspacing="0" border="0" width="100%">
  <tr>
  <td class="header">
Mandag d. 15 August 2005  </td>
  <td align="right" class="header">
    <a href="#" onclick="parent.hideBox(); parent.location.reload(true)">Luk Vindue</a><br>
  </td>
  </tr>
  <tr>
  <td colspan="2" align="center" class="content">   
    <br style="font-size: 5px">
    Kan arbejde:<br>
   
    <table cellpadding="0" cellspacing="0" border="0" width="200" class="content">
    <tr>
      <form action="popup_date_update.php" method="POST" onsubmit="return valider();">
      <td align="right">
<input type="hidden" name="int_date" value="1124085600">
<input type="hidden" name="userid" value="1234567890">
Fra : <input type="text" name="work_start" id="kl1"><br>
Til : <input type="text" name="work_end" id="kl2"><br>
<input type="submit" value=" Opdater "><br>
    </td>
    </form>
    </tr>
  </table>
 
  </td>
  </tr>
</table>

</body>
</html>
Avatar billede busschou Praktikant
06. august 2005 - 16:48 #38
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]$');
Avatar billede blackscorpion Nybegynder
06. august 2005 - 16:49 #39
IE og den havde jeg lige overset. ;)

prøver lige.
Avatar billede blackscorpion Nybegynder
06. august 2005 - 16:52 #40
okey nu får jeg en alert... MEN

start: 15:00
slut: 22:00

resultere i en fejl. :(
Avatar billede blackscorpion Nybegynder
06. august 2005 - 16:54 #41
samme fejl på 15.00 og 22.00 :(
Avatar billede busschou Praktikant
06. august 2005 - 17:09 #42
ahh det er klart, sorry
Som sagt var jeg jo ikke helt indøvet i regexp ;o)
to sek :o)
Avatar billede busschou Praktikant
06. august 2005 - 17:11 #43
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)
Avatar billede blackscorpion Nybegynder
06. august 2005 - 17:12 #44
okey det prøver vi så. ;)
Avatar billede blackscorpion Nybegynder
06. august 2005 - 17:12 #45
15:00 - 25:00 virker. :(
Avatar billede blackscorpion Nybegynder
06. august 2005 - 17:14 #46
forresten har smidt den kode der ændrer : til . ned i input felterne, sådan at man er sikker på altid at have . oppe i koden. ;)
Avatar billede blackscorpion Nybegynder
06. august 2005 - 17:14 #47
men den virker stadig ikke. :(
Avatar billede busschou Praktikant
06. august 2005 - 17:21 #48
har du husket F5 maaange gange ?
Avatar billede busschou Praktikant
06. august 2005 - 17:23 #49
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 \.
Avatar billede blackscorpion Nybegynder
06. august 2005 - 17:24 #50
har jeg skam også gjort. ;)
Avatar billede blackscorpion Nybegynder
06. august 2005 - 17:25 #51
den skal se sådan her ud.

var regexp = new RegExp('^([01]?[0-9]|[2][0-3])(.[0-5][0-9])?$');
Avatar billede blackscorpion Nybegynder
06. august 2005 - 17:26 #52
Avatar billede busschou Praktikant
06. august 2005 - 17:30 #53
det står dig firt for at ændre den
Kan kun konstatere at det jeg lavede til dig 17:11:35 virkede efter hensigten når din replace også var i funktionen
Avatar billede blackscorpion Nybegynder
06. august 2005 - 17:30 #54
jamen da jeg testede den, fik jeg en fejl...

kan da lige prøve igen.
Avatar billede busschou Praktikant
06. august 2005 - 17:31 #55
jvf fx her
http://azero.dk/support/programmering/regular-expressions/
Så matcher et punktum alle tegn undtagen linjeskift
Så jeg er ikke enig :o)
Avatar billede blackscorpion Nybegynder
06. august 2005 - 17:31 #56
har lige testen din, hvis jeg skriver 15.00 i start og 25.00 i slut, så går den direkte igennem...
Avatar billede busschou Praktikant
06. august 2005 - 17:32 #57
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)
Avatar billede blackscorpion Nybegynder
06. august 2005 - 17:32 #58
selv med 28.00 og 85.00 går den igennem...
Avatar billede busschou Praktikant
06. august 2005 - 17:33 #59
jamen hvis du er tilfreds med den du har fundet så benyt da endelig den :o)
Avatar billede blackscorpion Nybegynder
06. august 2005 - 17:34 #60
<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.
Avatar billede blackscorpion Nybegynder
06. august 2005 - 17:34 #61
og det er med din, hvor den fejler... :(
Avatar billede busschou Praktikant
06. august 2005 - 17:36 #62
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
Avatar billede blackscorpion Nybegynder
06. august 2005 - 17:37 #63
og når jeg smider

var regexp = new RegExp('^([01]?[0-9]|[2][0-3])(.[0-5][0-9])?$');

ind i præcist samme kode, så virker den.

hvis jeg bruger bogstaver.. fejl
hvis jeg skriver 15:00 til 28:00 så fejler den.

hvis jeg skriver 15:00 og 22:00 så virker det, da den ændrer : til . før den validere.

Hvis du er uenig eller andet, så sig det endelig, for er temmelig nysgerrig efter hvorfor din ikke virker hos mig. ;)
Avatar billede busschou Praktikant
06. august 2005 - 17:38 #64
hvad hvis du skriver
13-23
eller
2:23
Avatar billede blackscorpion Nybegynder
06. august 2005 - 17:39 #65
så virker den også. ;)
Avatar billede busschou Praktikant
06. august 2005 - 17:39 #66
min fejlede pga en parantes fejl som jeg ikke var klar over
17:36:45 har jeg fjernet to paranteser
Avatar billede blackscorpion Nybegynder
06. august 2005 - 17:40 #67
så fejler den. :(
Avatar billede busschou Praktikant
06. august 2005 - 17:40 #68
ja men det er vel ikke meningen`?
Så når du skal smide det ind i din database vil du få fejl fordi der er et "-" ;o)
Avatar billede blackscorpion Nybegynder
06. august 2005 - 17:40 #69
yes og når de parenteser er væk så virker det. ;)
Avatar billede busschou Praktikant
06. august 2005 - 17:40 #70
nu er jeg lost
ved ikke hvad der virker og fejler
Avatar billede busschou Praktikant
06. august 2005 - 17:40 #71
ok så, så nu virker det eller ?? hehe
Avatar billede blackscorpion Nybegynder
06. august 2005 - 17:41 #72
din nye regexp hvor du har fjernet parenteserne virker.

det fejler hvis jeg skriver 2:35 eller 17-00
Avatar billede blackscorpion Nybegynder
06. august 2005 - 17:42 #73
mon ikke det ville være nemmest at skrive 00.00 i hvert felt, så folk kan se hvordan de skal se ud??
Avatar billede busschou Praktikant
06. august 2005 - 17:52 #74
jo det kan du jo bare lade dem have som standard værdi altså
<input type="text" id="kl1" value="00.00">
Avatar billede blackscorpion Nybegynder
06. august 2005 - 17:55 #75
okey lige et superdumt spørgsmål...

findes der ikke elseif i javascript?
Avatar billede blackscorpion Nybegynder
06. august 2005 - 18:05 #76
okey den hedder else if, og ikke elseif. ;)
Avatar billede blackscorpion Nybegynder
06. august 2005 - 18:09 #77
sidste spørgsmål.

hvis jeg nu vil teste om der står 2 ens tal i begge felter, og om felt 1 er mindre end felt 2...

altså sådan at den fejler hvis der står 00.00 og 00.00, og den vil fejle hvis der står 17.00 og 12.00.
Avatar billede blackscorpion Nybegynder
06. august 2005 - 18:17 #78
<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.
Avatar billede blackscorpion Nybegynder
06. august 2005 - 18:19 #79
har rettet

      else if(kl1.value >= kl2.value) {

til

      else if(kl1.value > kl2.value) {
Avatar billede blackscorpion Nybegynder
06. august 2005 - 18:19 #80
Tak for hjælpen og din tid. ;)
Avatar billede busschou Praktikant
06. august 2005 - 18:21 #81
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)
Avatar billede blackscorpion Nybegynder
06. august 2005 - 18:23 #82
jamen hvis javascriptet ikke tillader at der kommer andet ind, end det jeg har bedt om, så er der vel intet at være nervøs for?
Avatar billede blackscorpion Nybegynder
06. august 2005 - 18:24 #83
og desuden har jeg lige tilføjet maxlength=\"5\" på alle felterne. ;)
Avatar billede busschou Praktikant
06. august 2005 - 18:26 #84
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
Avatar billede blackscorpion Nybegynder
06. august 2005 - 18:30 #85
*LOL* Gal så ser det hele pludseligt sjovt ud. ;)
Avatar billede blackscorpion Nybegynder
06. august 2005 - 18:30 #86
desuden så bliver en kunde kun oprettet mod at de bliver godkendt, så tror ikke jeg behøver spekulere på sql injection. ;)
Avatar billede busschou Praktikant
06. august 2005 - 18:34 #87
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)
Avatar billede blackscorpion Nybegynder
06. august 2005 - 18:38 #88
okey her er omstændighederne.

Det er til en kammi der har et vikar firma.

for at kunne oprette sig som bruger og få adgang til kalenderen, skal man skrive navn, adresse, telefon nummer og cpr.

så uanset hvor på sitet brugeren er, så følger der et unikt id med ham, så vi ved hvem han er.

dvs. hvis han spammer databasen, så ved vi præcist hvem det er.
Avatar billede blackscorpion Nybegynder
06. august 2005 - 18:41 #89
det kalenderen bruges til, er at angive hvornår brugeren kan arbejde.

Så det er faktisk i bedste interesse for ham, ikke at spamme databasen. ;)
Avatar billede busschou Praktikant
06. august 2005 - 18:47 #90
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)
Avatar billede busschou Praktikant
06. august 2005 - 18:47 #91
altså det er op til en selv at vurdere, ville bare sige det :o)
Avatar billede blackscorpion Nybegynder
06. august 2005 - 18:50 #92
jamen han kan IKKE skrive "drop database" da der kun kan være 5 tegn, og den ikke acceptere bogstaver?
Avatar billede busschou Praktikant
06. august 2005 - 18:52 #93
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
Avatar billede blackscorpion Nybegynder
06. august 2005 - 18:54 #94
hmm... tror lige jeg tjekker om på hvor brugeren kommer fra så. :P
Avatar billede blackscorpion Nybegynder
06. august 2005 - 18:54 #95
for hvis han laver sin egen side, så kommer han ikke fra mit domaine, og så vil den ikke oprette forbindelse til databasen. ;)
Avatar billede busschou Praktikant
06. august 2005 - 19:01 #96
jep jep
Men det vil så sige at nu laver du et sikkerheds tjek for at slippe for et andet???
lol
Avatar billede busschou Praktikant
06. august 2005 - 19:02 #97
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

hygge :o)
Avatar billede blackscorpion Nybegynder
06. august 2005 - 19:04 #98
er skam ikke ligeglad. ;)

Tak for hjælpen, og ha det godt. ;)
Avatar billede busschou Praktikant
06. august 2005 - 19:08 #99
Det var så lidt da :o)
Avatar billede roenving Novice
07. august 2005 - 02:42 #100
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]
Avatar billede blackscorpion Nybegynder
07. august 2005 - 10:38 #101
jeg tester ALTID op mod brugernavn og password i databasen. ;)
Avatar billede roenving Novice
07. august 2005 - 11:32 #102
Hvad nu hvis der blev tilføjet eller 1 er lig med 1 i enden af den sql-sætning i stedet for at den checker password ?-)
Avatar billede blackscorpion Nybegynder
07. august 2005 - 17:21 #103
kan ikke se hvordan det er muligt, da password bliver krypteret med md5...
Avatar billede busschou Praktikant
07. august 2005 - 18:02 #104
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
Avatar billede busschou Praktikant
07. august 2005 - 18:07 #105
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)
Avatar billede blackscorpion Nybegynder
07. august 2005 - 18:29 #106
jamen koden bliver krypteret med md5 før den overhovedet hiver det ind i mysql.

f.eks.

<?php

$ent_pass = md5($_REQUEST['password']);

$sql = "select * from mysql where user = '$_REQUEST[username]' AND password = '$ent_pass'";

eller noget i den stil.

så bliver den kode ALDRIG aktuel, da den er krypteret FØR den overhovedet har noget med mysql at gøre.
Avatar billede blackscorpion Nybegynder
07. august 2005 - 18:32 #107
dvs, krypteret ser: hukka';drop table;' sådan her ud: 9a445f59d1519d9479a651a00d94ca3e når den rammer mysql'en.
Avatar billede roenving Novice
07. august 2005 - 18:35 #108
-- hvad så hvis der skrives 'børge';drop table; ?-)
Avatar billede blackscorpion Nybegynder
07. august 2005 - 18:37 #109
sad jeg selv lige og spekulere på...

sådan her ser mit gamle login script ud.

<?php

extract($_REQUEST);

session_start();

error_reporting (E_ERROR | E_WARNING | E_PARSE);

// Is both username and password filled in?

if(!$_POST['username'] OR !$_POST['password']) {
header("Location: login.php");
exit;
}

// Both username and password, are filled correct in, let's proceed.

include("include/functions.inc");
include("admin/config.inc");

open_user_mysql_conn();

// Let's check if user is a member.

$result = mysql_query("select * from users where usr = '$_POST[username]'");

if(!mysql_num_rows($result)) {
header("Location: login.php");
exit;
}

// Checking to see if the user is already logged in.

$tmp_pwd = md5($_POST['password']);
$sql = "select * from onlineusrs where username = '$_POST[username]' AND usr_pwd = '$tmp_pwd' AND location = 'website'";
$login_result = mysql_query($sql);

if(mysql_num_rows($login_result)) {
header("Location: error-docs/logged_in.php?where=website");
exit;
}

// User is a member, let's check if he is banned, using the former sql results.

extract(mysql_fetch_array($result));

if($banned == "yes") {
if($location == "website" OR $location == "all") {
  header("Location: chat/chat_banned.php"); 
  exit;
}
}

// User is not banned, let's log him in, using the former sql results.

if($tmp_pwd == $pwd) {
$logged_in = "yes";
$time = time();
$password = $_POST['password'];

/*
$_SESSION['usr'] = $usr;
$_SESSION['password'] = $password;
$_SESSION['logged_in'] = $logged_in;
$_SESSION['status'] = $status;
$_SESSION['time'] = $time;
*/

session_register("usr");
session_register("password");
session_register("logged_in");
session_register("status");
session_register("time");
/*
session_write_close();
*/

$site_logins++; // Updates users corrent site_logins.

$sql = "update users set site_logins = '$site_logins' where usr = '$_POST[username]'";
mysql_query($sql);

$optimize_sql = 'OPTIMIZE TABLE `users`';
mysql_query($optimize_sql);

$sql = "insert into onlineusrs set username = '$_POST[username]', usr_pwd = '$tmp_pwd', online = 'yes', usrstatus = '$status', location = 'website'";
mysql_query($sql);

$optimize_sql = 'OPTIMIZE TABLE `onlineusrs`';
mysql_query($optimize_sql);

  if($login_page == "login") {
  header("Location: $main_index");
  }
  else {
  header("Location: $login_page.php");
  }
}
else {
header("Location: login.php");
}

?>
Avatar billede blackscorpion Nybegynder
07. august 2005 - 18:39 #110
hvordan ville være den idelle måde at tjekker op, og sikre sig mod sql-injection?
Avatar billede busschou Praktikant
07. august 2005 - 18:40 #111
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
Avatar billede blackscorpion Nybegynder
07. august 2005 - 18:44 #112
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
Avatar billede blackscorpion Nybegynder
07. august 2005 - 18:44 #113
har brugt overstående eksempel, med user tabellen, name = børge og pass = hukka.
Avatar billede blackscorpion Nybegynder
07. august 2005 - 18:46 #114
btw. er det ' eller ; der er synderen i sql-injection?
Avatar billede busschou Praktikant
07. august 2005 - 18:47 #115
bare det at du kan få en syntaks fejl indikerer jo at intet er umuligt :o)
Avatar billede blackscorpion Nybegynder
07. august 2005 - 18:48 #116
true. ;)
Avatar billede busschou Praktikant
07. august 2005 - 18:48 #117
' 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
Avatar billede blackscorpion Nybegynder
07. august 2005 - 18:50 #118
http://dk2.php.net/manual/da/function.mysql-real-escape-string.php
mysql_real_escape_string --  Sikrer special karakterer i en streng, til brug i en MySQL erklæring
Avatar billede blackscorpion Nybegynder
07. august 2005 - 18:50 #119
tror vi skal ud i denne funktion. ;)
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