-1

これは正直なところ、私がこれまでにコーディングした中で最も厄介で不適切な言語です。このプロジェクトがうまくいき、終わったら嬉しいです。

いずれにせよ、私はPHPを使用する必要があるので、ここに私の質問があります。

$form_dataという名前の配列があります。

$form_data = array 
('trav_emer_med_insur',
'trav_emer_single',
'trav_emer_single_date_go',
'trav_emer_single_date_ba',

'trav_emer_annual',
'trav_emer_annual_date_go',

'trav_emer_extend',
'trav_emer_extend_date_go',
'trav_emer_extend_date_ef',
'trav_emer_extend_date_ba',


'allinc_insur',

'allinc_insur_opt1',
'allinc_single_date_go',
'allinc_single_date_ba',

'allinc_insur_opt2',
'allinc_annual_date_go',
'allinc_annual_date_ba',



'cancel_insur',
'allinc_annual_date_go', 
'allinc_annual_date_ba',



'visitor_insur', 
'country_select',

'visitor_supervisa', 
'visitor_supervisa_date_go',
'visitor_supervisa_date_ba',

'visitor_student',
'visitor_student_date_go',
'visitor_student_date_ba',

'visitor_xpat',
'visitor_xpat_date_go',
'visitor_xpat_date_ba',

'txtApp1Name',
'txtApp2Name',
'txtApp1DOB',
'txtApp2DOB',
'txtApp1Add',
'txtApp1City',
'selprov',
'txtApp1Postal',
'txtApp1Phone',
'txtApp1Ext',
'txtApp1Email',
'conpref', );

これらは、HTMLフォームのname=""フィールドの名前です。var_dump($ _ POST)を使用して、すべての名前が存在し、デフォルト値が''であることを確認しました。

私がやりたいことは非常に単純で、参照として$form_dataを使用してこれを行います。

  • 逆流したフォームに表示するデータを処理できる$out_dataという新しい配列を作成します。

$ out_dataの構造は単純です。たとえば、キーは他の配列$ out_data [txtApp1Name]の要素の名前になり、そのキーの値が値になります。

  • ここで必要なのは、最初にすべてのname = ""が設定されているかどうかを確認して、エラーを排除し、データを検証することです。次に、設定されているかどうかに関係なく、$out_data配列にプレースホルダーを作成します。

  • したがって、$ _ POST [$ form_data [1]](名前は'trav_emer_single')が設定されていない場合、$out_dataに次のようなエントリを作成します$out_data([trav_emer_single] => "NO DATA")

  • $ _POST [$ form_data [1]](名前は'trav_emer_single')が設定されている場合、次のように$out_dataに作成して入力します。$out_data([trav_emer_single] => "ユーザーが入力したものは何でも")

私はこのコードを試しました:

$out_data = array();
$count = count($form_data); 
for( $i = 0; $i < $count; $i++ ) 
{
    if(!isset($_POST[$form_data[$i]])) {
        $out_data[$form_data[$i]] = "NO_DATA";
        }
    else {
        $out_data[$form_data[$i]] = $_POST[$form_data[$i]];
        }
}

現在、このコードは技術的に機能しており、配列を調べて値を割り当てていますが、正しく機能していません。

何も入力せずにフォームで送信を押しました。したがって、すべてのアイテムは、逆流した出力(ユーザーレビュー用)で「NO_DATA」と表示する必要がありますが、一部のアイテムのみがそれを表示しています。私が確認したすべてのアイテムにはname=""があり、配列と一致し、何も入力されていません。配列内のすべてのアイテムに「NO_DATA」が割り当てられていないのはなぜですか?

また、フォームに完全に入力すると、$out_dataが完全かつ正しく入力されます。!issetの問題は何ですか?$ _POST [$ form_data [$ i]] ==''を実行してみましたが、データがないすべてのインスタンスにno_dataが配置されますが、何かを書き込んだかどうかに関係なく、ページ上のすべてのアイテムに対して「未定義のインデックス」警告がスローされます。ボックスにあるかどうか。

本当に私はWTFが進行中であることを知りたいだけです。このプロジェクトの締め切りはすぐに終わり、PHPのすべてのステップで私は悲しみを覚えます。

私のコードを読んでわかる限り、コードは有効ですが、宣伝どおりに実行することを拒否します。

さらにコードサンプルが必要な場合は、お問い合わせください。

ここで本当に混乱しています。エラーなしでは何も機能しません。助けてください。

ありがとう-Sean

4

2 に答える 2

2

をチェックする代わりに!isset()、 を使用しますempty()。フォームが空の文字列を送信した場合でも$_POST、空の文字列として表示され、isset()が返されTRUEます。

インクリメンタルforループをループに置き換えました。foreachこれは、ほとんどの場合、配列を反復するために PHP で使用されます。

$out_data = array();
foreach ($form_data as $key) {
    if(empty($_POST[$key])) {
        $out_data[$key] = "NO_DATA";
    }
    else {
        $out_data[$key] = $_POST[$key];
    }
}
于 2012-09-21T05:08:25.543 に答える
1

変数が未定義またはそれでない限り、PHPissetは戻ります。空の文字列によって返されることはありません。ただし、必要なことは正確に行います。TRUENULL""FALSEempty()

http://php.net/manual/en/function.isset.php

isset() は、NULL に設定された変数をテストすると FALSE を返します。また、NULL バイト ("\0") は PHP の NULL 定数と同等ではないことに注意してください。

var が存在し、NULL 以外の値を持つ場合は TRUE を返し、それ以外の場合は FALSE を返します。

于 2012-09-21T05:10:08.387 に答える