PHP,如果/ Else语句显示条件,即使我还没有提供输入

时间:2013-05-14 09:16:18

标签: php if-statement

我有这个表格我应该输入一个数字但是当我运行代码时它已经显示了第一个条件的事件,即使我还没有输入数字。

<form action="" method="post">
<table>
<tr>
<td>First number:</td><td><input type="text" name="numberone"></td>
<tr>
<tr>
<td><input type="submit" value="Submit" /></td>
</tr>
</table>
</form>

<?php
@$one = $_POST['numberone'];
@$two = $_POST['numbertwo'];


if ($one<"10")
{
echo "Have a good morning!";
}
else if ($one<"20")
{
echo "Have a good day!";
}

?>

7 个答案:

答案 0 :(得分:2)

检查表单是否已提交:

if(isset($_POST['numberone']) && isset($_POST['numbertwo'])){

    $one = (int)$_POST['numberone'];
    $two = (int)$_POST['numbertwo'];

    if($one < 10){
      echo "Have a good morning!";

    }elseif($one < 20){
      echo "Have a good day!";
    }

}

请勿使用@来抑制错误,因为您不会看到通知,在这种情况下会帮助您发现问题:)

答案 1 :(得分:1)

因为nothing小于10.将条件更改为

if ($one<10 && $one>0)
{
echo "Have a good morning!";
}
else if ($one<20 && $one>=10)
{
 echo "Have a good day!";
}

另外,这个

@$one = $_POST['numberone'];
@$two = $_POST['numbertwo'];

应该是

$one = intval($_POST['numberone']);
$two = intval($_POST['numbertwo']);

答案 2 :(得分:1)

您正在检查字符串,将其检查为数字

 if ($one<10) {
 }

答案 3 :(得分:1)

请勿使用@来阻止错误,您需要检查表单是否已提交。

if(isset($_POST['numberone'])
{
 ...
}

答案 4 :(得分:1)

<?php
$one = isset($_POST['numberone']) ? (int)$_POST['numberone'] : 0;
$two = isset($_POST['numbertwo']) ? (int)$_POST['numbertwo'] : 0;


if ($one > 0 && $one < 10)
{
   echo "Have a good morning!";
}
else if ($one > 0 && $one < 20)
{
   echo "Have a good day!";
}

?>

以正确的方式执行此操作,请勿使用@符号隐藏错误

答案 5 :(得分:1)

这是因为此代码在加载页面时立即运行。加载时,$ one变量的值为0,因此第一个条件为真。我建议您使用javascript并在单击按钮时使用onClick()脚本向用户显示基于字段值的响应,或者您需要用

包围if / else语句
if(isset($_POST['numberone'])){
    $one = $_POST['numberone];
    if ($one < 10){
        etc
    }
}

这会检查该值是否实际设置为输入字段中的值,以确保它不会过早执行。

此外,与文字数字的比较不需要用引号括起来, 只需$ 1&lt; 10是对的。

答案 6 :(得分:1)

首先检查变量是否使用isset函数设置:http://php.net/manual/fr/function.isset.php