1

私は100以上の動的に名前が付けられたフィールドを持つフォームを持っています。それはphpファイルに投稿されます。現在のphpファイルに投稿されたすべてのフィールドを取得したいです:

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] => )

これから、データを次の形式で mysql テーブルに挿入します。

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

しかし、問題は、[_wp_http_referer] の後、[submit] の前の投稿データ値にのみ関心があるため、これらを参照ポイントとして使用できることです。

私が苦労している部分は次のとおりです。

  • 投稿データのその部分だけを動的に取得するにはどうすればよいですか?
  • 必要な配列キーを取得してテーブルに動的に挿入するにはどうすればよいですか?

どうもありがとう!

4

4 に答える 4

1

あなたはこれを試してみてください

$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);
}
于 2012-05-10T19:21:12.623 に答える
0

あなたはこのようなことをすることができます:

$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);

または、すべての「適切な」値に常に数値キーがある場合は、次のように簡略化されたバリエーションがあります。

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

お役に立てば幸いです。

于 2012-05-10T18:59:31.650 に答える
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));
    }
}
于 2012-05-10T19:11:58.710 に答える
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)."')");
}
}

}
于 2012-05-10T18:29:45.673 に答える