【发布时间】:2016-01-04 22:02:45
【问题描述】:
如何通过 php 传递一个包含多个复选框和值的数组,保存到 sql 数据库,以及能够将保存的数据拉回客户端?
比如我有一个数组,以'"checked"""checked""""'的方式保存checkbox的值,但是我不仅要保存checked的值,还要保存表单数据,如下:
- 苹果:选中
- 橘子:未选中
- 香蕉:已选中
- 西红柿:勾选
任何帮助都将不胜感激,请回答如何做的上下文,而不仅仅是代码 - 仍在学习!
这是适用于这个问题的代码
处理代码:
$salesman = $data['data-invoice-salesman']; // this is an array
$salesman_array = array(); // create new array
$salesman_names = array(1 => "User1",2 => "User2",3 => "User3",4 => "User4",5 => "User");
for($i = 1; $i <= 5; $i++){ // loop from 1 to 5
if(in_array($i, $salesman)){ // if value exists (has been selected), stack 'checked', if not, stack ''.
$salesman_array[$salesman_names[$i]] = "checked";
} else {
$salesman_array[$salesman_names[$i]] = "";
}
}
$salesman_json = mysqli_real_escape_string($this->_con, json_encode($salesman_array)); // encode the array into JSON and then escape it.
有效的表单代码:
<?php
$salesmand = json_decode($invoice['Invoice']['salesman'], true);
$salesman_names = array(1 => "User1",2 => "User2",3 => "User3",4 => "User4",5 => "User5");
foreach ($salesman_names AS $i => $name) {
if ($salesman[$name] == "checked") {
echo '<input type="checkbox" name="data-invoice-salesman[]" value="'.$i.'" checked/> '.$name.'<br>';
} else {
echo '<input type="checkbox" name="data-invoice-salesman[]" value="'.$i.'" /> '.$name.'<br>';
}
}
?>
</div>
【问题讨论】:
-
$data['data-invoice-salesman']应该是$_POST['data-invoice-salesman']。除此之外,它看起来应该可以工作。尽管在数据库中存储 JSON 字符串似乎不是一个好主意。 -
@Barmar 它可以保存复选框值,而不是每个输入的名称。为什么存储 JSON 字符串是个坏主意(它们被转义了)?
-
这不是安全问题,只是一般的数据库设计问题。例如,您无法轻松搜索特定值。
-
“LIKE”搜索功能不会筛选结果?
-
可以,但这是一种非常糟糕的方法。它不能利用索引。了解正确的数据库规范化。