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;?我的代码有什么问题?
答案 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";
}
?>