2013-05-20 68 views
0

從名稱中包含逗號的csv插入數據工作正常。插入相同的,如我想例如「測試,名稱」從textarea插入字符串,其逗號與csv相同,使用php

我從文本區域插入數據到數據庫。使用此代碼

$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"; 

} 

它的工作,但是如果我想插入逗號在它的「名稱」。 例如我wnant插入此數據(名稱=「試驗中,名稱」)

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

上面的代碼將分裂的名稱,但我wnat名稱爲「test,名稱」和「測試,NAME2」

謝謝

+0

除非你強制執行某種引用,無法確定拆分應該在哪裏。要麼你需要引用你的名字,要麼使用不同的方式分割值。 –

+0

嘗試使用自動將數組轉換爲變量的extract()http://php.net/manual/en/function.extract.php。 – Ali

+0

@AleksG謝謝。爲了您的評論。當我使用名稱中包含逗號的csv文件時。這是完全保存我想要的。 「測試,名稱」 –

回答

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()用戶輸入,或者你使用等效爲DB ...

+0

Thanke回覆。這會爲我工作。但有這個小問題。 上面的代碼完全符合我的要求。但是我在文本區域輸入相同的字符串並處理它,然後它不起作用。 –

+0

當我輸入「測試,名稱」,123,testdetail,2,100在文本區域這不像上面的字符串在你的例子 –

+0

woking差異是可能在你的代碼字符串和文本區域中的逗號 –

0

這是一個措辭不佳的問題,我真的不知道你在問什麼。我假設你想從textarea中獲取輸入並根據逗號分割它 - 如果其中一個值有一個逗號,它將它視爲兩個字段。

正如評論所暗示的,你可以逃避它,或者甚至簡單地在你的輸入中替換','。例如。

$input = $_POST['input']; 

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

注意:這將在您的輸入中用' - '代替','。然後,您可以在輸出時將該字符放在另一端,以便用','替換' - ' - 或者使用較少的字符。此代碼未經測試。

再次閱讀您的問題後,你需要的東西是這樣的:)

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

謝謝。你完全明白我想問什麼。那麼你怎麼能說這是一個措辭不佳的問題。 –

+0

對不起。沒有任何意圖 - 這只是一個尷尬的問題。如果這對您有幫助,請將其標記爲有用。 – verenion

+0

這顯然沒有幫助。我已經標記了另一個答案。 –

相關問題