Avatar billede nyst Nybegynder
07. juni 2004 - 14:58 Der er 70 kommentarer og
2 løsninger

udregning giver fejl pga nul

Hej, er der en som kan hjælpe,

jeg får følgende fejl:

Division by zero

allerede når jeg kalder siden - altså inden der er indtastet i felterne.

Min kode:

<form method="post" action="<?php echo $_SERVER['php_self']; ?>">
Indtast din vægt i kg <input name="v" type="text" size="6"><br>
Indtast din højde i cm <input name="hcm" type="text" size="6"><br>
Indtast din højde i m <input name="hm" type="text" size="6"><br>
<input type="submit" value="Beregn">
</form>

<?php
    $v = $_REQUEST["v"];
    $hcm = $_REQUEST["hcm"];
    $hm = $_REQUEST["hm"];
    $bmi = $v / ($hcm * $hm);
    echo ("BMI er $bmi");
?>

hvad er der galt?
Avatar billede exp Juniormester
07. juni 2004 - 15:01 #1
<?php
if(isset($_POST['Beregn'])) {
    $v = $_REQUEST["v"];
    $hcm = $_REQUEST["hcm"];
    $hm = $_REQUEST["hm"];
    $bmi = $v / ($hcm * $hm);
    echo ("BMI er $bmi");
}
?>
Avatar billede taskmgr Nybegynder
07. juni 2004 - 15:19 #2
Og så husk lige at give din submit knap et navn :)

<input type="submit" name="Beregn" value="Beregn">
Avatar billede nyst Nybegynder
07. juni 2004 - 15:52 #3
exp>> jeg kan se der skal tilføjes en 'fejlbesked' hvis et af felterne er tomme ellers giver den igen Division by zero, er det bedst i form eller vodden' *S*
Avatar billede nyst Nybegynder
07. juni 2004 - 16:20 #4
hov den skal i øvrigt afrunde til nærmeste hele tal og

    $bmi = $v / ($hcm * $hm);

er

    $bmi = ($v / ($hcm * $hm)) * 10000;

Kan man indsætte en kode så det er ligemeget om man skriver punktum eller komma som decimaltal - jeg kan se at denne beregning kun duer hvis man bruger punktum og de fleste har jo komma på deres taltastatur??
Avatar billede jaw Nybegynder
07. juni 2004 - 18:33 #5
ved ikke lige om du kan lave det du forestpørger, men du kan jo udskifte , med .
Avatar billede jaw Nybegynder
07. juni 2004 - 18:40 #6
$hcm = str_replace(",",".",$hcm);
Avatar billede exp Juniormester
08. juni 2004 - 08:38 #7
Her kan du finde noget om validering af et tekstfelt :-)
www.html.dk/scripts/javascript/00013/
Avatar billede nyst Nybegynder
08. juni 2004 - 09:57 #8
exp>>
Jeg har selv fundet løsning på afrunding - bruger 'ceil'
så kun 1 ting tilbage

kode:

<?php
if(isset($_POST['Beregn'])) {
    $vkg = $_REQUEST["vkg"];
    $hcm = $_REQUEST["hcm"];
    $bmi = ceil(($vkg / ($hcm * $hcm)) * 10000);
    echo ("<b>$bmi</b>");
}
?>

hvis der ikke udfyldes i begge felter - altså vkg og hcm - så skal der komme en besked herom - hvordan får jeg flettet den ind?
Avatar billede jaw Nybegynder
08. juni 2004 - 10:04 #9
<script type="text/javascript">
<!-- Dette script og mange flere -->
<!-- findes hos http://www.html.dk -->
<!-- Start

function validering()
  {
  error = 0;
  if((document.forms[0].vkg.value=='') || (document.forms[0].hcm.value=='') && (error==0)) 
  {       
    alert('Tekstfeltet skal udfyldes!');
    document.forms[0].tekstfeltnavn.focus();
    error = 1;       
  }           

  if(error == 0)
  document.forms[0].submit();   
  }

// Slut -->
</script>

Ved skam godt det er exp's link - men tror det burde funke...
Avatar billede nyst Nybegynder
08. juni 2004 - 10:13 #10
jaw>> jeg er kun ude efter php-løsninger, sorry
Avatar billede jaw Nybegynder
08. juni 2004 - 10:20 #11
ohh, jamen så kan du vel lave noget a'la:

if($vkg && $hcm) {
  //beregn
} else {
  echo "Du skal udfylde begge felter";
}
Avatar billede exp Juniormester
08. juni 2004 - 10:25 #12
Husk lige at opdatere det så det virker med alle tilgængelige php-versioner:

if(isset($_POST['vkg']) && isset($_POST['hcm'])) {
  //beregn
} else {
  echo "Du skal udfylde begge felter";
}
Avatar billede exp Juniormester
08. juni 2004 - 10:25 #13
Men hvorfor validere det på serveren, istedet for på klienten?
Avatar billede jaw Nybegynder
08. juni 2004 - 10:27 #14
Tjah, altså jeg har også brugt et javascript i stil med dit Exp flere steder, og synes bestemt det er den mest optimale løsning... Man slipper også for det problem, at felterne bliver tømt, i stedet for at brugeren bare kan indtaste i de manglende felter...
Avatar billede nyst Nybegynder
08. juni 2004 - 10:47 #15
exp>>

denne giver

<?php
if(isset($_POST['vkg']) && isset($_POST['hcm'])) {
    $vkg = $_REQUEST["vkg"];
    $hcm = $_REQUEST["hcm"];
    $bmi = ceil(($vkg / ($hcm * $hcm)) * 10000);
    echo ("<b>$bmi</b>");
}
else {
  echo "Du skal udfylde begge felter";
}
?>

at 'du skal osv' står der når siden kaldes og ikke hvis man glemmer et felt.
Samtidig kommer den med Warning: Division by zero in hvis du kun udfylder et felt eller slet ingen - så den lukker altså ikke af for forkert beregning!!!

Du får lige hele koden for en sikkerheds skyld:

----------------------

<form class="formsoeg2" method="post" action="<?php echo $_SERVER['php_self']; ?>">
<table border="0" cellpadding="2" cellspacing="0">
<tr>
<td>Vægt</td>
<td><input name="vkg" type="text" size="1" maxlength="3"> kg<br></td>
</tr><tr>
<td>Højde</td>
<td><input name="hcm" type="text" size="1" maxlength="3"> cm<br></td>
</tr><tr>
<td><input type="submit" name="BMI" value="BMI"></td>
<td>
<?php
if(isset($_POST['vkg']) && isset($_POST['hcm'])) {
    $vkg = $_REQUEST["vkg"];
    $hcm = $_REQUEST["hcm"];
    $bmi = ceil(($vkg / ($hcm * $hcm)) * 10000);
    echo ("<b>$bmi</b>");
}
else {
  echo "Du skal udfylde begge felter";
}
?>
</td>
</tr></table>
</form>

-------------------------------------------
Avatar billede nyst Nybegynder
08. juni 2004 - 10:51 #16
glemte lige ()

echo ("Du skal udfylde begge felter");
Avatar billede exp Juniormester
08. juni 2004 - 10:56 #17
Du skal lave 2 check:

1. Er der trykket på [ BMI ]?
Er der - gå videre til 2
Er der ikke - foretag intet

2. Er $hcm = 0?
Er den - meld fejl
Er den ikke - beregn
Avatar billede nyst Nybegynder
08. juni 2004 - 11:16 #18
er det noget ligende dette du mener

<?php
if(isset($_POST['vkg']) && isset($_POST['hcm'])) {
    $vkg = $_REQUEST["vkg"];
    $hcm = $_REQUEST["hcm"];
    $bmi = ceil(($vkg / ($hcm * $hcm)) * 10000);
                   
      if(empty($_REQUEST['vkg']) || empty($_REQUEST['hcm']))
      {
                echo ("Du skal udfylde begge felter");
      }       

      if($hcm = 0)
      {
                echo ("");
      }       

}
else {
    $bmi = ($bmi);
        echo ("<b>$bmi</b>");
}
?>
Avatar billede exp Juniormester
08. juni 2004 - 11:27 #19
ikke helt...

Først skal du checke:

if(isset($_POST['BMI'])) {
  // if(isset($_POST['hcm']) && $_POST['hcm'] != 0) {
    // udfør beregning
    }
  } else {
    echo "Fejl";
  }
}

pseudo-kode...
Avatar billede nyst Nybegynder
08. juni 2004 - 11:42 #20
mener du ikke sådanne:

if(isset($_POST['BMI'])) {
        if(isset($_POST['vkg']) && $_POST['hcm'] != 0) {
    $vkg = $_REQUEST["vkg"];
    $hcm = $_REQUEST["hcm"];
    $bmi = ceil(($vkg / ($hcm * $hcm)) * 10000);
        echo ("<b>$bmi</b>");
    }
  } else {
    echo "Fejl";
  }

hvor if(isset($_POST['hcm']) && $_POST['hcm'] != 0) {

skal være if(isset($_POST['vkg']) && $_POST['hcm'] != 0) {

hvad mener du med pseudo-kode...?

ovennævnte giver stadig 'Fejl' ved kald af side ellers regner den som den skal.
Avatar billede nyst Nybegynder
08. juni 2004 - 12:15 #21
exp>>

hvis jeg bruger følgende kode, virker den, men den er jo ikke helt korrekt, idet else vises ved kald af side, nu ser man bare ikke noget!!!!

<?php
if(isset($_POST['BMI'])) {
        if(isset($_POST['vkg']) && $_POST['hcm'] != 0) {
    $vkg = $_REQUEST["vkg"];
    $hcm = $_REQUEST["hcm"];
    $bmi = ceil(($vkg / ($hcm * $hcm)) * 10000);
        echo ("<b>$bmi</b>");
    }
  }
else {
                echo (" ");
}
?>

Kan du genneskue det??? for så er vi færdige*S*
Avatar billede jaw Nybegynder
08. juni 2004 - 12:20 #22
Prøv:

<?php
if(isset($_POST['BMI'])) {
  if(isset($_POST['vkg']) && $_POST['hcm'] != 0) {
    $vkg = $_REQUEST["vkg"];
    $hcm = $_REQUEST["hcm"];
    $bmi = ceil(($vkg / ($hcm * $hcm)) * 10000);
        echo ("<b>$bmi</b>");
    }
else {
                echo ("Fejl!");
  }
}
?>
Avatar billede nyst Nybegynder
08. juni 2004 - 12:34 #23
jaw>>

tak det hjalp *S*
Avatar billede jaw Nybegynder
08. juni 2004 - 12:39 #24
det var da godt :) Den forrige løsning, ville jo give "fejl" i alle tilfælde, hvor $_POST['BMI'] ikke var sat... Altså, også første gang du åbner siden...
Avatar billede nyst Nybegynder
08. juni 2004 - 12:43 #25
jaw>>
ja, der burde bare være en slags nulstiller efter beregning, for hvis man vil opdatere siden efter en beregning kommer der en box frem med at siden ikke kan kan opdateres uden der sendes oplysninger igen - det er lidt irreterende*S*
Avatar billede jaw Nybegynder
08. juni 2004 - 12:45 #26
ja, det er klart... Den tror jeg ikke, du kan slippe for, uden du skal ud i nogen headers og andre sider...
Avatar billede exp Juniormester
08. juni 2004 - 12:48 #27
Den bedste måde at komme uden om det er ved at benytte sig af en udregn.php, hvori der så henvises til beregner.php

header('location:udregn.php');

Derved kommer du også HELT uden om problemet med fejlen at der ikke er indtastet noget når siden loades...
Avatar billede nyst Nybegynder
08. juni 2004 - 12:53 #28
ja, det må jeg så nok leve med så, idet koden er lavet for sig selv og includeres i siden hvor beregning så også finder sted - ellers skal der fremkomme en ny side og det duer ikke i dette tilfælde - eller har jeg misforsået noget?
Avatar billede exp Juniormester
08. juni 2004 - 13:25 #29
Brugeren behøver aldrig nogensinde at se en ekstra side...

<form class="formsoeg2" method="post" action="udregn.php">
<table border="0" cellpadding="2" cellspacing="0">
<tr>
<td>Vægt</td>
<td><input name="vkg" type="text" size="1" maxlength="3"> kg<br></td>
</tr><tr>
<td>Højde</td>
<td><input name="hcm" type="text" size="1" maxlength="3"> cm<br></td>
</tr><tr>
<td><input type="submit" name="BMI" value="BMI"></td>
<td>

<?php
if(isset($_SESSION['bmi']) && $_SESSION['bmi'] != 0) {
  echo "<b>".$_SESSION['bmi']."</b>";
}
?>

</td>
</tr></table>
</form>


Udregn.php
----------------------------------------

<?php
session_start();

if(isset($_POST['BMI'])) {
  if(isset($_POST['vkg']) && $_POST['hcm'] != 0) {
    $vkg = $_REQUEST["vkg"];
    $hcm = $_REQUEST["hcm"];
    $bmi = ceil(($vkg / ($hcm * $hcm)) * 10000);
    $_SESSION['bmi'] = $bmi;
    header('location:'.$_SERVER['HTTP_REFERER']);
    exit;
  } else {
    $_SESSION['bmi'] = "Fejl!";
    header('location:'.$_SERVER['HTTP_REFERER']);
  }
}
?>
Avatar billede nyst Nybegynder
09. juni 2004 - 09:48 #30
exp>>
Det er jo en fed løsning, som kan bruges til meget, men jeg kan bare ikke få den til at virke. Når jeg trykker på knap BMI kommer der intet retur - kan du se om der er indsneget sig en fejl???

------------------------------------

bmi_beregn.php

<html><head>
<title>beregning</title>
<link rel="stylesheet" href="../css/hamlet.css" type="text/css">
</head><body>
<b>BMI beregning</b>
<form class="formsoeg2" method="post" action="bmi_udregn.php">
<table border="0" cellpadding="2" cellspacing="0">
<tr>
<td>Vægt</td>
<td><input name="vkg" type="text" size="1" maxlength="3"> kg<br></td>
</tr><tr>
<td>Højde</td>
<td><input name="hcm" type="text" size="1" maxlength="3"> cm<br></td>
</tr><tr>
<td><input type="submit" name="BMI" value="BMI" style="font-size : 9px;"></td>
<td>
<?php
if(isset($_SESSION['bmi']) && $_SESSION['bmi'] != 0) {
  echo "<b>".$_SESSION['bmi']."</b>";
}
?>
</td>
</tr></table>
</form>   
</body></html>

---------------

bmi_udregn.php

<?php
session_start();

if(isset($_POST['BMI'])) {
  if(isset($_POST['vkg']) && $_POST['hcm'] != 0) {
    $vkg = $_REQUEST["vkg"];
    $hcm = $_REQUEST["hcm"];
    $bmi = ceil(($vkg / ($hcm * $hcm)) * 10000);
    $_SESSION['bmi'] = $bmi;
    header('location:'.$_SERVER['HTTP_REFERER']);
    exit;
  } else {
    $_SESSION['bmi'] = "Fejl!";
    header('location:'.$_SERVER['HTTP_REFERER']);
  }
}
?>

-----------------------------
Avatar billede jaw Nybegynder
09. juni 2004 - 09:51 #31
Så vidt jeg lige kan se, mangler du session_start(); i din bmi_beregn.php
Avatar billede nyst Nybegynder
09. juni 2004 - 10:02 #32
nej den giver bare:

Cannot send session cache limiter - headers already sent
Avatar billede jaw Nybegynder
09. juni 2004 - 10:06 #33
og du sætter den aller først i filen? Før <html><head> og hvad der ellers er...
Avatar billede nyst Nybegynder
09. juni 2004 - 10:13 #34
<?php session_start();  ?> i top det hjalp, men den udskriver ikke mere "Fejl!"

trykker man bare på BMI knappen kommer der ikke fejl eller hvis felt ikke udfyldt, mon der skal være ( ) om fejl!
Avatar billede jaw Nybegynder
09. juni 2004 - 10:16 #35
men den returnerer udregningen korrekt?
Avatar billede nyst Nybegynder
09. juni 2004 - 10:34 #36
ja
Avatar billede nyst Nybegynder
10. juni 2004 - 10:14 #37
Hej igen, for at lære æidt kan I så fortælle mig, hvorfor man med session godt kan regne med komma, hvor den anden løsning ikke kunne , men kun med punktum???
Avatar billede nyst Nybegynder
10. juni 2004 - 10:35 #38
hvis jeg gerne vil have

$bmi = ceil(($vkg / ($hcm * $hcm)) * 10000);

med en decimal, så skal jeg vel bruge round, men hvor skriver man decimalen

$bmi = round(($vkg / ($hcm * $hcm)) * 10000);
Avatar billede nyst Nybegynder
10. juni 2004 - 10:38 #39
burde denne ikke virke?

$bmi = round((($vkg / ($hcm * $hcm)) * 10000), 1);
Avatar billede nyst Nybegynder
10. juni 2004 - 10:47 #40
fandt ud af det, den virker hvis jeg gør sådanne:

$vkg = str_replace(",",".",$vkg);       
$bmi = round((($vkg / ($hcm * $hcm)) * 10000), 1);
Avatar billede nyst Nybegynder
10. juni 2004 - 10:48 #41
men hvorfor vil den ikke udskrive dette udsagn

else {
    $_SESSION['bmi'] = "Fejl!";
    header('location:'.$_SERVER['HTTP_REFERER']);
  }

den retunerer slet ikke Fejl! på noget tidspunkt????
Avatar billede jaw Nybegynder
10. juni 2004 - 11:54 #42
hvad hvis du fjerner headeren midlertidigt, og indsætter en echo, får du så "Fejl!" udskrevet?
Avatar billede nyst Nybegynder
10. juni 2004 - 12:16 #43
hvis jeg ændre til:

else {
    $_SESSION['bmi'] = ("Fejl!");
    echo "fejl her";
  }

skriver den fejl her, hvis der ikke er indtastet noget i begge felter og hvis der mangler i hcm, men ikke hvis der mangler i vkg.

Fejlen skrives heller ikke på samme side men på en ny.

:-)
Avatar billede jaw Nybegynder
10. juni 2004 - 12:20 #44
Forstår jeg ikke helt :/
Avatar billede nyst Nybegynder
10. juni 2004 - 12:22 #45
hvilken header mente du da
Avatar billede jaw Nybegynder
10. juni 2004 - 12:23 #46
jeg mente den du piller ved...
Den her linie:  if(isset($_POST['vkg']) && $_POST['hcm'] != 0) {
prøv at ændre den til  if($_POST['vkg'] != 0 && $_POST['hcm'] != 0) {
Avatar billede nyst Nybegynder
10. juni 2004 - 12:31 #47
hvis jeg ændre til
if($_POST['vkg'] != 0 && $_POST['hcm'] != 0) {
giver det samme resultat, ingen 'fejl' med

else {
    $_SESSION['bmi'] = ("Fejl!");
    header('location:'.$_SERVER['HTTP_REFERER']);
  }

og 'fejl her' på blank side ved

else {
    $_SESSION['bmi'] = ("Fejl!");
    echo "fejl her";
  }
Avatar billede jaw Nybegynder
10. juni 2004 - 12:35 #48
Fejlen ligger hvor du echoer den på din bmi_beregn.php
if(isset($_SESSION['bmi']) && $_SESSION['bmi'] != 0) { -> ændre til:
if(isset($_SESSION['bmi']) && $_SESSION['bmi'] != "0") {
Avatar billede nyst Nybegynder
10. juni 2004 - 12:44 #49
ja nu kommer 'fejl!'

men desværre også når man kalder siden bmi_beregn.php, ellers virker alt ok
Avatar billede jaw Nybegynder
10. juni 2004 - 12:47 #50
Prøv at lukke din(e) browsere og åbne dem igen og prøv igen... Skyldes det ikke bare, at du allerede har "Fejl" stående i din session?
Avatar billede nyst Nybegynder
10. juni 2004 - 12:47 #51
hvad er mest korrekt at bruge

if(isset($_POST['vkg']) && $_POST['hcm'] != 0) {
eller
if($_POST['vkg'] != 0 && $_POST['hcm'] != 0) {

det ser ud til at give samme resultat!!!
Avatar billede jaw Nybegynder
10. juni 2004 - 12:49 #52
Den første vil jeg nok mene er den bedste...
Avatar billede jaw Nybegynder
10. juni 2004 - 12:49 #53
Det andet var bare lidt for at prøve, hvor fejlen lå... Ikke altid, jeg man lige kan gennemskue det i første gæt :(
Avatar billede nyst Nybegynder
10. juni 2004 - 12:52 #54
jeg havde ellers tømt midlertidige filer hver gang men ikke lukket browser og så virker det skisme.

Tak for din ihærdige hjælp - hvordan kan jeg nu give jer begge point?
Avatar billede jaw Nybegynder
10. juni 2004 - 12:53 #55
Hehe, no problemo... Hvis du får et svar fra os begge, kan du bare acceptere os begge, så burde vi dele pointene...
Avatar billede exp Juniormester
10. juni 2004 - 12:54 #56
Avatar billede jaw Nybegynder
10. juni 2004 - 12:55 #57
Nå, så du lurer alligevel, Exp?! :)
Avatar billede nyst Nybegynder
10. juni 2004 - 12:55 #58
ja sikken en*G*
Avatar billede nyst Nybegynder
10. juni 2004 - 12:56 #59
nu har jeg givet jer 60 hver 2 gange men den slutter ikke, så jeg må nok bare prøve at dele

Vil i have karma
Avatar billede jaw Nybegynder
10. juni 2004 - 12:58 #60
hehe, det der karma har jeg vist ikke så meget af - men det ser jo meget pænt ud :D Og tak for point...
Avatar billede nyst Nybegynder
10. juni 2004 - 13:00 #61
jaw>> så har du også fået karma, tak endnu engang til jer begge
Avatar billede jaw Nybegynder
10. juni 2004 - 13:01 #62
Wow, tak - og selv tak :)
Avatar billede nyst Nybegynder
10. juni 2004 - 13:04 #63
det var bestemt så lidt, men tænk at sådan et lille regnestykke kan volde så mange problemer, godt det ikke er et stort matematisk regnestykke jeg ville lave*S*
Avatar billede jaw Nybegynder
10. juni 2004 - 13:12 #64
Heh, tjah... Sidder på skolen og laver projekt, så havde ikke lige til at bygge det op for at teste det og selv kunne bytte rundt... Ellers havde det (måske!) nok være lidt nemmere...
Avatar billede exp Juniormester
10. juni 2004 - 13:14 #65
jaw >>
Sidder på arbejde, så kan ikke så godt yde 100%, vel ;-)
Avatar billede jaw Nybegynder
10. juni 2004 - 13:17 #66
exp - hehe, det var også kun ment som en joke, at du lige smed en lille diskret kommentar midt i det hele :) Og man skal jo passe på med at overanstrenge sig, FØJ!
Avatar billede exp Juniormester
10. juni 2004 - 13:19 #67
:-)
Avatar billede nyst Nybegynder
11. juni 2004 - 10:33 #68
hej igen exp og jaw,

jeg ville gerne udbygge den lidt mere, (vise et svar alt efter det udregnede tal)
så hvis I er på tænkte jeg at oprette et nyt ? med flere point
og så vise linket her.

Gider I... :-)
Avatar billede jaw Nybegynder
11. juni 2004 - 10:35 #69
Jeg er her :)
Avatar billede exp Juniormester
11. juni 2004 - 10:37 #70
Du opretter bare et nyt, så skal vi nok finde det :-)

Bare husk, at det er tilladt for alle at svare...
Avatar billede nyst Nybegynder
11. juni 2004 - 10:41 #71
ok jeg opretter og vender tilbage :-)
Avatar billede nyst Nybegynder
11. juni 2004 - 10:48 #72
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