Php 更新SQL表中的复选框值
我可以显示SQL查询中的复选框值,但我不能更新它们,我只能更新untick值(0值),如果我取消复选框,它可以将untick值0保存到SQL表中。如果我重新勾选复选框,它将无法更新SQL查询中的值。我使用int作为数据类型。以下是我的测试系统中的示例代码: 复选框HTML:Php 更新SQL表中的复选框值,php,sql,sql-update,Php,Sql,Sql Update,我可以显示SQL查询中的复选框值,但我不能更新它们,我只能更新untick值(0值),如果我取消复选框,它可以将untick值0保存到SQL表中。如果我重新勾选复选框,它将无法更新SQL查询中的值。我使用int作为数据类型。以下是我的测试系统中的示例代码: 复选框HTML: <div class="form-group col-lg-6"> <label class="control-label col-lg-4">Pricing<span style="color
<div class="form-group col-lg-6">
<label class="control-label col-lg-4">Pricing<span style="color:red;"> </span></label>
<div class="col-lg-8">
<input type="checkbox" name="rm_option" id="rm_option" value="1"><strong> RM </strong></input>
<input type="checkbox" name="point_option" id="point_option" value="1"><strong> Full Point </strong></input>
<input type="checkbox" name="partial_option" id="partial_option" value="1"><strong> Partial Point + RM </strong></input>
</div>
</div>
<?php
$sql = "select * from promotion_list where id=" . $_GET['id'];
$arr_sql = db_conn_select($sql);
foreach ($arr_sql as $rs_sql) {
foreach ($rs_sql as $key => $value) {
?>
$("#<?php echo $key ?>").val("<?php echo $value ?>");
<?php if($value == 1){ ?>
$("#<?php echo $key ?>").attr("checked", true).prop("checked", true);
<?php } ?>
<?php
}
?>
$("#filter_id").val('<?php echo $rs_sql['id'] ?>');
$("#promotion_content").jqteVal('<?php echo $rs_sql['promotion_content'] ?>');
$("#promotion_terms").jqteVal('<?php echo $rs_sql['promotion_terms'] ?>');
$("#promotion_instruction").jqteVal('<?php echo $rs_sql['promotion_instruction'] ?>');
$("#promotion_policy").jqteVal('<?php echo $rs_sql['promotion_policy'] ?>');
<?php
}
?>
else if($action == 'update') {
$rm_option = isset($_POST['rm_option']) ? $_POST['rm_option'] : "";
$point_option = isset($_POST['point_option']) ? $_POST['point_option'] : "";
$partial_option = isset($_POST['partial_option']) ? $_POST['partial_option'] : "";
$query = "UPDATE " . $table ." SET id_promotion_categories = '" . $id_promotion_categories . "',
promotion_title = '".$promotion_title."',
rm = '".$rm."', promotion_description = '".$promotion_description."',
point = '".$point."', point_rm_point = '".$point_rm_point."', point_rm_rm = '".$point_rm_rm."',
quantity_limit_option = '".$quantity_limit_option."', quantity_limit = '".$quantity_limit."',
discount_percentage = '".$discount_percentage."', promotion_price_before = '".$promotion_price_before."',
promotion_price_after = '".$promotion_price_after."',
redemption_from_date = '".$redemption_from_date."', redemption_to_date = '".$redemption_to_date."',
rm_option = '".$rm_option."', point_option = '".$point_option."', partial_option = '".$partial_option."',
merchant_option = '".$merchant_option."', merchant_price = '".$merchant_price."',
reservation = '".$reservation."', feature = '".$feature."' where id='" . $id . "'";
$arr_treatment = db_conn_update($query);
if ($arr_treatment) {
$result_arr['msg'] = 'Update Successful';
} else {
$result_arr['msg'] = 'Error in processing data. Please try again later.';
}
$result_arr = special_char_display_arr($result_arr);
$json = json_encode($result_arr);
print($json);
}
下面是我的输出(它不能让我在空复选框中更新,例如,下面的部分点+RM):
所有更新记录都没有问题,只是复选框不能更新。我希望有人能指导我解决这个问题。非常感谢。对于复选框,如果选中复选框,则会出现
$\u POST
数组元素(and=1),否则将不存在该元素。所以改变
$rm_option = isset($_POST['rm_option']) ? $_POST['rm_option'] : "";
$point_option = isset($_POST['point_option']) ? $_POST['point_option'] : "";
$partial_option = isset($_POST['partial_option']) ? $_POST['partial_option'] : "";
到
您还应该能够更新0值。请注意,正如@SergheiLeonenco所说的,因为这些是数值,所以在查询中不需要在它们周围加引号
强制SQL注入注释
因为您直接在查询中使用
$\u POST
值,所以很容易受到SQL注入的攻击。您应该阅读并移动到准备好的语句以保护自己。对于复选框,如果选中复选框,则存在$\u POST
数组元素(and=1),否则不存在该元素。因此,更改($\u POST['rm\u option'])$_POST['rm_option']:“”到$rm\u option=isset($\u POST['rm\u option'])?1 : 0;
和您应该能够更新0值。还可以删除“$rm_option.”“
和其他必须插入整数的地方的单引号。结果应该是这样的:“$rm\u选项。”
@Nick您的答案是正确的。你能把你的答案写在下面让我给你打分吗?@asonchesondone。。。
$rm_option = isset($_POST['rm_option']) ? 1 : 0;
$point_option = isset($_POST['point_option']) ? 1 : 0;
$partial_option = isset($_POST['partial_option']) ? 1 : 0;