如果没有php不显示消息

时间:2014-06-03 11:23:19

标签: php

test.php的

<?php


echo '<form method="post" action="test2.php">

Age: <input type="text" name="age">

<input type="submit" value="Submit">
<input type="reset" value="Reset">

</form>'



?>

test2.php

<?php


$age = $_POST["age"];

if ($age == null) {
    echo "Please enter your age.";
} else if ($age >= 18) {
    echo "You're at a legal age.";
} else if ($age < 18) {
    echo "You're a minor.";
}else {
    echo "Error";
}


?>

为什么当我在输入中输入字母时,它会显示&#34;您是未成年人。&#34;而不是消息&#34;错误&#34;?我的代码有什么问题?

10 个答案:

答案 0 :(得分:1)

当PHP尝试将字符串与数字进行比较时,无法转换为数字的字符串的数值为0

请参阅http://php.net/manual/en/language.types.string.php#language.types.string.conversion

一个简单的解决方案是在第一个条件下失败,如果它不是数字,就像这样:

if ($age == null || !is_numeric($age)) {
    echo "Please enter your age.";
} else if ($age >= 18) {
    echo "You're at a legal age.";
} else if ($age < 18) {
    echo "You're a minor.";
}else {
    echo "Error";
}

is_numeric()之外,您还可以使用is_int()仅允许整数。


如果我是你,我会让人们进入他们的生日,这可以放到DateTime课程中,并且从那里开始处理得更容易。

答案 1 :(得分:0)

来自manual

  

如果您将数字与字符串进行比较或比较涉及   数字字符串,然后每个字符串转换为一个数字和   比较用数字表示。

如果输入是字符串,则会转换为数字:

var_dump((int) 'A'); // Result: 0

并且0小于18,这就是显示You're a minor.的原因。您需要验证输入:

if(!is_numeric($_POST["age"])) {
  // Raise error.
}

答案 2 :(得分:0)

   $age = $_POST["age"];

   if(is_int($age)) 
   {
      if ($age >= 18) 
      {
         echo "You're at a legal age.";
      } 
      if ($age < 18) 
      {
         echo "You're a minor.";
      } 
   }
   else 
   {
       echo "Please enter an integer."; 
   }

您没有检查从用户那里获得的变量的类型!小心一点,因为他可以发送非通缉的东西,这就是为什么你必须检查他的输入。 请记住,这项检查仍然远非完美,但它应该完成你等待它做的工作。

答案 3 :(得分:0)

如果您将数字与字符串进行比较,或者比较涉及数字字符串,则每个字符串都会转换为数字,并且数字执行比较

http://www.php.net/manual/en/language.operators.comparison.php

答案 4 :(得分:0)

当你发送空的POST数据时,你有$ _POST [“age”] ='',而不是'null'。 所以你应该像

一样
if ($age == ''){...

或     if($ age){...

答案 5 :(得分:0)

试试这个:

$age = $_POST["age"];

if(is_numeric($age)) {

 if ($age >= 18) {
     echo "You're at a legal age.";
 } else if ($age < 18) {
    echo "You're a minor.";
 }else {
    echo "Error";
 }
}else {

   echo "Error";
}

答案 6 :(得分:0)

if (isset($_POST[""])) {
    $age = $_POST["age"];

    if ($age == '') {
        echo "Please enter your age.";
    } else if ($age >= 18) {
        echo "You're at a legal age.";
    } else if ($age < 18) {
        echo "You're a minor.";
    } else {
        echo "Error";
    }
} else {
    echo "Data not Posting";
}

答案 7 :(得分:0)

试试这个会对你有用

<?php
$age = $_POST["age"];

if(is_numeric($age)) 
{
 if ($age >= 18) 
 {
     echo "You're at a legal age.";
 } 
 else 
 {
    echo "You're a minor.";
 }
}
else {

   echo "Error";
}
?>

答案 8 :(得分:-1)

检查
$age = isset($_POST["age"]) ? $_POST['age'] : null;
$age = is_numeric($age) ? $age : null; 

答案 9 :(得分:-3)

因为年龄是整数,所以强制它为Integer

<?php

$age = intval($_POST["age"]);
// OR $age = (int) $_POST["age"];

if ($age == null) {
    echo "Please enter your age.";
} else if ($age >= 18) {
    echo "You're at a legal age.";
} else if ($age < 18) {
    echo "You're a minor.";
}else {
    echo "Error";
}


?>