我有一个表单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