0

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

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

 $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”

谢谢

4

2 回答 2

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()用户输入或您正在使用的数据库的等效项...

于 2013-05-20T12:41:26.830 回答
0

这是一个措辞不佳的问题,我真的无法说出你在问什么。我假设您想从 textarea 获取输入并根据逗号将其拆分 - 如果其中一个值中有逗号,则它将其视为两个字段。

正如评论所暗示的那样,您可以将其转义,或者甚至简单地替换输入中的“,”。例如

$input = $_POST['input'];

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

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

再次阅读您的问题后,您需要以下内容:

 $sql = "insert into tablename set name='".$name."', partno='".$partno."', detail='".$detail."', qty='".$qty."', price='".$price."'";
于 2013-05-20T12:38:24.400 回答