Avatar billede hoejgaard Juniormester
16. juni 2005 - 12:36 Der er 77 kommentarer og
1 løsning

Form med tal

Hej.
Jeg har en form hvor et af felterne skal udfyldes med et tal. Hvordan sikrer jeg at brugerne højest kan indtaste 6 cifrede tal i feltet. Har prøvet at sætte feltet til int med 6 tegn i MySql databasen, men kan alligevel indtaste 1000000 (7cifre).?????
Avatar billede hammerhead Nybegynder
16. juni 2005 - 12:40 #1
Brug evt. dette:
maxlength="6"

<input type="text" maxlength="6" name="xxx" size="20">
Avatar billede hoejgaard Juniormester
16. juni 2005 - 14:05 #2
okay fint, men hvordan med valideringen. Der må kun indsættes heltal større end 0.
Avatar billede delphinarious Nybegynder
16. juni 2005 - 14:30 #3
Hvis du skal checke det inden formularen submittes, kan du ikke bruge PHP. Så skal du bruge javascript. Men hvis du vil lade brugeren submitte formularen, og dernæst checke, kan du bruge PHP. Which will it be?
Avatar billede hoejgaard Juniormester
16. juni 2005 - 14:35 #4
Jeg bruger php modellen
Avatar billede roenving Novice
16. juni 2005 - 14:36 #5
Hvorfor bruger du ikke begge, så de mere tåbelige fejl kan klares uden turen rundt om serveren ...

-- men det betyder selvfølgelig ikke, at du ikke skal checke det før du indsætter noget i din database !-)
Avatar billede delphinarious Nybegynder
16. juni 2005 - 14:51 #6
Roenving >> Så vil jeg da vove at påstå at klientside-valideringen vil være overflødig? Jeg mener hvis det alligevel skal checkes serverside?

Hoejgaard >> Vis os den kode, hvor du modtager felterne og smider i db, så vi kan vise dig validerings-idéen...
Avatar billede roenving Novice
16. juni 2005 - 14:57 #7
Nej, for hvis du fanger 99,9% af de indtastningsfejl, brugeren laver client-side, sparer du både din server for noget unødig belastning og brugeren for den ventetid, der måtte være på at serveren returnerer med en fejlmeddelelse !o]

Men selvfølgelig skal du også checke serverside, man kunne jo forestille sig ondsindede brugere, som lavede deres egen form, hvor checket ikke var på (samt måske, at du lige præcis fanger een af de få, som har javascript disablet !-)
Avatar billede delphinarious Nybegynder
16. juni 2005 - 15:03 #8
roenving >> Helt enige om at serverside-validering er et must. Men jeg vil stadig mene, at serveren bruger den kraft den bruger på at checke formen, og bruger hverken mere eller mindre hvis formen ikke kan valideres. Ja altså, det kommer selvfølgeligt an på koden, men såfremt man bygger det nogenlunde fornuftigt op...
Avatar billede roenving Novice
16. juni 2005 - 15:11 #9
Hvis du har et antal felter, som er mandatory og/eller har bestemte form-krav, risikerer du at skulle returnere den samme side til brugeren for hvert eneste felt, måske endda flere gange ved f.eks. strikse krav til datoer, og det betyder jo, at serveren flere gange skal behandle det samme, og det er jo tåbeligt, hvis man kan lade de simple indtastningsfejl være behandlet af brugerens maskine (hvor der med meget stor sandsynlighed er mylliarder af kræfter i overskud !-)
Avatar billede hoejgaard Juniormester
16. juni 2005 - 15:48 #10
Jeg har ikke lyst til at begive mig ud i javascript, da jeg ikke har check på det.

Felterne der skal være heltal >0 er føklgende :


    <TR>
      <TD class="td13">Højde:</TD>
      <TD WIDTH="52%" class="td13"><INPUT NAME="hoejde" TYPE="text" style="font-size:9px"  STYLE="height: 17px"  SIZE="4" MAXLENGTH="3">&nbsp;cm</TD>
       
    </TR>
<TR>
      <TD class="td32">Alder:</TD>
        <TD WIDTH="52%" class="td13"><INPUT NAME="alder" TYPE="text" style="font-size:9px"  STYLE="height: 17px"  SIZE="4" MAXLENGTH="3">&nbsp;år</TD>
       
    </TR>


<TR>
      <TD class="td13">Vægt:</TD>
        <TD WIDTH="52%" class="td13"><INPUT NAME="vaegt" TYPE="text" style="font-size:9px"  STYLE="height: 17px"  SIZE="4" MAXLENGTH="3">&nbsp;kg</TD>
       
    </TR>
Avatar billede martin1000ben Nybegynder
16. juni 2005 - 16:02 #11
Jeg vil mene at den bedste løsning vil være:
<?php
if(ereg('[0-9]{6}',$tal_fra_form)) !== true) {
  print "Der skete en fejl";
} else {
  // Mysql indsæt tingest her
}
Avatar billede Slettet bruger
16. juni 2005 - 16:16 #12
Jeg regner med, at grunden til at du siger at der ikke må indtastes 0 er, at du ikke vil have "0" alene, men "102040" godt må komme med:

<?
if(is_numeric($_POST['tal']) && $_POST['tal'] != 0)
  {
  # Det virker
  }
else
  {
  #Enten er det en streng der er indtastet, 0 eller slet ingen ting

?>
Avatar billede Slettet bruger
16. juni 2005 - 16:16 #13
<?
if(is_numeric($_POST['tal']) && $_POST['tal'] != 0)
    {
    # Det virker
    }
else
    {
    #Enten er det en streng der er indtastet, 0 eller slet ingen ting
    }
?>
Avatar billede hoejgaard Juniormester
16. juni 2005 - 16:25 #14
checker lige de forskellige gode forslag :-)
Avatar billede hoejgaard Juniormester
16. juni 2005 - 20:26 #15
wicez hvordan ser det ud hvis jeg skal spørge på om det er  falsk dvs. noget i retning af if(!is_numeric($_POST['tal']) && $_POST['tal'] = 0)  { der er fejl}

Er det korrekt ??
Avatar billede hoejgaard Juniormester
16. juni 2005 - 20:55 #16
wicez din metode godtager feks 5.6 og det skal ikke med kun hele tal og ikke decimaltal. hvordan kan man det ??
Avatar billede sukos Juniormester
16. juni 2005 - 21:36 #17
<?php
//Taget fra http://dk.php.net/manual/en/function.is-numeric.php

$input_number = "3478";

if (preg_match ("/^([0-9]+)$/", $input_number)) {
    print "Answer 1";
} else {
    print "Answer 2";
}

// Med 6 tegn:
echo"<p>";

if(trim(strlen($input_number)) !=0 && strlen($input_number) < 7) {

    if (preg_match ("/^([0-9]+)$/", $input_number)) {
    echo"Ok";
    }else{
    echo"NIX";
    }
}else{
echo"\$input_number er ikke ok!";
}

?>
Avatar billede sukos Juniormester
16. juni 2005 - 21:41 #18
Nåh, trim(strlen(......... kan jo sagtens undværes! :O)
Avatar billede sukos Juniormester
16. juni 2005 - 22:03 #19
Hmm, selvf. (tror jeg)

$input_number = "123456";

    if (preg_match ("/^([0-9]){1,6}$/", )) {
    echo"Ok";
    }else{
    echo"NIX";
    }

må lære mig noget regexp someday()
Avatar billede sukos Juniormester
16. juni 2005 - 22:05 #20
hov:O)
    if (preg_match ("/^([0-9]){1,6}$/", $input_number)) {
    echo"Ok";
    }else{
    echo"NIX";
    }
Avatar billede hoejgaard Juniormester
16. juni 2005 - 22:06 #21
hvad med denne :
if (!ctype_digit($_POST[alder]))  {    }
Avatar billede sukos Juniormester
16. juni 2005 - 22:09 #22
Jahh, så skal længden jo så bare på :O)
Avatar billede hoejgaard Juniormester
16. juni 2005 - 22:19 #23
Har brugt maxlength="6"

Hvis jeg laver blanke tegn i et felt så siger den at det ikke er et heltal. Det vil jeg gerne undgå. Hvordan gør jeg det ??
Avatar billede sukos Juniormester
16. juni 2005 - 22:23 #24
blanke tegn?
f.eks. 1 70
eller hvordan?
Lyder ikke rigtigt "relevant" ???
Avatar billede sukos Juniormester
16. juni 2005 - 22:24 #25
Og ellers, så kan ctype_digit() ikke bruges
Avatar billede hoejgaard Juniormester
16. juni 2005 - 22:24 #26
Jo hvis en bruger bare trykke på mellemrumstasten uden at skrive noget i feltet, så vurderer den det som et "ikke heltal"
Avatar billede sukos Juniormester
16. juni 2005 - 22:27 #27
Hvis der er mellemrum, vil ctype_digit() fejle

Men hvis man også kan bruge mellemrum:

if(trim($input_number) != "" && strlen($input_number) < 7) {
    if (preg_match ("/^([0-9 ])$/", $input_number)) {
    echo"Ok";
    }else{
    echo"NIX";
    }
}
Avatar billede sukos Juniormester
16. juni 2005 - 22:28 #28
b.t.w. du bør ikke stole på maxlenght
Avatar billede hoejgaard Juniormester
16. juni 2005 - 22:31 #29
Der skal ikke meldes fejl på et tomt felt (Også blanke tegn)! Gør ovenstående det ??
Avatar billede sukos Juniormester
16. juni 2005 - 22:35 #30
Hmm, du vil gemme i DB?
Ville nok selv gøre så'n:

$to_db = "";

if(trim($_POST["alder"]) != "") {
    if (preg_match ("/^([0-9 ]){1,6}$/", $_POST["alder"])) {
    $to_db = $_POST["alder"];
    }
}
Avatar billede hoejgaard Juniormester
16. juni 2005 - 22:35 #31
hedder det if (!preg_match ("/^([0-9 ])$/", $input_number)) {

Hvis jeg skal spørge om det ikke opfylder sætningen ??
Avatar billede sukos Juniormester
16. juni 2005 - 22:36 #32
jup, men så kan du heller ikke bruge mellemrum! :O)
Avatar billede sukos Juniormester
16. juni 2005 - 22:37 #33
Sludder, så er det x antal tegn som accepteres, tal og mellemrum
Avatar billede hoejgaard Juniormester
16. juni 2005 - 22:38 #34
kan heller ikke bruge mellemrum
Avatar billede sukos Juniormester
16. juni 2005 - 22:38 #35
?
Hvad, hvordan mellemrum?
Avatar billede hoejgaard Juniormester
16. juni 2005 - 22:42 #36
Jeg mener tror det virker nu men checker det lige
Avatar billede hoejgaard Juniormester
16. juni 2005 - 22:50 #37
Jeg har et problem med de blanke tegn. Jeg har et felt hvor der skal skrives noget, men  hvor man slipper afsted med kan at lave blanke tegn.
if (empty($_POST[alder]) && trim($_POST[alder]) == "") { echo "du skal skrive et tal";  ?>

Ovenstående virker ikke ??
Avatar billede nielle Nybegynder
16. juni 2005 - 22:51 #38
Tallet måtte jo ikke være 0:

$input_number = trim($input_number);

if (!preg_match ("/^[1-9]\d{0,5}/", $input_number)) { ...
Avatar billede hoejgaard Juniormester
16. juni 2005 - 22:52 #39
Okay tallet må godt være 0, men jeg vil ikke ha at brugeren kan lave kun blanke tegn og den så ryger igennem
Avatar billede nielle Nybegynder
16. juni 2005 - 22:53 #40
Der manglede lige et $-tegn:

$input_number = trim($input_number);

if (!preg_match ("/^[1-9]\d{0,5}$/", $input_number)) { ...

Fortolkning: Efter at vi har slettet blanktegn foran og bagved skal der stå et ciffer i internallet 1-9 måligvis efterfulgt af op til 5 vilkårlige ciffre.
Avatar billede nielle Nybegynder
16. juni 2005 - 22:54 #41
Hvis der godt må stå et 0:

$input_number = trim($input_number);

if (!preg_match ("/^(0|[1-9]\d{0,5})$/", $input_number)) { ...
Avatar billede sukos Juniormester
16. juni 2005 - 22:55 #42
Hvor blev mellemrum af så?
Avatar billede hoejgaard Juniormester
16. juni 2005 - 22:55 #43
Ja det er rigtigt prøver det lige
Avatar billede sukos Juniormester
16. juni 2005 - 22:58 #44
Nu er det så ikke hele formen vi ser, men lige netop med dato halløj, er det langt mere sikkert at bruge nogle selects, år, måned, dato, og derefter bruge checkdate()
b.t.w. :O)
Avatar billede hoejgaard Juniormester
16. juni 2005 - 23:01 #45
okay det er ikke datoer der skal checkes ! men kun tal
Avatar billede hoejgaard Juniormester
16. juni 2005 - 23:05 #46
nielle, kan det ikke undgåes at din model også godtager udelukkende blanktegn ??
Avatar billede nielle Nybegynder
16. juni 2005 - 23:05 #47
16/06-2005 16:16:51> En lille kuriøsitet: Det tjek vil også akceptere "10e20". Dette er nemlig en lovlig måde at skrive 10 * 10^20.
Avatar billede nielle Nybegynder
16. juni 2005 - 23:06 #48
Min løsning akceptere da ikke udelukkende blanktegn.
Avatar billede hoejgaard Juniormester
16. juni 2005 - 23:08 #49
Nej men det vil jeg gerne ha den gør :-) hvordan ser koden så ud ??
Avatar billede nielle Nybegynder
16. juni 2005 - 23:09 #50
Du har da ellers sagt et par gange at feltet skulle være udfyldet? Well, here goes:

$input_number = trim($input_number);

if (!preg_match ("/^(0|[1-9]\d{0,5})?$/", $input_number)) { ...
Avatar billede hoejgaard Juniormester
16. juni 2005 - 23:10 #51
Ja jeg er også lidt rundtosset, men et sted skal det være udfyldt og et andet sted ikke ! puhhaaaa håber snart jeg får løst det her..
Avatar billede hoejgaard Juniormester
16. juni 2005 - 23:12 #52
øhh hvad er forskellen på det og så det sidste du skrev 16/06-2005 22:54:55  ??
Avatar billede nielle Nybegynder
16. juni 2005 - 23:12 #53
Der er et ikke magisk spørgsmålstegn efter parentesen. :^)
Avatar billede nielle Nybegynder
16. juni 2005 - 23:15 #54
"ikke" skulle have været "lille". Det betyder at det som står indenfor i parentesen er optional - at det kan udelades.
Avatar billede hoejgaard Juniormester
16. juni 2005 - 23:18 #55
Tror det virker. Hvordan laver jeg en forespørgsel på om et felt er tomt altså
if empty($_POST[alder])  { feltet må ikke være tomt}

men samtidig skal 0 være i orden  ?
Avatar billede nielle Nybegynder
16. juni 2005 - 23:22 #56
Den fik jeg ikke lige fat i?! Feltet må ikke være tomt, men der må godt stå 0 i det.

Burde du ikke hellere fortælle hvad der *ikke* må stå i feltet hvis det ikke er tomt?
Avatar billede nielle Nybegynder
16. juni 2005 - 23:23 #57
Sengen kalder.

Jeg smider lige et svar for en god ordens skyld. :^)
Avatar billede nielle Nybegynder
16. juni 2005 - 23:25 #58
Det betyder selvfølgelig ikke at vi ikke sagtens kan gøre den færdig i morgen :^)
Avatar billede hoejgaard Juniormester
16. juni 2005 - 23:26 #59
Jeg spørger på om feltet er tomt for det må det ikke være. Men i samme forespørgsel siger den at feltet er tomt hvis jeg har skrevet et 0. Men 0 er iorden så hvordan får jeg den til at acceptere det ??
Avatar billede Slettet bruger
17. juni 2005 - 10:33 #60
hoejgaard du må undskylde at jeg ikke svarede på dine spørgsmål.. jeg havde regnet med at få en mail :/
Avatar billede Slettet bruger
17. juni 2005 - 10:34 #61
if (!preg_match ("/^([0-9]\d{0,5})$/", $input_number))
Avatar billede hoejgaard Juniormester
17. juni 2005 - 10:56 #62
Ja fint :-)
Jeg har lige et andet valideringsspørgsmål hvis vi ka klare det her.
Jeg skal have valideret et brugernavn som må bestå af tal,bogstaver,og bindestreg, men ikke alle mulige specialtegn.. Hvordan ser forespørgslen så ud ??
Avatar billede roenving Novice
17. juni 2005 - 11:27 #63
/^(\wæøå-)+$/, som også vil acceptere _ !-)
Avatar billede hoejgaard Juniormester
17. juni 2005 - 11:42 #64
roenving jeg har dette:
<? if (!preg_match ("/^(\wæøå-)+$/", $_POST[brugernavn]) && !empty($_POST[brugernavn]))  { ?>
                          <tr><td width="7%" ><br>&nbsp;</td><td class="td17"><br><b>Du har indtastet et ugyldigt brugernavn !</b></td><td width="13%"><br>&nbsp;</td></tr> <? } ?>   

Men eks. ÅÅ skal ikke være ugyldigt, men det er det ??
Avatar billede hoejgaard Juniormester
17. juni 2005 - 12:01 #65
Har også prøvet dette, men det virker heller ikke :

<? if (!ereg("^[a-zæøåÆØÅ-Z0-9_.-]+$" , $_POST[brugernavn]) && !empty($_POST[brugernavn])) { ?>
                          <tr><td width="7%" ><br>&nbsp;</td><td class="td17"><br><b>Du har indtastet et ugyldigt brugernavn !</b></td><td width="13%"><br>&nbsp;</td></tr>  <? } ?>
Avatar billede roenving Novice
17. juni 2005 - 12:09 #66
Så skal du bare fjerne æøå i den første !-)

<? if (!preg_match ("/^(\w-)+$/", $_POST[brugernavn]) /*...*/)

-- regexpen vil iøvrigt heller ikke acceptere tomme, men jeg ved ikke hvordan preg_match arbejder ...
Avatar billede hoejgaard Juniormester
17. juni 2005 - 13:00 #67
Nu har jeg :
<?  if (!preg_match( "/^[a-zæøåA-ZÆØÅ\-\.\_\ ]{1,12}$/", $_POST['brugernavn']) && !empty($_POST[brugernavn]))  { ugyldigt navn }

Det virker vist, men kan det skrives bedre/kortere/smartere
Avatar billede roenving Novice
17. juni 2005 - 13:02 #68
Du kan nok skippe !empty, da du i forvejen kun accepterer et eller flere tegn !-)
Avatar billede hoejgaard Juniormester
17. juni 2005 - 13:37 #69
okay fint, puha det er hårdt med den validering, men det er nødvendigt til en vis grad..
Lige en lille ting til :
Når jeg smider feks. navnene "a a" og "a    a" i databasen så er det ok, men når jeg hvier dem ud af databasen og skriver dem ud så er de ens som "a a"
Kan jeg ikke få dem skrevet ud som de står i databasen med korrekte mellemrum ??
Avatar billede roenving Novice
17. juni 2005 - 13:51 #70
Hvis du udskriver det i html-kode, vil 'overflødige' whitespaces blive skippet, så du skal konvertere dem til &nbsp;-entiteten !-)
Avatar billede hoejgaard Juniormester
17. juni 2005 - 14:01 #71
øhh er ikke helt med. Hvordan skal jeg lave om på følgende så det whitespaces ikke skippes ?? :
<td    align = left  width="20%"><? echo "<a href=\"visprofil.php?vis=".$row['brugernavn']."\" class='link9'>$row[brugernavn]</a>";  ?></td>
Avatar billede hoejgaard Juniormester
17. juni 2005 - 16:22 #72
Ja har stadig ikke fået løst det med at undgå at whitespacene skippes.
Har lige en ting med valideringen :
<?  if (!preg_match( "/^[a-zæøåA-ZÆØÅ\-\.\_\ ]{1,12}$/", $_POST['brugernavn']) && !empty($_POST[brugernavn]))  { ?>
                          <tr><td width="7%" ><br>&nbsp;</td><td class="td17"><br><b>Du har indtastet et ugyldigt brugernavn !</b></td><td width="13%"><br>&nbsp;</td></tr>  <? } ?>   

Hvis $_POST[brugernavn]=tester112 så siger den at det er ugyldigt.. Det forstår jeg ikke?? Er den ikke sat til at godkende tal ??
Avatar billede nielle Nybegynder
17. juni 2005 - 18:04 #73
Ang. dine whitespaces som ikke skal skippes, så har roenving (17/06-2005 13:51:06) givet svaret. De skal erstattes med "&nbsp;"

Hvis du har outputtet fra databasen i variablem $output, så der det sådan her ud:

$output = str_replace(" ", "&nbsp;", $output);
Avatar billede hoejgaard Juniormester
17. juni 2005 - 18:35 #74
okay tak for det nielle jeg kigger på det :-)

Men lige den sidste.
Hvordan får jeg denne til at godkende tal, den siger det er ugyldigt hvis jeg indsætter tal ?? :

<?  if (!preg_match( "/^[a-zæøåA-ZÆØÅ\-\.\_\ ]{1,12}$/", $_POST['brugernavn']) && !empty($_POST[brugernavn]))  { ?>
                          <tr><td width="7%" ><br>&nbsp;</td><td class="td17"><br><b>Du har indtastet et ugyldigt brugernavn !</b></td><td width="13%"><br>&nbsp;</td></tr>  <? } ?>
Avatar billede nielle Nybegynder
17. juni 2005 - 19:01 #75
Indsæt et \d for tal:

if (!preg_match( "/^[a-zæøåA-ZÆØÅ\d\-\.\_\ ]{1,12}$/", $_POST['brugernavn']) && !empty($_POST[brugernavn]))  { ?>
Avatar billede nielle Nybegynder
24. juni 2005 - 18:45 #76
Lukketid?
Avatar billede hoejgaard Juniormester
25. juni 2005 - 18:07 #77
læg et svar
Avatar billede nielle Nybegynder
26. juni 2005 - 10:33 #78
Takker for point :^)
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