Php 如何将下拉选择插入MySQL数据库?

Php 如何将下拉选择插入MySQL数据库?,php,mysql,Php,Mysql,我正在尝试将为下拉菜单选择的值发布到我的数据库表中。但由于某些原因,它没有将值输入数据库。我正在尝试将cat\u id发布到我的数据库中。因此,我使用下面的代码从数据库中的所有值中编辑下拉列表。下面是将信息插入数据库的函数。但由于某些原因,它不起作用。我想把什么放在选择name=“中,对吗 <select name="cat[<?=$row['pk_id']?>]"> <?php $cat = dbConnect(&q

我正在尝试将为下拉菜单选择的值发布到我的数据库表中。但由于某些原因,它没有将值输入数据库。我正在尝试将
cat\u id
发布到我的数据库中。因此,我使用下面的代码从数据库中的所有值中编辑下拉列表。下面是将信息插入数据库的函数。但由于某些原因,它不起作用。我想把什么放在
选择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>
我是否将
cat\u id
的值放错了?我将cat[.$row['pk_id'].])作为下拉列表的
select name=“

从注释移植的代码:
因此,在
foreach
循环中,您将通过变量
$$k
将所有post键提取到全局变量中(我马上就谈到这个)。在
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\u real\u escape\u string()的调用。。这至少是必要的,以保护您的所有查询不受SQL注入的影响。此时,您的其他
UPDATE
语句也易受攻击,您还必须对它们执行一些转义

关于将
$\u POST
提取到全局变量,我强烈建议不要这样做。你实际上是在模仿被认为非常危险的行为。危险在于,任何人都有可能向您的表单发布任何键,而不是您实际期望接收的键,这可能会在脚本不期望时将脚本中的另一个变量初始化为通过
$\u post
发送的值

虽然我确实建议直接操作
$\u POST
而不是提取到全局变量,但如果必须将它们提取到全局变量,我建议您使用可接受的
$\u POST
键的白名单:

// Make an array of allowed keys
$good_keys = ('action', 'cat', 'otherformkey');
foreach($cat as $k=>$v){
  // Only extract if it is one of the allowed keys
  if($v =='' || !in_array($k, $good_keys) continue;

  // Cast to an integer
  $v = intval($v);
  $k = intval($k);
  // Non-integer strings will cast to zero, so don't do the db action.
  if ($v > 0 && $k > 0) {
    dbConnect("UPDATE twit_info set cat_id=" . $v . " where pk_id =". $k ); 
  }
  // For string values which are quoted in the SQL (unlike the int values above)
  // escape them with mysql_real_escape_string()
  // $v = mysql_real_escape_string($v)
}

var\u dump($\u POST)
查看发布的表单数据的外观。您将发现类似于
$\u POST['cat'][123]
的内容。那么您在
dbConnect()
中的报价是不正确的。您已尝试在
$cat[$row['pk_id']]]
中连接,但尚未关闭您的报价。为了真正帮助您,我们需要看到围绕INSERT的其余代码,最重要的是您是如何从帖子中检索
$cat
的。我把它放在
'“$cat[.$row['pk_id'].].]”
中,但我得到了错误解析错误:语法错误,意外的T_变量inIt类似于
.。$cat[$row['pk_id'].]。“…
,但是,如果不了解您如何设置
$cat
,我们无法确定。我将其设置为
$cat as$k=>$v
@sonicool,这对我们没有什么帮助。请按照我的要求将周围的PHP代码发布到该插件中。让我看看这个暂停,哈哈
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']]) . "')" );
// Make an array of allowed keys
$good_keys = ('action', 'cat', 'otherformkey');
foreach($cat as $k=>$v){
  // Only extract if it is one of the allowed keys
  if($v =='' || !in_array($k, $good_keys) continue;

  // Cast to an integer
  $v = intval($v);
  $k = intval($k);
  // Non-integer strings will cast to zero, so don't do the db action.
  if ($v > 0 && $k > 0) {
    dbConnect("UPDATE twit_info set cat_id=" . $v . " where pk_id =". $k ); 
  }
  // For string values which are quoted in the SQL (unlike the int values above)
  // escape them with mysql_real_escape_string()
  // $v = mysql_real_escape_string($v)
}