PHP为什么else-Statment在is_numeric函数之前无法正常工作

时间:2017-03-28 15:10:04

标签: php

只要我想知道bmi,那段代码就可以完成它的工作。但是它也应该检查公式是否填充了数字,如果不是这样的话,else语句应该启动。虽然它似乎开始它总是指出错误消息,如:

((这不是我链接到的另一个问题的重复。在那里它讨论了另一个关于新错误消息的话题,但这是关于我如何编写我的if-else语句以便检查数字拉动out else else。))

  

警告:遇到非数字值   第15行的C:\ xampp \ htdocs \ workspace \ 4.5 \ Aufgabe19.php

     

警告:遇到非数字值   第15行的C:\ xampp \ htdocs \ workspace \ 4.5 \ Aufgabe19.php

     

警告:遇到非数字值   第16行的C:\ xampp \ htdocs \ workspace \ 4.5 \ Aufgabe19.php

它不应该这样做。它应该说:bitte geben sie zahlen ein,如果公式充满其他东西。

        <?php
    // Variablen deklararien und Werte zuweisen.
    $gewicht = $_POST['gewicht'];
    $koerpergroesse = $_POST['koerpergroesse'];
$bmi = 0;
$dezimal = 0;

        $dezimal = ($koerpergroesse /100) * ($koerpergroesse / 100);
  $bmi = $gewicht / $dezimal;


if (is_numeric($gewicht) && is_numeric($koerpergroesse)) {
    if ($bmi < 18.5) {

     echo "Ihr BMI beträgt: " . round($bmi,2) . "<br>";
     echo "Sie haben Untergewicht.";
    }

  if ($bmi >= 18.5 && $bmi < 25) {

     echo "Ihr BMI beträgt: " . round($bmi,2) . "<br>";
     echo "Sie haben Normalgewicht.";
  }

  if ($bmi >= 25 && $bmi < 30) {

     echo "Ihr BMI beträgt: " . round($bmi,2) . "<br>";
     echo "Sie haben leichtes Übergewicht.";
  }

  if ($bmi >= 30 && $bmi < 40) {

     echo "Ihr BMI beträgt: " . round($bmi,2) . "<br>";
     echo "Sie haben starkes Übergewicht.";
  }

  if ($bmi >= 40) {

     echo "Ihr BMI beträgt: " . round($bmi,2) . "<br>";
     echo "Sie haben lebensbedrohliches Übergewicht.";
  }
}
else {

echo "Bitte geben sie Zahlen ein.";
}

  ?>

2 个答案:

答案 0 :(得分:0)

我无法清楚地看到你的问题。但我认为你想提醒用户输入值,它应该是数字.....而不是你所描述的错误显示的错误.... May在判断你的问题时我错了......

试试这样。

  $error = false; // this should be before checking if post submitted...

  if ( ((!isset( $gewicht)) || (empty( $gewicht)) )  && ( (!isset( $koerpergroesse )) || (empty( $koerpergroesse ))) ){
   $error=true;
   echo "Please fill up values";
   }

  if ( (!is_numeric($gewicht)) && (!is_numeric($koerpergroesse)) ){
    $error=true;
    echo "Value must be numeric";
   }

  if (!$error) {
     if ($bmi < 18.5) {.......

答案 1 :(得分:0)

在测试之前,您在计算中使用了非数字值,以查看它们是否为数字。 POST值包含无效字符串。然后你在计算中立即使用它们,之前你检查它们是否是数字:

$gewicht = $_POST['gewicht'];
$koerpergroesse = $_POST['koerpergroesse'];
$dezimal = ($koerpergroesse /100) * ($koerpergroesse / 100);
$bmi = $gewicht / $dezimal;
if (is_numeric($gewicht) && is_numeric($koerpergroesse)) {

您应该将计算放在if语句中:

$gewicht = $_POST['gewicht'];
$koerpergroesse = $_POST['koerpergroesse'];
if (is_numeric($gewicht) && is_numeric($koerpergroesse)) {
    $dezimal = ($koerpergroesse /100) * ($koerpergroesse / 100);
    $bmi = $gewicht / $dezimal;