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)
}