2011-04-10 56 views
1

我是新来的PHP的世界,并放在一起的表格,乘以一个输入的值。但是,当我尝试验证某人是否未输入任何值来返回错误消息时,它会显示该消息。我的代码如下。感谢您能否提出改进建议。这是为什么!isset似乎不起作用?

<?php 

$counter = 0; 

if(isset($_POST["submit"])) { 
    $start = $_POST["start"]; 
    $end = $_POST["end"]; 
    $multiply = $_POST["multiplication"]; 

// if($_POST["start"] == "" && $_POST["end"] == "" && $_POST["multiplication"] == "") { 
    // print "Please enter some values"; 
// } 

if(!isset($_POST["start"], $_POST["end"], $_POST["multiplication"])) { 
    print "Please enter some values"; 

} 

// for($start;$start<$end;$start++) { 
    // $counter = $counter +1; 
    // $multiplication = $counter * $multiply; 
    // print "$counter <br />"; 
    // print "$counter multiplied by $multiply = $multiplication <br />"; 

// } 

} 

?> 
<html> 
<head> 
    <title>Sample Multiplication</title> 
</head> 
<body> 
    <form name="multiply" method="post" action="multiplication_sample.php"> 
     <input type="text" name="start" value="<?php if(isset($_POST["start"])) { print $start; } ?>"> 
     <input type="text" name="end" value="<?php if(isset($_POST["end"])) { print $end; } ?>"> 
     <input type="text" name="multiplication" value="<?php if(isset($_POST["multiplication"])) { print $multiply; } ?>"> 
     <input type="submit" name="submit" value="submit"> 
    </form> 

<?php 

if(isset($_POST["submit"])) { 

for($start;$start<$end;$start++) { 
    $counter = $counter + 1; 
    $multiplication = $counter * $multiply; 
    print "$counter multiplied by $multiply = $multiplication <br />"; 
} 

} 

?> 
</body> 
</html> 
+0

如果用户没有为每个表单域指定任何值,我希望表单显示消息。 – PeanutsMonkey 2011-04-10 22:16:59

回答

7

我认为isset将确保一个变量不是NULL,然而,“空”是不一样的空。如果你提交一个空白值的表单,变量仍然被设置,它只是空的。

+0

那么下面的代码验证空表单字段的唯一方法? if($ _ POST [“start”] ==“”&& $ _POST [“end”] ==“”&& $ _POST [“multiplication”] ==“”){ print“请输入一些值”; } 那么,何时表单字段的值为NULL? 它只是复选框和单选按钮具有NULL值吗? – PeanutsMonkey 2011-04-10 22:10:03

+0

我相信复选框不会发送一个值,除非选中。单选按钮本质上应该总是有价值的。 – 2011-04-10 22:20:16

+0

因此,如果我不选择一个单选按钮,它仍然会发送一个值? – PeanutsMonkey 2011-04-10 22:22:48

2

当表单被提交时,输入字段的内容被发送到服务器。

如果这些输入字段为空,那么服务器为每个输入获取一个空字符串 - 但它会得到某些内容;因此,$_POST["start"], $_POST["end"], $_POST["multiplication"]项目已设置 - 即使它们仅包含空字符串。

你可以检查:

  • 如果字段包含一个空字符串:if ($_POST["start"] === '')
  • 或者,如果如果只包含空格:if (trim($_POST["start"]) === '')
  • 或者,如果他们是emptyif (empty($_POST["start"]))
+0

好的。我不明白一个空字符串,当一个项目没有设置,我认为是NULL的区别。 – PeanutsMonkey 2011-04-10 22:13:35

+0

空字符串表示一些信息:它是一个空字符串*(在某些情况下,它可能是有效的输入)* ;;;没有设置的变量意味着根本没有信息。 – 2011-04-10 22:28:31

+0

对不起,但我没有关注。你能给我一个空值的例子,一个NULL值,一个变量和一个未设置的变量? – PeanutsMonkey 2011-04-10 22:32:20

0

如果未定义字段,则您的代码将在<html> ta之前的html中打印您的消息g出现。大多数浏览器不会显示或显示在意想不到的地方。

您应该将消息显示移动到用户可以看到它的html的某处。

和其他人士指出,除了在页面中的字段将有一个空值的第一个呼叫,但仍然存在(等isset将返回TRUE

0

我希望,我理解你的权利。它是

if(!isset($_POST["start"], $_POST["end"], $_POST["multiplication"])) { 
    print "Please enter some values"; 
} 

这不正常?看起来,你认为一个空字符串意味着什么都没有设置,什么是不正确的。

$x = ""; 
isset($x); // true 

改为使用empty()或仅使用$_POST['start'] == ''

+0

谢谢。我不明白NULL和empty之间的区别是什么。你能详细说明吗? – PeanutsMonkey 2011-04-10 22:11:19

+0

@ user700543:'null'是一个特殊的值,这意味着像“无”。它是特殊类型'null'的唯一值。函数'empty()'测试 - 顾名思义 - 如果一个变量的值是空的,例如它的空字符串或数组。 'isset()'测试,如果变量被设置为全部,并且它不是'null'。表单字段(只要它们存在)总是字符串,所以你不能用'isset()' – KingCrunch 2011-04-10 22:16:54

+0

测试他们的内容。对不起,如果我不太关注。函数empty()测试变量是否为空,即用户没有指定任何值,但函数isset()测试该值是否设置,以及是否为空。你是什​​么意思,如果它不是null?什么可以为空? – PeanutsMonkey 2011-04-10 22:21:14