如何将DropDown选择插入MySQL数据库?

时间:2012-10-28 21:44:33

标签: php mysql

我试图将下拉菜单中选择的值发布到我的数据库表中。但由于某种原因,它没有将值输入数据库。我正在尝试将cat_id发布到我的数据库中。所以我使用下面的代码来根据我在数据库中拥有的值来设置我的下拉列表。然后在下面我有将信息插入数据库的功能。但由于某种原因,它不起作用。我想把select name=""中的内容放在右边?

<select name="cat[<?=$row['pk_id']?>]">
              <?php $cat = dbConnect("SELECT * FROM category");
                    if(empty($row['cat_id'])){
                    ?>
                    <option value="">Select Category</option>
                    <?php
                    }

              ?>


              <?php while($cat_r = mysql_fetch_array($cat)){ 

              if($row['cat_id'] == $cat_r['cat_id']){
              ?>
              <option value="<?=$cat_r[cat_id]?>" selected="selected"><?=stripslashes($cat_r[cat_name])?></option>
              <?php
              continue;
              }

              ?>
             <option value="<?=$cat_r[cat_id]?>"><?=stripslashes($cat_r[cat_name])?></option>
<?php }  ?>
</select>

这是我对MySQL的插入

dbConnect("INSERT INTO post_info(add_to_random, show_home, source, display_vote_page, cat_id) values(1,1,1,0,cat[.$row['pk_id'].])");

我在这里为cat_id的价值做了什么错误吗?我把cat [。$ row ['pk_id']。])放在那个下拉列表中select name=""

移植自评论的代码:

if($_POST and $_POST['action'] == 'submit'){ 
  foreach($_POST as $k=>$v){
    $$k = $v;
  } 
  foreach($cat as $k=>$v){
    if($v =='') continue;
    dbConnect("UPDATE twit_info set cat_id=" . $v . " where pk_id =". $k ); 
  }
  if(count($pkid)>0){
    $pid = implode(',',$pkid); 
    dbConnect("UPDATE twit_info set add_to_vote = 1, display_vote_page = 1 where pk_id in(". $pid .")"); 
  }
}

1 个答案:

答案 0 :(得分:0)

所以在你的foreach循环中,你是通过变量变量$$k将所有的后置密钥提取到全局变量中(我将在一秒钟内完成)。在dbConnect()来电中,报价不正确。你应该在$cat中连接。

dbConnect("
  INSERT INTO post_info
    (add_to_random, show_home, source, display_vote_page, cat_id) 
    values(1,1,1,0, '" . mysql_real_escape_string($cat[$row['pk_id']]) . "')" );

我已添加了对mysql_real_escape_string()的调用。这是至少的必要条件,以保护您的所有查询免受SQL注入。您的其他UPDATE语句此时也很容易受到攻击,您必须执行一些转义。

关于将$_POST提取到全局变量中 - 我强烈建议不要这样做。你实际上在模仿被认为非常危险的register_globals的行为。危险在于,任何人都可以将任何密钥发布到您的表单中,除了您实际期望接收的密钥之外,可能会将脚本中的另一个变量初始化为通过{{ 1}}当你的脚本不期望它时。

虽然我真的只是建议直接在$_POST上运行,而不是解压缩到全局变量,如果必须将它们提取为全局变量,我建议你使用可接受的$_POST密钥的白名单:

$_POST