
phpスクリプト内でエラーチェックを行って、エラーが有れば、そのスクリプトでエラー表示し、
エラーが無く、結果を画面表示する場合は、そのまま画面表示、
エラーが無く、結果をCSV出力する場合は、別のスクリプトにリンクさせたいと思っています。
いろいろ考えた末、スクリプトを二重に記述する部分を少なくするため、php内で、Javascriptでリンクし、画面表示とCSV出力の部分だけを二重化するだけで済むのではないかと思いたちました。
呼出先のスクリプトにパラメタを渡したいのですが、下記のようにPOSTでやっても、location.hrefでGET渡しにしてもうまくいきません。
javascriptが実行されず無視された状態で、phpの以降の行が実行されてしまいます。
パラメタの無い場合は、location.href でリンクさせることは出来ており、出来上がったソースを見ても、問題は無いように見えるのですが、パラメタとして渡す文字の内容に問題があるのでしょうか?
-----------
★呼出元 [db_out.php]
(前略) エラーチェック処理 SQL文生成処理
<?php
$sql="select * from mylib.mydata where myrows='%リベート%' and *********";
if ($_POST['csv'] == 1){
?>
<script type="text/javascript">
// location.href = "./db_out2.php?parm=<?php echo $sql; ?>";
var frm = document.createElement('form');
document.body.appendChild(frm);
var inp = document.createElement('input');
inp.setAttribute('type','hidden');
inp.setAttribute('name','parm');
inp.setAttribute('value',"<?php echo $sql; ?>");
frm.appendChild(input);
frm.setAttribute('action','./db_out2.php');
frm.setAttribute('method','post');
frm.submit();
</script>
<?php
(後略)画面表示処理
-----------
☆呼出先 [db_out2.php]
<?php
$sql = $_POST['parm'];
$down_file = date('Ymd').'.csv';
$rst = odbc_exec($cn,$sql) or die("SQLエラー\n".$sql);
$cnt = odbc_num_rows($rst);
while(odbc_fetch_row($rst)){
$i = 1;
for ($i=1; $i<=odbc_num_fields($rst); $i++) {
if ($i == 1) { $csv_data.= ","; }
$csv_data.= odbc_result($rst,$i);
}
$csv_data.= "\n";
}
}
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename={$down_file}");
header("Content-Type: text/csv; charset=Shift_JIS ");
// データの出力
echo $csv_data;
odbc_close($cn);
?>
-----------
どうぞよろしくお願い申し上げます。
No.1ベストアンサー
- 回答日時:
いまいち何をしたいかわかりませんが
<?PHP
$sql="select * from mylib.mydata where myrows='%リベート%' and *********";
$href = "./db_out2.php?parm=".$sql;
?>
だとしたら明らかにパラメータへ渡す値が間違っていますよね?
たとえば
urlencode($sql)とかrawurlencode($sql)しないとURLのルールから逸脱してます。
で$sqlを別のページに渡して実行するってセキュリティを完全に無視してますがホント大丈夫?
ダメ出しを頂きまして有難うございます。
本来ならば、SQLを渡すつもりも無かったのですが、SQL自体をパラメタファイルから受け取って変数値に画面から入れた値を代入して生成して、という処理を行っているため、その部分を一元化したく、イントラ限定という前提つきでせめてPOST渡しで行おうとしたのですが....それ以前の知識不足でした。
でも、include化すれば済むようなことかもしれませんね。
アドバイス感謝致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ImageCreate関数が undefined f...
-
PHPのif文でその処理を途中で抜...
-
データ送信をボタンを押さずに...
-
ファイルの更新日時でのソート
-
インクルードした部分が表示さ...
-
onedrive にexcelファイルをア...
-
.htaccessにphp_valueが使用できな
-
「クラス関数」「メンバ関数」...
-
file_get_contentsでcss読み込み
-
#!/usr/local/bin/phpはどこに...
-
PEARコマンドが使えない・・・
-
PHPExcel処理速度が遅い
-
.phpのファイルを開けない!
-
prototype.jsのAjax.Request
-
php,mysqlにて画像パス保存/表...
-
SELECTの値を保持する
-
xamppを使う場合のphpファイル...
-
phpでのメール転送(添付ファイ...
-
asp.netのクラスについて
-
ファイル一覧を表示しその画面...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ImageCreate関数が undefined f...
-
マルチバイト関数
-
データベースへの接続について
-
Fatal error: マルチバイト文字...
-
includeでファイルが呼び出せない…
-
仮想フレームバッファXvfb上でf...
-
php5のフォーム
-
PHP PCアクセス制限
-
POSTした値を、別ページにもPOS...
-
marty3のvariableFilter
-
PHPとAPACHEのエラー「Warning:...
-
メール送信
-
UTF-8でsetcookieを使うには
-
たまに$_REQUESTの値が消える
-
php.iniの設定の仕方
-
sql文について質問です。エラー...
-
smartyについて
-
値の受け渡しが出来ない。
-
Pear::QuickFormの代わりにな...
-
PHP認証がProxy越しだと通らな...
おすすめ情報
urlencode($sql)でエンコード後にPOSTして、受け取った後にurldecode($sql)でデコードしたところ、なんとか動作しました。
ただし、途中で画面表示中に途中でCSV出力をしても、元の画面がhtmlとして中途半端になってしまうためか、CSSで定義した内容が反映されないまま残ってしまい、不細工な出来具合になってしまいました。
上記を補足すると、元の画面でCSSを使って表示しているボタンがあるのですが、
<style type="text/css"> CSSの定義
<a href="...." class='mnu'>戻る</a> ボタンの表示
<script type="text/javascript"> CSVを出力するためにPOSTするスクリプト
の順番で書いているのに、スクリプトが動いた時、ボタンを装飾するCSSが効いていない状態になるのです。(IEだと出る現象。FFは問題なし)
スクリプトを 下記のように囲ってみても、CSSだけは無視されます。質問の本題と外れてしまっていますが、これは致し方ないものでしょうか?
window.onload = function(){ xxxxxxx; }