0

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

<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!";
}

?>
4

7 回答 7

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!";
    }

}

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

于 2013-05-14T09:19:12.137 回答
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']);
于 2013-05-14T09:18:29.920 回答
1

你正在检查一个字符串检查它作为一个数字

 if ($one<10) {
 }
于 2013-05-14T09:18:32.973 回答
1

不要@用于抑制错误,您需要检查表单是否已提交。

if(isset($_POST['numberone'])
{
 ...
}
于 2013-05-14T09:18:56.740 回答
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!";
}

?>

以正确的方式做,不要用@符号隐藏错误

于 2013-05-14T09:19:03.747 回答
1

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

if(isset($_POST['numberone'])){
    $one = $_POST['numberone];
    if ($one < 10){
        etc
    }
}

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

此外,与文字数字的比较不需要用引号括起来,只需 $one < 10 是正确的。

于 2013-05-14T09:21:36.520 回答
1

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

于 2013-05-14T09:21:50.587 回答