如何在每行中插入一个implode()的数组元素结果?

时间:2013-11-07 09:19:55

标签: php mysql

我有一个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         | 
+---------+----------------+

感谢任何帮助。期待您的建议。

5 个答案:

答案 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);

有一些性能原因可以使用预先准备好的语句,但对于像这样的小查询,它确实没有那么大的差别。即便如此,我更倾向于使用字符串连接构建的声明。