首先,我需要一个可以轻松更新的下拉列表,因此我创建了一个名为的数据库 我列出制造商的制造商将在表格中选择。
我终于用这段代码完成了这个:
<?php
// Connect to the test datbase on localhost
// That's where we created the countries table above
mysql_connect('localhost','##user##','##pass##'); mysql_select_db('wordpress');
// Query the countries table and load all of the records
// into an array.
$sql = 'select * FROM manufacturers';
$res = mysql_query($sql) or die(mysql_error());
while ($rec = mysql_fetch_assoc($res))
$manufacturers[] = $rec;
?>
<form action="select.php" method="post">
<?php
echo '<select name="dropdown">';
foreach ($manufacturers as $c)
{
if ($c['id'] == $_GET['id'])
echo "<option value=\"{$c['meta_id']}\" selected=\"selected\">{$c['meta_value']} </option>\n";
else
echo "<option value=\"{$c['meta_id']}\">{$c['meta_value']}</option>\n";
}
echo '</select>';
?>
<input type="submit" value="Submit" name="submit"/>
</form>
这很好,我现在有一个从我的填充下拉列表 数据库制造商
现在我需要将它发送到现有的数据库调用post_meta,以便从那里我可以永久显示用户选择。
我尝试了几种不同的选项,但我尝试使用以下代码将其发送到我的post_meta数据库。
<?php
$con = mysql_connect("localhost","##user##","##pass##");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("wordpress", $con);
$sql="INSERT INTO wp_postmeta (meta_id, post_id, meta_key, meta_value)
VALUES
('$_POST['meta_id']}','$_POST[post_id]','$_POST[meta_key]','$_POST[meta_value]')";
if (!mysql_query($sql,$con))
{
die('Error: ' . mysql_error());
}
echo "1 record added";
?>
这实际上是插入数据库但不记录任何值。
请帮我弄清楚我做错了什么。
答案 0 :(得分:1)
这样做的正确方法是A:逃避所有那些$ _POST超级全球 和B.编写如下所示的查询。
这是wp_postmeta的tabledef:
http://codex.wordpress.org/Database_Description#Table:_wp_postmeta
因为meta_id是auto_increment主键,你不提供它,MySQL确实如此。
//$meta_id = mysql_real_escape_string($_POST['meta_id']); <<-- not needed.
$post_id = mysql_real_escape_string($_POST['post_id']);
$meta_key = mysql_real_escape_string($_POST['meta_key']);
$meta_value = mysql_real_escape_string($_POST['meta_value']);
$sql=" INSERT INTO wp_postmeta
(post_id, meta_key, meta_value)
VALUES
('$post_id','$meta_key','$meta_value') "; //<<-- don't forget the quotes!
if ($result = mysql_query($sql)) {
//You can get the new meta_id using:
$new_meta_id = mysql_insert_id($result);
} else {
die ("could not insert ".mysql_error());
}
答案 1 :(得分:0)
你的价值观没有出现吗?您的密钥值似乎缺少引号。例如,不应该是:
$_POST['post_id']
要进行健全性检查,只需回显$ _POST变量,而不是立即执行插入操作。这将帮助您弄清楚您是否有一些语法错误。我也读过Brad的评论并记住未来。
答案 2 :(得分:-1)
尝试此查询:
$sql="
INSERT INTO wp_postmeta
(meta_id, post_id, meta_key, meta_value)
VALUES
(
'{$_POST['meta_id']}',
'{$_POST['post_id']}',
'{$_POST['meta_key']}',
'{$_POST['meta_value']}'
)
";
而且,正如人们在评论中所说,这段代码非常脆弱,请考虑找到更好的选项,将变量传递给查询。