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 行では引用符で囲まれていることに注意してください。それ以外の場合は、1 列ではなく 2 列になります。

出力...

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]}";
?>

ユーザーが名前または詳細を引用するのを忘れた場合、必要な列がさらにあることがわかり、隣接するすべての非数値列を結合して、非数値列が 2 つしかなく、それらが数値列で区切られていることを確認できます。

また、上記は一例であることはわかっているので、おそらくこれを検討したことでしょうが、念mysqli_real_escape_string()のため、ユーザー入力に使用するか、使用しているDBに同等のものを使用することを検討してください...

于 2013-05-20T12:41:26.830 に答える
0

これは非常に言葉遣いの悪い質問であり、あなたが何を求めているのか本当にわかりません。テキストエリアから入力を取得し、コンマに基づいて分割する必要があると仮定します。値の1つにコンマが含まれている場合、それは2つのフィールドとして扱われます。

コメントが示唆するように、それをエスケープするか、単に入力の「,」を置き換えることもできます。例えば

$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 に答える