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?
Annonceindlæg fra Computerworld
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"); } ?>
Og så husk lige at give din submit knap et navn :) <input type="submit" name="Beregn" value="Beregn">
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*
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??
ved ikke lige om du kan lave det du forestpørger, men du kan jo udskifte , med .
$hcm = str_replace(",",".",$hcm);
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?
<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...
08. juni 2004 - 10:13
#10
jaw>> jeg er kun ude efter php-løsninger, sorry
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"; }
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"; }
exp
Juniormester
08. juni 2004 - 10:25
#13
Men hvorfor validere det på serveren, istedet for på klienten?
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...
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> -------------------------------------------
08. juni 2004 - 10:51
#16
glemte lige () echo ("Du skal udfylde begge felter");
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
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>"); } ?>
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...
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.
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*
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!"); } } ?>
08. juni 2004 - 12:34
#23
jaw>> tak det hjalp *S*
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...
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*
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...
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...
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?
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']); } } ?>
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']); } } ?> -----------------------------
09. juni 2004 - 09:51
#31
Så vidt jeg lige kan se, mangler du session_start(); i din bmi_beregn.php
09. juni 2004 - 10:02
#32
nej den giver bare: Cannot send session cache limiter - headers already sent
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...
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!
09. juni 2004 - 10:16
#35
men den returnerer udregningen korrekt?
09. juni 2004 - 10:34
#36
ja
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???
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);
10. juni 2004 - 10:38
#39
burde denne ikke virke? $bmi = round((($vkg / ($hcm * $hcm)) * 10000), 1);
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);
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????
10. juni 2004 - 11:54
#42
hvad hvis du fjerner headeren midlertidigt, og indsætter en echo, får du så "Fejl!" udskrevet?
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. :-)
10. juni 2004 - 12:20
#44
Forstår jeg ikke helt :/
10. juni 2004 - 12:22
#45
hvilken header mente du da
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) {
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"; }
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") {
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
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?
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!!!
10. juni 2004 - 12:49
#52
Den første vil jeg nok mene er den bedste...
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 :(
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?
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...
exp
Juniormester
10. juni 2004 - 12:54
#56
10. juni 2004 - 12:55
#57
Nå, så du lurer alligevel, Exp?! :)
10. juni 2004 - 12:55
#58
ja sikken en*G*
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
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...
10. juni 2004 - 13:00
#61
jaw>> så har du også fået karma, tak endnu engang til jer begge
10. juni 2004 - 13:01
#62
Wow, tak - og selv tak :)
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*
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...
exp
Juniormester
10. juni 2004 - 13:14
#65
jaw >> Sidder på arbejde, så kan ikke så godt yde 100%, vel ;-)
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!
exp
Juniormester
10. juni 2004 - 13:19
#67
:-)
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... :-)
11. juni 2004 - 10:35
#69
Jeg er her :)
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...
11. juni 2004 - 10:41
#71
ok jeg opretter og vender tilbage :-)
11. juni 2004 - 10:48
#72
Vi tilbyder markedets bedste kurser inden for webudvikling