使用php插入来自textarea的字符串,其逗号与csv相同

时间:2013-05-20 12:17:00

标签: php mysql csv

从名称中包含逗号的csv插入数据工作正常。插入我想要的相同内容,例如“test,name”

我正在从文本区域将数据插入数据库。使用此代码

 $addmult = nl2br($_POST['textarea']);        
    $data1 = explode('<br />',$addmult);    
    foreach($data1 as $dataline)
                {
                    $line   = explode(',',$dataline);
                    $name   = $line[0];
                    $partno = $line[1];
                    $detail = $line[2];
                    $qty    = $line[3];
                    $price  = $line[4];
    $sql = "insert into tablename set name=$name, partno=$partno, detail=$detail, qty=$qty, price=$price";

}

它正在工作,但如果我想插入带有逗号的“名称”该怎么办? 例如,我想插入这些数据(name =“test,name”)

test,name,123,testdetails,2,100
test,name2,321,testdetails2,22,200 

上面的代码将拆分名称,但我将其命名为“test,name”和“test,name2”

感谢

2 个答案:

答案 0 :(得分:1)

str_getcsv()会为你工作吗?它会将CSV字符串解析为数组...

请参阅:http://php.net/manual/en/function.str-getcsv.php

以下内容:

<?php
    $stringAry = "\"test,name\",123,testdetails,2,100";
    print_r(str_getcsv($stringAry));
?>

注意,"test,name"被CSV行中的引号括起来,否则它是两列而不是一列。

...输出

Array
(
    [0] => test,name
    [1] => 123
    [2] => testdetails
    [3] => 2
    [4] => 100
)

所以你可以做类似

的事情
<?php
    $stringAry = "\"test,name\",123,testdetails,2,100";
    $sql = "insert into tablename set name={stringAry[0]}, partno={stringAry[1]}, detail={stringAry[2]}, qty=$qty, price={stringAry[3]}";
?>

如果用户忘记引用名称或详细信息,您可以确定您应该有更多列,并组合所有相邻的非数字列,因为您只有两个非数字列,并且它们由一个数字列。

另外,我知道以上是一个例子,所以你可能已经考虑过这个,但以防万一:考虑使用mysqli_real_escape_string()进行用户输入,或者等待你正在使用的数据库...

答案 1 :(得分:0)

这是一个措辞不好的问题,我无法确切地说出你在问什么。我假设您想从textarea获取输入并基于逗号将其拆分 - 如果其中一个值中包含逗号,则将其视为两个字段。

正如评论所暗示的,你可以逃避它,或者,甚至简单地在你的输入中替换','。 E.g。

$input = $_POST['input'];

$replacedInput = str_replace(',', '-', $input);

注意:这将在您的输入中使用' - '重复','。然后,您可以在输出时在另一端选择此字符,以便将“ - ”替换为“,” - 或使用较少的字符。此代码未经过测试。

再次阅读你的问题之后,你需要这样的事情:

 $sql = "insert into tablename set name='".$name."', partno='".$partno."', detail='".$detail."', qty='".$qty."', price='".$price."'";