我有一个包含 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]但在[提交]之前,因此这些可以用作参考点。
我遇到的部分是:
- 如何动态获取该部分帖子数据?
- 我将如何获取所需的数组键并将其插入动态表?
非常感谢!
你试试这个
$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);
}
$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)."')");
}
}
}
你想要的键似乎都是数字,所以你只能存储这些。像我之前的其他人一样,我也建议使用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));
}
}
你可以做这样的事情:
$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);
希望有帮助。