从MySQL中的textarea插入多行/列

时间:2017-01-31 20:48:03

标签: php mysql

这有点令人困惑,所以我希望我很清楚。

我最近访问了一个网站,该网站提供了如何格式化textarea文本的说明,并将数据插入到多个字段和数据库的多行中。

例如,在文本区域中,您将输入:

Data 1a, Data 2a, Data 3a
Data 1b, Data 2b, Data 3b
Data 1c, Data 2c, Data 3c

提交时,数据1进入data_1列,数据2进入data_2列,Data 3进入data_3列。也插入了三行。

有没有人做过这样的事情?

我看到了这些,但它们似乎没有覆盖同一行中的多个字段:

MySQL insert from a textarea to multiple rows How to insert multiple row from textareas in MySQL

2 个答案:

答案 0 :(得分:0)

给出样本数据:

$input = 'Data 1a, Data 2a, Data 3a
Data 1b, Data 2b, Data 3b
Data 1c, Data 2c, Data 3c';

简单方法:

$lines = explode("\n", $input);
$data = [];
foreach ($lines as $line) {
    $items = explode(",", $line);
    $row = [];
    foreach ($items as $item) {
        $row[] = trim($item);
    }
    $data[] = $row;
}

简短的方法:

$data = array_map(function($row){
    return preg_split("/\\s*,\\s*/", $row);
}, explode("\n", $input));

或更好:

$data = array_map(function($line){
    return array_map('trim', str_getcsv($line));
}, explode("\n", $input));

str_getcsv()可以执行explode()preg_split()以上的操作。例如,如果引用了一个逗号(如Data 1a, "Data, 2a", Data 3a

,则该逗号可以包含逗号

无论如何,您的$data数组将如下所示:

array (
  0 => 
  array (
    0 => 'Data 1a',
    1 => 'Data 2a',
    2 => 'Data 3a',
  ),
  1 => 
  array (
    0 => 'Data 1b',
    1 => 'Data 2b',
    2 => 'Data 3b',
  ),
  2 => 
  array (
    0 => 'Data 1c',
    1 => 'Data 2c',
    2 => 'Data 3c',
  ),
)

现在,您可以遍历数据并将其插入到数据库中。不要忘记验证和逃避(或使用准备好的陈述)。如果数据出现问题,您可能希望向用户显示错误。

如果您可以信任数据(通常不应该),您可以通过替换某些模式将给定字符串修改为INSERT语句:

$sql = preg_replace('/,\\s*/', "', '", $input);
$sql = preg_replace('/\\n/', "'), \n('", $sql);
$sql = "('" . $sql . "')";
$sql = "insert into my_table (c1, c2, c3) values \n" . $sql;

$sql现在看起来像:

insert into my_table (c1, c2, c3) values 
('Data 1a', 'Data 2a', 'Data 3a'), 
('Data 1b', 'Data 2b', 'Data 3b'), 
('Data 1c', 'Data 2c', 'Data 3c')

答案 1 :(得分:0)

您只需使用以下代码:

不要忘记你在textarea中的所有值都用逗号分隔。

 <?php

    $query = "insert into table (col1, col2, col3) values ";

    /*Get Post Data of Textarea*/
    $textarea = escape_string($_POST['yourTextArea']);

    /*replace values of */
    $getdata = str_replace("\r", "", str_replace("\n", "", $textarea));

    /* explode data to array */
    $data = explode(",", $textarea);

    /*create a empty array*/
    $dataForInsert = array();

    /*Set row start val*/
    $row = 1;

    foreach($data as $key=>$val){
       if(($key + 1) % 3 == 0){
            $row++;
       }
       $dataForInsert[$row][$key] = $val;
    }

    foreach($dataForInsert as $k=>$v){

        $query .= "("

        foreach($v as $k1=>$v1){
             if((count($v)-1) == $k1){
                 $query .= "'".$v1."'),";     
             }else{
                 $query .= "'".$v1."', ";
             }
        }

        if(count($dataForInsert) == $k){
            $query = substr($query, 0, strlen($query)-1);
        }
    }
    /* and use your query string here */
 ?>