1

我有一个带有日选项复选框的 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         | 
+---------+----------------+

任何帮助表示赞赏。期待您的建议。

4

5 回答 5

1

做这样的事情:

foreach($val as $day_option){
    $sql = "INSERT INTO my_table (day) VALUES ($day_option)"
    //execute the previous statement here
}

因为$_POST checkbox包含了checkbox的值(如果html元素checkbox没有值,则$_POST元素等于boolean true)

于 2013-11-07T09:24:39.877 回答
1

再添加一步,在值之前和之后连接括号,同时保存到$val[] 例如:

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
}
于 2013-11-07T09:24:11.030 回答
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'] ) . ')';

请注意每个值周围的括号。它们对于插入很重要。他们基本上让它知道每个项目都是另一行。

然后您的查询将是(这是我认为您有内爆想法的地方):

    $imploded = implode( ",", $val );
    $query = "INSERT INTO tbl_name  " . $imploded . ";";
    mysqli->query($query);

使用准备好的语句有性能方面的原因,但对于像这样的小查询,它真的没有那么大的区别。即便如此,我更喜欢准备好的语句而不是使用字符串连接构建的语句。

于 2013-11-07T10:28:03.303 回答
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>
于 2013-11-07T09:24:18.970 回答
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')
于 2013-11-07T09:38:12.863 回答