1

クリックすると ajax 呼び出しを行うボタンにイベント リスナーをアタッチしようとしています。

test.php という名前のファイルに、いくつかの php を取っておきます。ライブ jquery 関数を使用して、ボタンへのクリック イベントを攻撃しました。ajax 関数は、ページ上の入力要素の値を test.php に渡します。test.php ファイルは、その値を使用して、使用するファイルの URL を決定します。test.php ファイルは、一致する電子メールに基づいて csv ファイルを重複排除します。csv ファイルは、アップロード入力要素を介してアップロードされます。

ここに私のコードがありますが、現在は機能していません。Fiddler は、要求がサーバーに送信されているが、応答が来ていないことを示しています。

HTML

<input type="button" id="csv_dedupe" value="dedupe-file">

Jクエリ

$_CFG_PROCESSORFILE = "http://localhost/Gene/IMEXporter/include/IMEXporter_processor.php";

$("#csv_dedupe").live("click", function(e) {
    file_name = 'C:\\server\\xampp\\Gene\\IMEXporter\\include\\files\\' + $("#IMEXp_import_var-uploadFile-file").val();
    $.post($_CFG_PROCESSORFILE, {"task": "csv_dupe", "file_name": file_name}, function(data) {
        alert("success");
    }, "json")
});

PHP

if ($task == "csv_dupe") {
$input_filename = $_REQUEST["file_name"];
$output_filename = $_REQUEST["file_name"];

$input_file = fopen($input_filename, 'r');
$output_file = fopen($output_filename, 'w');
$email_addresses = array();
// Read the header
$headers = fgetcsv($input_file, 0);
fputcsv($output_file, $headers);
// Flip it so it becomes name => ID
$headers = array_flip($headers);

// Read every row
while (($row = fgetcsv($input_file, 0)) !== FALSE)
{
    $email = $row[$headers['email']];
    // Do we already have this email address?
    if (isset($email_addresses[$email]))
        continue;

    // Mark this email as being found
    $email_addresses[$email] = true;
    // Write it to the output
    fputcsv($output_file, $row);
}

}

なぜ機能しないのか、何が間違っているのかわかりません。どんなアイデアでもいただければ幸いです。

EDIT *修正済みですが、新しいエラーが表示されます*

リクエストが返されたときにいくつかのエラーを受け取りました。

警告: fputcsv() は、パラメーター 2 が配列であることを想定しており、45 行目の C:\server\xampp\htdocs\Gene\IMEXporter\include\IMEXporter_processor.php で指定されたブール値です。

警告: array_flip() は、パラメーター 1 が配列であると想定し、47 行目の C:\server\xampp\htdocs\Gene\IMEXporter\include\IMEXporter_processor.php で指定されたブール値「成功」

4

1 に答える 1

0

ここで同様の問題を抱えている人を見つけました。

ファイルを開く前に行を追加する

ini_set('auto_detect_line_endings',TRUE);

fgetcsv() は、ファイルの最後に到達すると、「false」のブール値を返しています。PHPマニュアルから:

fgetcsv() returns NULL if an invalid handle is supplied or FALSE on other errors, including end of file.

参照:

于 2013-03-12T17:08:23.130 に答える