我有一个HTML表单,其中包含日期选项的复选框,与下面所示的一样:
<input type="checkbox" name="A" value="Daily">Daily<br>
<input type="checkbox" name="B" value="Sunday">Sunday<br>
<input type="checkbox" name="C" value="Monday">Monday<br>
然后我以这种方式成功阅读了签到的框:
if (isset($_POST['A']))
$val[] = $_POST['A'];
if (isset($_POST['B']))
$val[] = $_POST['B'];
if (isset($_POST['C']))
$val[] = $_POST['C'];
然后我成功地破坏了他们,如下所示:
$value = implode(', ', $val);
我想知道如何将每个数组元素插入表中,以便它们最终在每一行上,如下表(日期列)所示。下表显示签入日期为每日,周二和周五。星期二。
+---------+----------------+
| id | day |
+---------+----------------+
| 1 | Daily |
| 2 | Tuesday |
| 3 | Friday |
+---------+----------------+
感谢任何帮助。期待您的建议。
答案 0 :(得分:1)
再添加一步,在值保存到$val[]
之前和之后连接括号
e.g:
if (isset($_POST['A']))
$val[] = "(" . $_POST['A'] . ")";
if (isset($_POST['B']))
$val[] = "(" . $_POST['B'] . ")";
if (isset($_POST['C']))
$val[] = "(" . $_POST['C'] . ")";
if(!empty($val[])){
$value = implode(', ', $val);
INSERT INTO table_name (day) $value
}
答案 1 :(得分:1)
做类似的事情:
foreach($val as $day_option){
$sql = "INSERT INTO my_table (day) VALUES ($day_option)"
//execute the previous statement here
}
因为$ _POST复选框包含复选框的值(如果html元素复选框没有值,则$ _POST元素等于布尔值true)
答案 2 :(得分:0)
您不需要内爆数组。只需使用它:
<tr><td>1</td><td><?php echo $val[0] ?></td></tr><tr><td>2</td><td><?php echo $val[1] ?></td></tr><tr><td>3</td><td><?php echo $val[2] ?></td></tr>
答案 3 :(得分:0)
最好又快捷的方法是:
PHP代码:
$data = array();
$data['A'] ='Daily';
$data['B'] ='Sunday';
$data['C'] ='Monday';
$value = "('".implode("'),('",$data)."')";
mysql_query("INSERT INTO tbl_name ('day') VALUES $value") or die(mysql_error());
已执行查询
INSERT INTO tbl_name ('day') VALUES ('Daily'),('Sunday'),('Monday')
答案 4 :(得分:0)
此处的其他答案都是您使用未过滤的数据运行查询。这使您可以使用SQL注入,这通常是一个坏主意。你应该做些什么来过滤你的数据。 mysqli_real_escape_string($value)
或使用准备好的陈述。
准备好的语句解决方案是(在将所有内容插入$val
后):
$stmt = msqli->prepare( "INSERT INTO tbl_name ( Day ) VALUES (?), (?), (?);" );
$stmt->bind_param( 'sss', $val[0], $val[1], $val[2] );
$stmt->execute();
或者,如果您只想使用转义字符串,而不是像在示例中那样插入$val
,请执行以下操作:
if( isset( $_POST['A'] ) )
$val[] = '(' . msqli_real_escape_string( $_POST['A'] ) . ')';
注意每个值周围的parens。它们对插入物很重要。他们基本上让它知道每个项目是另一行。
然后你的查询将是(这是我认为你有想法破坏某些东西的地方):
$imploded = implode( ",", $val );
$query = "INSERT INTO tbl_name " . $imploded . ";";
mysqli->query($query);
有一些性能原因可以使用预先准备好的语句,但对于像这样的小查询,它确实没有那么大的差别。即便如此,我更倾向于使用字符串连接构建的声明。