2012-05-10 18 views
1

私はPHPファイルに投稿する100以上の動的名前付きフィールドを持つフォームを持っていますが、現在PHPファイルに投稿されているすべてのフィールドを取りたいとします:フォームから_POSTデータを動的にMYSQLに挿入

私はフォーマットにMySQLのテーブルにデータを挿入する。このことから
Array ([option_page] => plugin_options 
[action] => update 
[_wpnonce] => a51bfc281a 
[_wp_http_referer] =>/wp-admin/options-general.php page=plug.php 
[13939069] => 
[2171] => 
[3600645] => 
[2168] => 
[13937024] => 
[submit] => Save Changes 
[__qca] => P0-1887521465-1334258158937 
[s_vi] =>) 

id  | option_name  | value 
-------------------------------------------- 
autonum | post data key | post data value 

しかし、問題は、私は後にのみ、ポストデータ値のintrestedていますされています[[_wp_http_referer] が、前にこれらを参照点として使用することができます。

私はstugglingい部分がある:私は動的にPOSTデータのその部分だけを取得する方法を

  • どのように必要な配列キーを取得し、 テーブルに動的に挿入するのですか?

多くの感謝! "良い" 値のすべてが常に数字キーを持っている場合

$discard_array = array('option_page', 'action', '_wpnonce', '_wp_http_referer', 'submit', '__qca', 's_vi'); 
$good_array = array(); 
foreach ($_POST as $key => $val) 
{ 
    if (!in_array($key, $discard_array)) $good_array[$key] = $val; 
} 

// use $good_array to insert your data into db 
print_r($good_array); 

または、ここでは単純化バリエーションです:

+0

を試みる順序が同じであることを保証されていないので、これに取り組むための正しい方法です。 –

+0

それからあなたは何をお勧めしますか? –

+0

あなたが望まない値を知っているので、無視する値のブラックリストを作成して、リクエストとともに送信された他のすべてのポスト値を取得することができます。 – dm03514

答えて

1

あなたマットは、私が* `$ _POST`要素の間に*を取得するとは思わないこの

$start = array_search("_wp_http_referer",array_keys($_POST))+1; 
$end = array_search("submit",array_keys($_POST))-1; 
$newArr=array_slice($_POST, $start, $end); 
foreach($newArr as $k=>$v) 
{ 
    // $k is the key name and $v is the value of that key 
    //echo $k."=".$v."<br />"; 
    $val=mysql_real_escape_string($v); 
    $sql="INSERT INTO table_name VALUES (null, ".$k.", ".$val.")"; 
    mysql_query($sql); 
} 
+0

これはほぼ同じですが、キーを同じ名前に変更するのではなく、同じ値を保持する方法はありますか? –

+0

私は自分のlocalhost上でそれをテストしましたが、動作しています。キーの名前が変更されていません。 –

+0

申し訳ありませんが、$ kの代わりに$ keyを使用することで、私の問題でした。私が見ていることの一つは、提出はまだ含まれていますか? :S –

0
$counter = 0; 

foreach($_POST as $key=>$value) 
{ 

if($key == "_wp_http_referer") 
{ 
$counter = 1; 
} 

if($counter == "1") 
{ 
if($key != "submit") 
{ 
mysql_query("INSERT INTO table_name(id, option_name, value) VALUES ('','".mysql_real_escape_string($key)."','".mysql_real_escape_string($value)."')"); 
} 
} 

} 
+0

-1は、露骨なSQLインジェクションの脆弱性です。 –

+0

@MarcBはmysql_real_escape_string()を追加しました。 – Adam

+1

PDOを使用してください。このサイトは "Use PDO"というメッセージで乗っ取られていますので、mysql_ *を死に至らせてください。 –

0

あなたはこのような何か行うことができます

$good_array = array(); 
foreach ($_POST as $key => $val) 
{ 
    if (is_numeric($key)) $good_array[$key] = $val; 
} 
print_r($good_array); 

希望をその助けてください。

+0

あまりにも愚かに聞こえて申し訳ありませんが、エラーを生成し続けるので、どのようにすべての「良い」値をエコーすると、残りの部分を完了しますか? –

+0

タイプミスがあります。申し訳ありません。更新されたコードを試してください。 – Juan

0

あなたが望むキーはすべて数字であるように見えるので、それらを保存することしかできません。私の前で他の人と同様に、セキュリティと利便性を高めるためにPDOを使用することを提案します。

$dbh = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass); 
foreach($_POST as $key => $value) { 
    if(preg_match("/^[0-9]+$/", $key) { 
     $stmt = $dbh->prepare('INSERT INTO table_name(option_name, value) VALUES (?, ?)'); 
     $stmt->execute(array($key, $value)); 
    } 
} 
関連する問題