1

当我使用我的程序时,我遇到了一个未知错误。发生的事情是我的代码绕过了两个if语句。这是我的代码:

<?
session_start();
if ($_POST){
  $ao = trim($_POST['amountof']);
  $continue = true;
  if (strlen($ao) < 1){  ####First If-Statement Bypassed####
    $continue = false;
    $_SESSION['error'] = "Please enter in a value!";
  }
  if (strlen($ao) > 20){  ####Second If-Statement Bypassed####
    $continue = false;
    $_SESSION['error'] = "Your value has exceeded 20!";
  }
  if (!is_numeric($ao)){
    $continue = false;
    $_SESSION['error'] = "Value is not numeric!";
  }
}

?>
<form method="post">
<?
if (isset($_SESSION['error'])){
  print "<span style=\"color: red; font-weight: bold;\">" . $_SESSION['error'] . "                </span><br />";
}
?>
How many letters are you planning to process?<br />
<span style="font-size:.8em; color: grey;">You may not exceed 20</span><br />
<input type="text" name="amountof" style="width:25px;" maxlength="2"/>
<input type="submit" value="Continue" />
</form>

<? unset($_SESSION['error']); ?>

被绕过的 if 语句在代码中被标记。谢谢!

4

3 回答 3

1

试试看:

<?php

 session_start();
 $_SESSION['error']='';

  if (isset($_POST['amountof'])){
  $ao = trim($_POST['amountof']);
  $continue = true;
  if (strlen($ao) < 1){ 
    $continue = false;
    $_SESSION['error'].= "Please enter in a value!<br/>";
  }

  if (!is_numeric($ao)){
    $continue = false;
    $_SESSION['error'].= "Value is not numeric!<br/>";
  }
  elseif ($ao > 20){ 
    $continue = false;
    $_SESSION['error'].= "Your value has exceeded 20!";
  }
}
?>
<form method="post">
<?php
 if (!empty($_SESSION['error'])){

 //......

或简化(请注意,用户可以键入负值或 0 当前将通过测试的值)

if (!is_numeric($ao) || $ao<1 || $ao>20){
        $continue = false;
        $_SESSION['error']= "Please enter in a numeric value between 1 and 20";
      }
于 2012-07-27T00:33:15.040 回答
1

在没有看到一些示例数据的情况下,我相信您只是在覆盖错误变量,而不是绕过 if 语句。让我们以没有输入任何内容的情况来运行代码。

第一个 if 语句中的代码运行,因为 strlen($ao) 将小于一个。$_SESSION['error'] 将是“请输入一个值!”

现在第二个 if 语句中的代码没有运行,因为 strlen($ao) 显然没有超过 20。

第三个 if 语句中的代码运行,因为空字符串不是数字。由于您正在覆盖 $_SESSION['error'],因此变量将只是“值不是数字!”。因此它会出现第一个 if 语句被绕过。

尝试连接错误字符串而不是覆盖。

编辑:通过使用 Molle 博士在我回答之前发布的代码片段。

于 2012-07-27T00:34:54.697 回答
0

你需要使用

if(isset($_POST)) {

在第二行,而不是你正在使用的,因为$_POST它的行为就像一个数组。

于 2012-07-27T00:11:40.453 回答