Avatar billede nemlig Professor
29. april 2009 - 23:33 Der er 16 kommentarer og
1 løsning

Tjek om tal-fejl er udfyldt

Hejsa. Jeg har en inputform, hvor der SKAL indtastes et tal, og det indtastede tal, må gerne være "0"
Men denne kode, giver altså en fejlmelding, når der er indtastet "0":
Hvad skal der til, for at "0" accepteres. (Jeg ved godt, at man bare kan skrive "00", men jeg vil gerne at "0" accepteres.

if(isset($_POST['depositum']) && empty($_POST['depositum']))
{       
$fejl = "$fejl Du skal udfylde feltet \"Depositum\".";
}
Avatar billede CCodam Nybegynder
29. april 2009 - 23:43 #1
Hmm det virker da besynderligt at den ser 0 som empty...men du kan jo prøve at omskrive det til følgende:

if(isset($_POST['depositum']) && $_POST['depositum'] == "")

Ved dog ikke om dette vil virke?
Avatar billede CCodam Nybegynder
29. april 2009 - 23:46 #2
Hov jeg kom da lige til at tænke på at [i]if(isset($_POST['depositum']))[/I] burde være nok, da isset jo netop tjekker for om feltet er NULL eller ej :)
Avatar billede erikjacobsen Ekspert
29. april 2009 - 23:54 #3
funktionen empty kan stort set ikke bruges til noget fornuftigt - et levn fra gamle dage?

Men hvad mener du med et "tal"? Positivt tal? Eller også negativt? Med foranstillede nuller?

Er du præcis nok i dit ønske, kan vi banke et regulært udtryk op på ingen tid. Tror jeg. Nok.
Avatar billede nemlig Professor
29. april 2009 - 23:55 #4
Hvis jeg skriver sådan her:

if(isset($_POST['depositum'])) {
$fejl = "$fejl Du skal udfylde feltet Depositum.";
}

får jeg fejlen hver gang - uanset om jeg skriver noget eller ej.
Avatar billede CCodam Nybegynder
29. april 2009 - 23:59 #5
#4 Ja det er mig der er ved at være træt, isset vil altid være true, da du har udført formen og derved sendt feltet

Empty er TRUE ved følgende kriterier:
    * "" (an empty string)
    * 0 (0 as an integer)
    * "0" (0 as a string)
    * NULL
    * FALSE
    * array() (an empty array)
    * var $var; (a variable declared, but without a value in a class)

Jeg ville gå med:

if($_POST['depositum'] == "") {
$fejl = "$fejl Du skal udfylde feltet Depositum.";
}
Avatar billede nemlig Professor
30. april 2009 - 00:02 #6
Hehe - lyder godt.
Kravene er:
1. må været tomt
2. skal være numerisk
3. skal være 0 eller højere
4. må gerne være med decimaler.

Feltet anvendes til at skrive en pris for en ydelse. Prisen kan dog godt være "0".
Avatar billede nemlig Professor
30. april 2009 - 00:07 #7
#5  Det ser ud til at være løsningen. Jeg har styr på de øvrige valideringer.
Avatar billede nemlig Professor
30. april 2009 - 00:13 #8
Jeg skal dog lige spørge til, om det er mest korrekt sådan her:

if(isset($_POST['depositum']) && $_POST['depositum'] == '')

Eller er det ligegyldigt med den første del med "isset"...
Avatar billede CCodam Nybegynder
30. april 2009 - 00:19 #9
#6
Hvis du gerne vil lave noget der klare alle punkter i #6 i en sætning, så skal du benytter dig af preg_match og regular expressions:

if (preg_match("/^[0-9\.]+$/", $_POST['depositum'])) {
    echo "depositum indeholder et tal, med eller uden .";
} else {
    echo "depositum indeholder ikke et tal";
}


Du kan ændre . til , i "/^[0-9\.]+$/" hvis der bruges komma og ikke punktom ved decimal tal...


#8
Jeg ville råde dig til at lave en isset på din submit knap, og herinde under tjekke dine felters indhold:

if(isset($_POST['submit'])) {
  if($_POST['depositum'] == "") {
    echo "Der er IKKE noget i feltet depositum";
  } else {
    echo "Der er noget i feltet depositum";
  }
}
Avatar billede nemlig Professor
30. april 2009 - 00:25 #10
OK - super kommentar. Mange tak.

Jeg konkluderer, at jeg kun behøver "isset", når jeg foretaget submit.

Send venligst et svar. :)
Avatar billede CCodam Nybegynder
30. april 2009 - 00:37 #11
#10 Det var så lidt :)
Avatar billede erikjacobsen Ekspert
30. april 2009 - 08:47 #12
/^[0-9\.]+$/ tillader nu også mere end "komma"-tal, fx.:  123.345.5667
Avatar billede CCodam Nybegynder
02. maj 2009 - 00:02 #13
#12 Du har helt ret...men kunne du så ikke ha kommet med løsningen ;)

Du kan i stedet bruge følgende:
/^[0-9]*[\.]*[0-9]+$/

Denne tillader 0 eller 1 punktum, 0 eller flere tal før og 1 eller flere tal efter
Avatar billede erikjacobsen Ekspert
02. maj 2009 - 00:10 #14
Det er vel ikke løsningen, for den accepterer også ret sjove ting. Jeg venter egentlig blot på at spørgeren præcist formulerer hvad et "tal" er. Men det er ligemeget hvis spørgeren er tilfreds med de hidtidige svar.
Avatar billede nemlig Professor
02. maj 2009 - 00:17 #15
Jeg har klaret det med 2 kontroller:

1. Tjek om feltet er udfyldt, hvilket er et krav. 0 betragtes som værende udfyldt.

2. Tjek på om tallet er nummerisk.


if(isset($_POST['depositum']) && $_POST['depositum'])
{
if(is_numeric($depositum) === FALSE)
{
$fejl = "$fejl <span class='textfejl'>Du har ikke udfyldt depositum korrekt.</span><br>";
}
}

if(isset($_POST['depositum']) && $_POST['depositum'] == '') 
{
$fejl = "$fejl <span class='textfejl'>Du skal udfylde feltet \"Depositum\".</span><br>";   
}
Avatar billede nemlig Professor
02. maj 2009 - 00:20 #16
Og jeg skal lige tilføje, at $_POST['depositum'] også har været igennem en konvertering fra dansk til engelsk, som jeg efterfølgende har kaldt $depositum.

function da_en($konverter_da_en){
$konverter_da_en = str_replace(".", "", $konverter_da_en);
$konverter_da_en = mysql_real_escape_string(str_replace(",", ".", $konverter_da_en));
return $konverter_da_en;
}
Avatar billede CCodam Nybegynder
02. maj 2009 - 00:29 #17
#14 Undskyld det skal selvfølgelig være:
/^[0-9]*[\.]?[0-9]+$/

Men så acceptere den også kun tal eller .tal eller tal.tal
Ikke flere "sjove" ting...
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