電子書籍の厳選無料作品が豊富!

ユーザーがcsvファイルを指定して、自動的にmysqlに登録されるようにするにはどうしたらいいか悩んでいます。

PHPでプログラムを書いているのですが、csvファイルをプログラム側で指定するのではなく、ユーザーにブラウザからファイルを指定してもらいたいのですが(ユーザーのローカルにcsvファイルがある)どのようにしたら上手く出来るのでしょうか?

HTMLでinput type="file"で出来ると思いきや、変数の受け渡しができず困っています。なにか良い方法があれば教えて頂けないでしょうか?
何卒宜しくお願い致します。

下記は参考プログラムです。
========================================
define('CSVFILE', './mycsv.txt');←ここをユーザーに指定してもらいたい。
define('DELIMITER', ',');  //データ区切り(カンマ)
define('ENCLOSURE', '"');  //データ囲み文字(ダブルクォーテーション)

//ファイルを開く
$fp = fopen(CSVFILE, 'r') or die('ファイルが開けません');

//テーブルを出力
echo '<table border="1">';
while ($field_array = fgetcsv($fp, 4096, DELIMITER, ENCLOSURE)) {
  echo '<tr>';
  foreach ($field_array as $value) {
    echo '<td>' . $value . '</td>';
    echo '<td>' . htmlspecialchars($value, ENT_QUOTES) . '</td>';
  }
  echo '</tr>';
}
echo '<table>';

//ファイルを閉じる
fclose($fp);
=========================================

A 回答 (3件)

ユーザーのローカルファイルをブラウザ経由で抜きたいという話ですか?


セキュリティ上無理ですね、早めにあきらめることをお勧めします。

近しいやり方でやるならftpなどでサーバーにアップするなどして
定期処理でmysqlに登録するプログラムを走らせるなどでしょうか
より自動にちかくするには場合によってはwsh+IEで処理すれば
アイコンワンクリックでなんとかなるかもしれません。
    • good
    • 0
この回答へのお礼

やはりそうですか。
分かりました。
早速のご回答ありがとうございました。

お礼日時:2010/08/04 08:07

> HTMLでinput type="file"で出来ると思いきや、変数の受け渡しができず


PHP4とPHP5ではファイル名というかファイルの実体の受け渡し方法が変更になっていたと思います。
move_uploaded_file()関数を使うようにしましょう。
私は以下のコードでcsvファイルアップロードとMySqlテーブル登録できました。PHP5.3.1ですが参考になれば。エラー処理、セキュリティ上の処理はもっと必要ですけど省略してます。
ーーーuploadcsv7.php ここからーーー
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>upload csv</title>
</head>
<body>
<FORM enctype="multipart/form-data"action="uploadcsv7.php"method="POST" >
<INPUT type="hidden" name="MAX_FILE_SIZE" value="200000">
アップロードするファイル:
<INPUT name="UploadFile" type="file" >
<INPUT type="submit" value="Up Load CSV File">
</FORM>
<?php
// DB 1
$link = mysql_connect("hostname", "username", "password");
mysql_select_db("dbmusic", $link);

// File Upload
$upload = "D:\\upload\\";
$upload .= $_FILES['UploadFile']['name'];
$res = move_uploaded_file($_FILES['UploadFile']['tmp_name'], $upload );
if ( $res ) {
print "アップロードに成功しました\n";
$fp = fopen($upload, "r");
while( ! feof($fp) ) {
$csv = fgets($fp);
$csv_array = explode(",",$csv);

// DB 2
$sql = sprintf(
"INSERT INTO MusicInfo (poemID, poemString, memberName)
VALUES( '%d', '%s', '%s' )",
$csv_array[0], $csv_array[1], $csv_array[2]
);
mysql_query($sql);
}
}
else {
print "アップロードに失敗しました\n";
}
?>
</body>
</html>
ーーーここまでーーー
    • good
    • 0

<input type="file">


に関してですが、変数の受け渡しが出来ないというのはどういう状況でしょうか。

http://www.php-labo.net/tutorial/php/upload.html
こちらのブログが参考になると思いますが、これで受け渡しが不可能であった、ということですか。

「PHP ファイル アップロード」あたりで検索すれば参考になる資料が色々ありますが、いかがでしょうか。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!