从名称中包含逗号的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”
感谢
答案 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."'";