2017-05-08 4 views
0

$_POST配列は、このようなものです:反復フィルタキーが

array(4){ 
    [4]=> string(0) "" 
    [1]=> string(1) "5" 
    [2]=> string(1) "3" 
    [3]=> string(0) "" 
} 

配列のキーは、データベースエントリのIDのために立っています。だから私はIDのキーを使用してデータベースを更新しようとします。

for($db=0; $db<count($_POST); $db++){ 
    if($_POST[$db] != NULL){ 
     $id = key(current($_POST[$db])); //<-- Problem 
     $value = $_POST[$db]; 
     // query code 
    } 
} 

$idの行は機能しません。誰か助けてくれますか?

+1

なぜforeach($ _POSTを$ id => $ value)だけ使用しないのですか? – Igor

+1

'foreach($ _ POSTは$ id => $ value)'ですか? – splash58

+0

コメントと回答ありがとうございました。それは今働きます! –

答えて

0

のではなく、すべての私の条件チェックを実行しているを使用してはいけませんループの前に$_POSTをフィルターに掛ける方が良い場合は、条件式なしですべての反復でprepared statement query(セキュリティ上の理由から)を使用することができます。

サンプル値から、空の値または数値のいずれかが予想されるようです。また、データベーステーブル構造では、idの自動インクリメント1を使用するのが一般的です。私はあなたのプロジェクトに最も効果的なものを選ぶことができるように、3つの方法を提供します。すべてのメソッドは、フィルタリング後に元のキー(id)を$_POSTに保存します。

方法#1:(、全ヌルを除去偽Y$_POSTからゼロっぽい要素)

foreach(array_filter($_POST) as $id=>$value){ 
    // insert your prepared statement query code block here 
} 

方法#2:(唯一の要素を許可$_POSTの値が0より大きい)

foreach(array_filter($_POST,function($v){return $v>0;}) as $id=>$value){ 
    // insert your prepared statement query code block here 
} 

方法3ここで、整数値を有する$_POSTからRMIT要素)

foreach(array_filter($_POST,function($v){return is_int($v);}) as $id=>$value){ 
    // insert your prepared statement query code block here 
} 

は、すべての3つの方法のdemonstrationあります。

さらに、サハイの答えにはいくつかの不必要なチェックがあります。

最初に、if(is_array($_POST))をチェックすると、$_POSTsuperglobalなので、常にtrueという結果が得られます。あなたが私を信じていないなら、decezeのコメントhereを彼のユーザー名の後にその素晴らしいダイヤモンドの1つを持っていると信じることができます。例外は、あなたがContent-Type:text/xmlを使用している場合ですが、確かに今回はそうではありません。

foreach()ループが空であれば、繰り返し実行されなくなるため、のcount()をチェックする必要はありません。

1

ここでは$_POSTを使用してforeachを使用しています。これがあなたを助けてくれることを願っています。

変更この:

for($db=0; $db<count($_POST); $db++){ 
    if($_POST[$db] != NULL){ 
    $id = key(current($_POST[$db])); <-- Problem 
    $value = $_POST[$db])); 

    --- here follows the query --- 
    } 

この:

<?php 
if(is_array($_POST) && count($_POST)>0) 
{ 
    foreach($_POST as $id=> $value) 
    { 
    //$id is your id 
    //$value is the value on that id  
    //--- here follows the query --- 
    } 
} 
+0

完璧! ifと一緒にあなたのコードを使用しています! –

+0

@FabrizioCocco私の投稿を受け入れてくれてありがとう...ようこそ... :) –

1

は、なぜあなたはforeach()

foreach($db as $key => $value){ 
     $key is the id you need 
}