0

CSVファイルをアップロードするために使用するこのコードがあります。

$handle = fopen($_FILES['filename']['tmp_name'], "r");

while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
    $import="INSERT into matching(date, time, location, epos_id, rbpos_id, type_of_payment, basket_information, user_id, points) values('$data[0]', '$data[1]', '$data[2]', '$data[3]', '$data[4]', '$data[5]', '$data[6]', '$data[7]', '$data[8]')";

    mysql_query($import) or die(mysql_error());

    $query = 'SELECT * FROM users WHERE ID="'.$data[7].'"';
    $result = mysql_query($query) or die(mysql_error());

    while($row = mysql_fetch_array($result)){
        $id_user = $row['user_id'];
        $phone = $row['phone'];
        echo $name = $row['first_name'];
    }

    mysql_query($import) or die(mysql_error()); 
}

fclose($handle);

ここで、列の各データを反復する必要がある$data[7]ため、その user_id を持つ各人の名をエコーし​​ますが、何も出力されないため明らかに間違っています。

PS。データをアップロードしているのは私だけであることに注意してください。セキュリティなどについては心配していません。

4

2 に答える 2

0

多くの PHP データベース関連の作業を行いましたが、mysql はあまり使用しませんでした。ID 文字列を二重引用符で囲んだ select ステートメントの書き方が逆だと思ったでしょうか? つまり、クエリ文字列に二重引用符を使用して、ID 値の一重引用符を囲みます。

$query = "SELECT * FROM users WHERE ID='".$data[7]."'";

print_r($row); を配置するなど、デバッグを試してみることをお勧めします。あなたのwhileループに。

于 2013-06-18T21:37:32.870 に答える
0

csv ファイルからデータを読み取るサンプル コードを提出しています。move_uploaded_fileコマンドを使用して csv ファイルをアップロードするための正確なコードを記述していると想定しています。したがって、私のサンプル コードはその時点から続きます。

// Set path to CSV file
$csvFile = 'test.csv';
$file_handle = fopen($csvFile, 'r');
//fgetcsv($file_handle);//skips the first line while reading the csv file, uncomment this line if you want to skip the first line in csv file
while (!feof($file_handle) )
{
    $csv_data[] = fgetcsv($file_handle, 1024);
}
fclose($file_handle);

/*echo '<pre>';
print_r($csv_data);
echo '</pre>';*/

foreach($csv_data as $data)
{
    echo "<br>column 1 data = ".$data[0];
    //Your insert will go something like this
    $import="INSERT into matching(date, time, ..) values('".mysql_real_escape_string($data[0])."', '".mysql_real_escape_string($data[1])."',....)";

    mysql_query($import) or die(mysql_error());
}

デモのみのために、最初の列の値のみを出力しました。データ配列の完全な構造を知りたい場合は、print_rブロックのコメントを外してください。関数mysql_real_escape_stringは csv データをデータベース テーブルに安全に挿入します。この関数を使用しない場合、csv データに単一引用符または二重引用符が含まれているとクエリが失敗する可能性が高くなります。

于 2013-10-08T11:45:41.730 に答える