使用PHP将数据从下拉列表插入数据库

时间:2011-11-03 19:22:36

标签: php mysql forms

首先,我需要一个可以轻松更新的下拉列表,因此我创建了一个名为的数据库 我列出制造商的制造商将在表格中选择。

我终于用这段代码完成了这个:

<?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";
?>

这实际上是插入数据库但不记录任何值。

请帮我弄清楚我做错了什么。

3 个答案:

答案 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']}'
)
";

而且,正如人们在评论中所说,这段代码非常脆弱,请考虑找到更好的选项,将变量传递给查询。