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);
?>
No.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);
?>
yyr446さん何度もありがとうございますm(__)m
感謝!感謝!です。
自分がどれだけ勉強不足か改めて実感です。
これで、やってみます!!!
本当にありがとうございました。
No.2
- 回答日時:
とりあえず、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も、もっと研究しなきゃ....
No.1
- 回答日時:
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通信で作れます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP 値の取り出し方について教えて下さい。 1 2023/03/31 13:30
- その他(プログラミング・Web制作) データ解析ソフトRでのファイル入力read.csvがエラーになります 7 2022/03/27 22:11
- その他(プログラミング・Web制作) Fortranでの出力ファイル 2 2023/03/21 21:25
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
- PHP PostgreSQLからCSV形式でエクスポートする際にカラム内の改行をとる方法 1 2023/02/22 10:05
- Excel(エクセル) CSVファイルでVBAを動かす方法 3 2023/04/04 10:22
- Excel(エクセル) エクセルでcsvファイルを開いてVBAを使いたい 7 2022/04/28 11:12
- Ruby 教えてください 2 2023/01/04 17:50
- その他(プログラミング・Web制作) python 気象データの取得 2 2023/06/20 23:54
- C言語・C++・C# #include <stdio.h>int main(void) { int buf[100] = 6 2022/11/01 22:45
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
jsonテキストデータの並び替え...
-
ジャンクの箇所を一切書かずに...
-
呼び出し元のURLを知りたいのです
-
ajaxでhtmlを返して画面に描画…...
-
リンクを押すとEXEファイルを実...
-
HTMLでDBからデータを表形式で...
-
Response.Write(変数)
-
JQuery サーバー上にアップする...
-
webシステムでchrome
-
ローカルでのhtmlチェックにつ...
-
ソースのリンク先などの暗号化...
-
PHPでフォームの自動入力できま...
-
ブラウザを閉じた瞬間にログアウト
-
ASP.NET(VB)VBソースからJavas...
-
ブラウザ(IE)からEXEファイル...
-
RS-232Cの通信方式に関して。
-
[JavaScript] preven...
-
非同期通信を使うタイミングが...
-
【JavaScript】confirmのボタン...
-
ローカル用HTMLファイルの安全...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
jsonテキストデータの並び替え...
-
テキストファイルの内容を変数...
-
jQueryでAJAXを利用しJSONデー...
-
VSCodeにて「終了タグ」の背景...
-
http上でrequest されたxmlファ...
-
JSONのコメント行の書き方...
-
queryselctorのセレクタの後ろ...
-
json形式データのデータ連携に...
-
gulpfile.jsとpackage.jsonの読...
-
教えてください!html5.jpを使...
-
jQuery.getでレスポンスデータ...
-
マピオン・ラボの地図はドラッ...
-
csvを使用したデータバインド(...
-
jQueryクックブック レシピ5.11...
-
フォームからjQuery,jQuery.jso...
-
ASP.NET(VB)VBソースからJavas...
-
【JavaScript】confirmのボタン...
-
HTMLでDBからデータを表形式で...
-
DirectXとOpenGLはどちらが動作...
-
saved from url=(0013)abou
おすすめ情報
