1

単純化しようとしているphpページがあり、単独では解決できないいくつかの問題が発生しています。私のフォームはユーザーデータを取得し、それ自体に投稿し、フィールドが入力されていることを検証してから、フォームの内容/投稿をmysqlデータベースに表示します。

私が抱えている問題は、20個のif()/ elseifステートメントではなく、変数名を配列にロードし、その配列をループして、変数がフォームに入力されていない場合にエラーメッセージを生成することです。 。残念ながら、私のコードでは、フィールドに値が含まれているかどうかに関係なく、エラーメッセージが表示されます。

追加のメモとして、$ ShippingCoをフォームに追加してエコーすることはできますが、完了していないという通知は引き続き表示されます。

また、スクリプトがifステートメントを入力した場合、終了後にページの残りの部分の実行を停止したいので、終了しようとしました。成功せずに。

これが私が持っているものです:

<?php

$ShippingCo = $_POST['ShippingCo'];
$ShipAcct = $_POST['ShipAcct'];
$ShipService = $_POST['ShipService'];
$FOB = $_POST['FOB'];
$Terms = $_POST['Terms'];

$ENote[] = '$Terms';
$ENote[] = '$FOB';
$ENote[] = '$ShippingCo';
$ENote[] = '$ShipAcct';
$ENote[] = '$ShipService';

$Emessg[] = 'Shipping Terms';
$Emessg[] = 'FOB Method';
$Emessg[] = 'Shipping Company';
$Emessg[] = 'Shipping Account';
$Emessg[] = 'Shipping Service Type';


foreach ($ENote as $a => $b) {

if(!$$ENote[$a]){       //I intentionally put the '$$' in this line otherwise none of the messages show. . . with data in the variables or not.

$error = "Error!  Please Add the $Emessg[$a]!";
?>
<table width="800" align="center">
<tr>
<td align="center">

<h2>Sales Order Entry Form</h2>
</td>
</tr>
<tr>
<td align="center">
<h3>
<font color="red">
<?php
echo "$error";
?>
</font>
</h3>
</td>
</tr>
<tr>
<td align="center">
Please press back to properly complete the form</td>
</tr>
</table>

<?php
}
}
?>

前もって感謝します。

4

3 に答える 3

1

構文はおそらく代わりに$$ENote[$a]解釈されているのではないかと思います(括弧は正当な構文ではなく、デモ用です)。($$ENote)[$a]$($ENote[$a])

したがって、中間変数、または複雑な構文をお勧めします。

foreach ($ENote as $a => $b) {
  $varname = $ENote[$a];
  if(!$$varname){

または(テストされていません、それが機能するかもしれないという単なる予感):

foreach ($ENote as $a => $b) {
  if(!${$ENote[$a]}){
于 2012-07-13T23:43:13.737 に答える
0

ここではいくつかの問題があります。

まず、各$ENoteエントリは先頭のを省略する必要があり$ます。変数変数にはパーツを含めることはできません$

$ENote[] = 'Terms';
$ENote[] = 'FOB';
...

次に、ctraheyが言ったように、別の変数で展開するには、変数名を変数に格納する必要があります$

コードクリーンアップのヒントは次のとおりです。

  • 2つのアレイを1つ(マップ)に結合します。
  • $_POSTループ内から名前付き変数に割り当てます。
  • breakループを終了するために使用します。

これにより、冗長性の多くが削除されます。

$ENote = array(
    'Terms' => 'Shipping Terms',
    'FOB' => 'FOB Method',
    ...
);

foreach ($ENote as $field => $title) {
    $value = $$field = $_POST[$field];
    if (!$value) {
        ... display error using $title ...
        break;  // exit loop
    }
}
于 2012-07-14T00:13:25.133 に答える
0

配列またはすべてのフィールドを作成し、その配列を関数に渡して、その関数で各項目をループし、空の場合はエラーをスローしてみませんか?

このようなもの:

function checkEmpty($some_array) {
    foreach($some_array as $key=>$value) {
      if($value=="") {
         or if(empty($key)) {   ///throw error }
         //put error message and exit

       }

    }
  }
于 2012-07-13T23:45:44.593 に答える