1

プログラムを操作しているときに、不明なエラーが発生しました。何が起こるかというと、私のコードは2つの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 ステートメントをバイパスするのではなく、単にエラー変数を上書きしていると思います。何も入力しない場合でコードを実行してみましょう。

strlen($ao) が 1 未満になるため、最初の if ステートメント内のコードが実行されます。$_SESSION['error'] は「値を入力してください!」になります。

strlen($ao) が明らかに 20 を超えていないため、2 番目の if ステートメントのコードは実行されません。

空の文字列は数値ではないため、3 番目の if ステートメントのコードが実行されます。$_SESSION['error'] を上書きしているので、変数は単に「値が数値ではありません!」になります。したがって、最初の if ステートメントがバイパスされます。

上書きするのではなく、エラー文字列を連結してみてください。

編集:私が答える直前にMolle博士によって投稿されたコードスニペットを使用して.

于 2012-07-27T00:34:54.697 に答える
0

あなたが使用する必要があります

if(isset($_POST)) {

$_POST配列のように動作するため、使用しているものではなく、2行目。

于 2012-07-27T00:11:40.453 に答える