1

基本的に、アイテム ページで何も選択されていない場合、エラーが表示されるか、ユーザーが別のページに戻されるという最後の検証を追加したいと考えています。

送信が選択されると、フォームアクションはそれを確認ページに送信し、以下が実行され、1 つ以上が入力されている場合に選択されたアイテムが表示されます if ($partno == $varname & $qty > 0) but I don't no what toエラーを返すか、ユーザーを前のページに戻すには、else 部分を挿入します。

<?php
            $visitor = $_POST['visitor'];
            echo "<p>" . 'Hello ' . "<b>" . $visitor . "</b>&nbsp;" . 'please confirm your purchase(s) below.' . "</p>";

            if (!($data = file('items.txt'))) {
                echo 'ERROR: Failed to open file! </body></html>';
                exit;
            }
            $total = 0;
            foreach ($_POST as $varname => $varvalue) {
                $qty = $varvalue;
                foreach ($data as $thedata) {
                    list($partno, $name, $description, $price, $image) = explode('|', $thedata);
                    if ($partno == $varname & $qty > 0) {
                        echo "<tr><td><img src='$image' width='50' height='50' alt='image'</td>
                        <td>$partno<input type='hidden' name='$partno' value=$partno></td><td>$name</td><td>&pound;$price</td>
                            <td>&nbsp;&nbsp;&nbsp;&nbsp;$qty</td><td><input type='hidden' name='visitor' value=$visitor></td>
                                <td><input type='hidden' name='qty' value=$qty></td></tr>";
                        $total = $total + $price * $qty;
                    } else {

                    }
                }
            }
            ?>
4

4 に答える 4

0

次のようなものがあります。

$errors = array();
foreach(...) {
   if ($partno == $varname & $qty > 0) {
      ... code for "ok" stuff
   } else {
      $errors[] = "$partno is incorrect";
   }
}
if (count($errors) > 0) {
    die("Errors: " . implode($errors));
}
... proceed to "success" code ...

基本的に、失敗したテストごとにメッセージを記録します。ループが終了すると、エラー メッセージがあれば、それらを表示して処理を中止します。エラーがなければ、残りのコードに進みます。

于 2013-03-28T21:58:23.073 に答える
0

try catch ブロックを使用しないのはなぜですか?

try {
    if (isset($_POST)) {

      if (!$email) {
          throw new Exception('email is not valid', 100);
      }

      // everything is good process the request
    }

    throw new Exception('Error!', 200);
} catch (Exception $e) {
    if ($e->getCode == 200) {
       // redirect
    } else {
       // do something else
    }
}
于 2013-03-28T22:00:26.590 に答える
0

If ステートメントで例外をスローし、データを try/catch ブロックに入れて、エラーが発生した場合に例外をキャッチします。

于 2013-03-28T22:00:38.637 に答える
0

次のアプローチを検討してください。フォームと、フォーム データを処理するための php コードの両方が同じページにあります。フォームが投稿された場​​合は、最初にフォームが問題ないかどうかを確認し、その後、送信されたデータで何かを行います。フォームが有効でない場合は、エラー メッセージを表示します。

利点は、コードの途中に die() がないこと、奇妙なリダイレクトがないこと、すべてが 1 つのスクリプトに含まれていることです。

// simplified code in example.php
<?php

// in this variable we'll save success/error messages to print it
$msg = "";

// run this php code if the form was submitted
if(isset($_POST['submit'])) {

  // is the form valid? 
  if (strlen($_POST['username']) == 0) {
        $msg = "Please enter a username";
  } 
  else {
        // all validation tests are passed, give the user a nice feedback
       // do something with the data, e.g. save it to the db
       $msg = "Your data was saved. Have a great day";
  }
}

?>

<div class="msg"><?php print $msg; ?></div>

<form method="post">
<input type="text" name="username">
<input type="submit" name="submit" value="Submit">
</form>
于 2013-03-28T22:13:24.657 に答える