2012-03-01 5 views
0

私はサイトオプションの配列を持っています。PHP - if文に問題があります。 0、NULLと ""の違い

次に、foreachループを使用してユーザーから送信されたすべてのデータを検証する関数を用意しました。変数のほとんどはどこから来たあなたは知らないでしょうが、これは、この場合では重要ではありません:フィールドが「それは価値があるだ空の場合、

function settings_validation($input) { 
    $settings = my_array(); 
    foreach ($settings as $setting) { 

     //this function leaves the old field's value if there's no input 
     if($type == 'something' && empty($input[$id])) { 
      $valid_input[$id] = $option[$id]; 
     } 
     //this function updates the field if input is not NULL 
     else if($type == 'something' && !empty($input[$id])) { 
      $valid_input[$id] = $input[$id]; 
    } 

    return $valid_input; 
};  

$入力が提出した後に生成されたすべてのフォームフィールドの配列です"

ここで問題が発生します。

フィールドを消去したい場合、このフィールドにデータを残さずにフォームを送信すると、データは送信されず、常に最初のifステートメントが実行され、フィールドは消去前の状態になります。

最初のif文を削除してからフォームを送信すると、編集したオプションに新しいデータが送信され、他のすべてのデータは消去されます($入力が空であるため)。

関数で生成された空の$入力とユーザーの操作で作成された空の$入力の違いを調べるには、どのようなチェックを行うべきですか?

私が使用しているsettings_validation()関数は、register_setting()という別の関数のコールバックです。WPSEではなくPHP関連の問題であるため、ここで質問しています。

+1

あなたはループ内で使用することはありませんが、あなたは '$ input'、' $ valid_input'と '$ option'をインデックス' $ id'で参照するだけです...そこにありますいくつかのコードがありませんか?何かが追加されません... – Yaniro

+0

すべては完全に上質で、 '$ id = $ setting ['id']'とそれだけです。 – Wordpressor

+1

すべての変数がどこから来たのか分からずには分かりません。フォームがすでに存在するものを編集するのであれば、確かにそれをその情報で埋めているのですが、それが空に戻ってくるのは、ユーザーがそれを削除したからです。 – Josh

答えて

0

答えはincredibyシンプルでかなりトリッキーだった:助けるため

function settings_validation($input) { 
$settings = my_array(); 
foreach ($settings as $setting) { 

    if($type == 'something' && empty($input[$id])) { 
     //nothing here and everything is fine 
    } 

    else if($type == 'something' && !empty($input[$id])) { 
     $valid_input[$id] = $input[$id]; 
    } 

return $valid_input; 
};  

ありがとう!

+0

ええ、それは誰にも意味をなさない。 '$ type'はどこからも来ません。 '$ id'も同様です。 – netcoder

+0

'$ id'と' $ type'は '$ settings'配列の要素です。上の私のコメントを見てください。 – Wordpressor