使用php if语句验证输入值是否介于0和100之间

N.A*_*Ali 3 php if-statement

我尝试了以下内容以确保输入值介于0和之间100但它不起作用.

  if (($_POST['rate']) >= '0' || =<'100') {
      $rate = $_POST['rate']
  }
  esle {
      echo '<p>Please enter a value between 0 and 100</p>';
  }
Run Code Online (Sandbox Code Playgroud)

dom*_*son 6

问题1:stringvsint

目前,您正在比较字符串,而不是数字.将$_POST变量转换为int并删除周围的撇号0100修复此问题:

$rate = (int) $_POST['rate'];
if ($rate >= 0 || =< 100) { /* ... */ }
Run Code Online (Sandbox Code Playgroud)

问题2:缺少某些东西

但是,由于缺少$rate第二次比较,这仍然不会产生预期的结果.将其更改为:

$rate = (int) $_POST['rate'];
if ($rate >= 0 || $rate =< 100) { /* ... */ }
Run Code Online (Sandbox Code Playgroud)

问题3:orvsand

而我们仍然不在那里.目前,您正在使用||().您需要使用&&()代替:

$rate = (int) $_POST['rate'];
if ($rate >= 0 && $rate =< 100) { /* ... */ }
Run Code Online (Sandbox Code Playgroud)

问题4:=<vs<=

还是不行.你的一个比较运算符是错误的方式.=<应该是<=:

$rate = (int) $_POST['rate'];
if ($rate >= 0 && $rate <= 100) { /* ... */ }
Run Code Online (Sandbox Code Playgroud)

问题5:用户输入

$_POST保存来自用户的数据.绝不信任用户数据.例如,如果没有rate元素,那该怎么办?在这种情况下,PHP将抛出一个类型的错误E_NOTICE(如果你没有设置报告,你甚至可能看不到E_ALL)并且一旦转换为int,评估为0!因此,您的测试将通过,这可能不是您想要的.为防止这种情况,请使用isset():

$rate = isset($_POST['rate']) ? (int) $_POST['rate'] : -1;
if ($rate >= 0 && $rate <= 100) { /* ... */ }
Run Code Online (Sandbox Code Playgroud)

问题6:东西esle

正如Pedro Lobito指出的那样,你设法引入了一个错字:esle应该是else.

问题7:分号

正如格特所指出的那样,你的线路最后$rate = $_POST['rate']都没有了;.

摘要

我并不是故意粗鲁,但是看到你设法挤进这么简单的错误if,我觉得你应该在这一点上参考一些基本的PHP教程而不是Stack Overflow.

  • 我会完整地回答你的答案. (2认同)