重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

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

csvを使用したデータバインド(JavascriptとPHPについて質問)
お世話になります。教えてください<m(__)m>
1ページ内でJavascriptで抽出ワードを入力・抽出し、表示された一覧のデータをcsvで保存できるようにしたいのですが、抽出から保存の間でデータが引き継ぐにはどうしたら良いのでしょうか。
http://www.makoto3.net/document/databind/smp021. …
<?php
#Header("Content-type: application/x-csv; charset=Shift_JIS");

$tmpfname = tempnam("C:\xampp\htdocs\testdir", "file.csv");

$handle = fopen($tmpfname, "w");
fwrite($handle, "writing to tempfile");
fclose($handle);
# CSVファイルに書き込み
$wcsv_file = "data.csv";
$wopen = fopen($wcsv_file, "w") or die("wエラー:ファイルを開けません");
#wcsv_file = "data.csv";
# 書き込みと改行
#fputs($wopen, trim($write_value));
#fputs($wopen, "\r\n");
fclose($wopen);
unlink($tmpfname);
?>

A 回答 (3件)

全部文字コードをUTF-8にそろえれば、文字化けせず、下のサンプル


で望みどおりの機能は出来ました。
(古いIEは無視です。IE7とIE8のみです。)

function XmlSend(){
var xmlstr = document.getElementById("table1").outerHTML;
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = handler;
xmlhttp.open("POST", "/php/reciveXML.php",true);
xmlhttp.setRequestHeader("Content-Type","text/xml");
xmlhttp.setRequestHeader("charset","UTF-8");
xmlhttp.send(xmlstr);
function handler(){
if (xmlhttp.readyState == 4) {
if (xmlhttp.status == 200) {
window.alert("CSVを書き込みました。");
} else {
window.alert("通信エラーが発生しました。");
}
}
}
}

PHPのコード(reciveXML.php)は
<?php
mb_internal_encoding("UTF-8");
$wopen = fopen("../temp/data.csv","w") or die("wエラー:ファイルを開けません");
$postdata = $HTTP_RAW_POST_DATA;
$dom = new DOMDocument();
@$dom->loadHTML($postdata);
$xpath = new DOMXPath($dom);
$query = "/descendant::tr";
$entries = $xpath->query($query);
foreach($entries as $entry){
$write_value = "";
$tds=$entry->getElementsByTagName("td");
for ($i = 0; $i < $tds->length-1; $i++) {
$write_value = $write_value.mb_convert_encoding($tds->item($i)->textContent,"ISO-8859-1","UTF-8").",";
}
$write_value = $write_value.mb_convert_encoding($tds->item($tds->length-1)->textContent,"ISO-8859-1","UTF-8")."\n\r";
fwrite($wopen,$write_value);
}
fclose($wopen);
?>
    • good
    • 0
この回答へのお礼

yyr446さん何度もありがとうございますm(__)m
感謝!感謝!です。
自分がどれだけ勉強不足か改めて実感です。
これで、やってみます!!!
本当にありがとうございました。

お礼日時:2010/08/23 19:53

とりあえず、IEに特化したSCRIPTですが、


↓のfunctionでPHPに絞り込んだ<TR>要素の中身が送信できました。

<button onclick="XmlSend();">送信</button>

function XmlSend(){
 var tr=document.getElementById("table1").getElementsByTagName("tr");
 var data = document.createElement('data');
 for(var i=0;i<tr.length;i++){
  data.appendChild(tr[i].cloneNode(true));
 }
 var xmlstr = "<?xml version='1.0' encoding='utf-8' ?>"+data.outerHTML;
 var xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
 xmlhttp.onreadystatechange = handler;
 xmlhttp.open("POST", "/php/reciveXML.php",true);
 xmlhttp.setRequestHeader("Content-Type","text/xml");
 xmlhttp.setRequestHeader("charset","Shift-Jis");
 xmlhttp.send(xmlstr);
 function handler(){
  if (xmlhttp.readyState == 4) {
   if (xmlhttp.status == 200) {
/* デバッグ用
   window.alert(xmlhttp.responseText);
   document.getElementById("debug").innerHTML=xmlhttp.responseText;
*/
   } else {
   window.alert("通信エラーが発生しました。");
   }
  }
 }
}

PHP側は、未完成ですが

<?php
mb_internal_encoding("UTF-8");
//$postdata = file_get_contents("php://input");
$postdata = $HTTP_RAW_POST_DATA;
$dom = new DOMDocument();
@$dom->loadHTML($postdata);
$dom->normalize();
$xpath = new DOMXPath($dom);
$query = '//tr';
$entries = $xpath->query($query);
/*デバッグ用
foreach($entries as $entry){
print_r($entry->textContent);
}
*/
?>

でも、見事に文字化けしてしまいました。
PHPの処理がまずいみたいです。
PHPも、もっと研究しなきゃ....
    • good
    • 0

 javascriptとPHPは、別のタイミングで、別の場所で動いています。


従ってページ内で直接データを受け渡しする事は出来ません。
どうしても、送信といった処理が必要になります。

javascript(HTMLページ)から、PHPにデータを引き渡す方法は、
現状HTTPプロトコルのPOST、GETしかありません。
(※将来HTML5のWebSocketを各ブラウザーが実装すれば、この手の処理は
 多少楽になりそうですが)
つまり、フォームでサブミットするか、XmlHttpRequestで非同期通信する
しかありません。しかしデータベースオブジェクトをそのまま送信する
ことは出来ないので、フィルタリングしたデータを文字列にシリアライズ
して送信し、PHP側がアンシリアライズしてパースする必要があります。

(XmlHttpRequestの場合、データをXML形式で送信出来るので、今回の
ケースでは、多少楽できるかも)

 ご提示のjavascriptはもろにIEに特化したMs Jscriptですね。どうしても
これを使いたいなら、ページ内にボタンを儲け、そのクリックでその時に
表示されてる<table id="table1">にDOM APIやHtmlTableインターフェース
でアクセスして、<tr>要素を取得して、XMLとしてXmlHttpRequestを使って、
別途作成しておいたPHPプログラムにPOSTリクエストし、PHPプログラムは
受信したデータをXMLオブジェクトなりDOMオブジェクトなりに突っ込んで
(この時、文字コード、に注意)各<TD>の値を取得して、ご提示のPHPのス
クリプトでcsv形式でファイルに書き込めばよいかと思います。

 私なら、最初からIEのデータバインドなんか使いません。PHPとJavascript
とAJAX通信で作れます。
    • good
    • 0

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