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


PHP, If/Else statement shows condition even if I have not provided inputs yet

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

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

检查表单是否已提交:

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

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

因为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']);

您正在对照字符串进行检查,请将其作为数字进行检查

 if ($one<10) {
 }

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

if(isset($_POST['numberone'])
{
 ...
}
<?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!";
}
?>

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

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

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

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

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

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