プロが教える店舗&オフィスのセキュリティ対策術

tempフォルダにtest.txtファイルが存在すれば、
fileフォルダaaa.txtファイル名をbbb.txtファイルに変更という流れです。

変更ボタンをクリックすると、値を$testdataに渡し、ファイル有無をチェックし、ある場合は変数をjavascriptに渡すしますphpの所は問題ありませんが、

javascript処理の所がどうしてもうまくいきません。変数渡しができません。

ネット上でいろいろ調べてみましたがすべてダメでした。
ぜひ、よろしくお願いいたします。
下記はそのコードです。

ファイル名test.php

<?
$testdata = $_GET["testdata"];

$filename = "C:\\xampp\\htdocs\\test\\file\\temp\\".$testdata;
if(file_exists($filename)){//ある場合、変数をjavascriptに渡す
$testdata_script = $testdata;
}//ここまでは問題ありません。
?>
<!-- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="Content-Script-Type" content="text/javascript">

<title>テスト</title>
<script type="text/javascript">

<!--
function test(file) {
      obj = new ActiveXObject('Scripting.FileSystemObject');
var name = '<?php echo $testdata_script ;?>';
alert(name);

strMoveFrom = 'C:\\xampp\\htdocs\\test\\file\\aaa.txt';
strMoveTo = 'C:\\xampp\\htdocs\\test\\file\\bbb.txt';
obj.MoveFile(strMoveFrom ,strMoveTo );
obj= null

}

//-->
</script>

...省略


<form action=test.php method=get accept-charset=UTF-8>
<input type=submit value=変更 onclick=test('file')>
<input type=hidden name=testdata value="test.txt">

A 回答 (3件)

質問のコード内で 命題「PHPからJavaScriptへのデータ渡し」は自己解決しているはずです。



PHP:
  $testdata_script = $testdata;

JavaScript: (SCRIPT要素内)
  var name = '<?php echo $testdata_script; ?>';
  alert ( name ); // PHP側のifを無くすと警告が出ますよね。



さて、暗示された命題2「ファイルのコピー」についてですが、
IEでしか利用できない ActiveXObject('Scripting.FileSystemObject'); を使う理由が不明です。

JavaScript内の変数 strMoveFrom、strMoveTo が共にXAMMPPの公開フォルダ以下にあるファイルを示していることからコピー対象ファイルがサーバー上のファイルと考えられます。
もし、コピー対象がサーバー上のファイルならPHPでコピー処理を実装したほうが、クロスブラウザに対応できますよ。

現状:
  PHPフォーム表示
  ↓
  フォームをクリック
    (JScriptのActiveXでコピー処理 = IEに限定され、クライアントのファイル操作になる)
  ↓
  PHPプログラムに値が渡される&PHPフォーム再表示

提案:
  PHPフォーム表示
  ↓
  フォームをクリック
  ↓
  PHPプログラムに値が渡され、ファイル処理&PHPフォーム再表示


いずれの方法もフォームのPHPフォームを再表示していますので、別段、JavaScriptを利用する必要はありません。


更に追加質問されていたフォームのボタンに関する挙動についてですが、
INPUT[type=button] はクリックしたときに onClickイベントしか動作しません。
INPUT[type=submit] でうまく動作したのは、onClickイベントを実行直後、FORMのデータ送信イベント(onSubmitイベント)が自動実行され、
この後、action属性に指定したURLに値を渡したからです。

提案する方法でページ遷移(リロード)が納得できない場合はAJAXの利用が考えられますが、「まずはフォーム周りの知識、CGIというサーバー-クライアント間のデータのやり取りをしっかりと身につけてから」の目標にしましょう。
    • good
    • 0

> button , submit


buttonはそのままではただの飾りボタンでしかないわ。
onClick等でJavaScriptを実行して初めて意味のあるボタンになるの。
testの最後にdocument.forms[0].submit()のようにすれば
test.phpに飛ばせるわよ。


それより
たぶん、あなたは大きな勘違いをしているわ。

PHPはその画面が表示される前に実行されるの。
JavaScriptはその画面が表示された後に実行されるの。

つまり、
JavaScriptより後ろにPHPを実行しようという前提が
まず間違っているのよ。


あなたのを無理やり利用しようとするなら
実行の際test.phpを実行せずに
test.php?testdata=test.txt
を実行し、submitをbuttonに変えればいいわ。
    • good
    • 0

JavaScriptのtest()が実行されるタイミングがわけわからないわ。


どうしてsubmitボタンで実行しているの?
私なら変更ボタンをbuttonにしてtestの最後でsubmitさせるわね。

このphpの動きを説明すると

最初にtest.phpを呼び出す
→$testdataは空
次に変更ボタンをクリック
→alertが出るが、表示は空っぽ
→alertをOKするとtest.phpが呼び出される
→$testdataにtest.txtが入る。
次に変更ボタンをクリック
→alertが出るが、表示はtest.txt
→alertをOKするとtest.phpが呼び出される
→obj.MoveFileが実行される
→$testdataにtest.txtが入る。

こうなるはずよ。

この回答への補足

askaaska様
ご回答ありがとうございます。
まず、buttonではなく、submitにしたわけですが、buttonの場合だと「変更」ボタンを押しても、test.txtを 変数$testdataに渡すことができませんでした。submitなら大丈夫でした。
ここで新たな質問ですが、buttonはなぜダメでしょうか?すみません。よろしくお願いします。

>JavaScriptのtest()が実行されるタイミングがわけわからないわ

実行されるタイミングは、、、、

このphp部分
<?
$testdata = $_GET["testdata"];

$filename = "C:\\xampp\\htdocs\\test\\file\\temp\\".$testdata;
if(file_exists($filename)){//ある場合、変数をjavascriptに渡す
$testdata_script = $testdata;
}
?>
が実行された後ですね、、、
実行され、変数$testdata_scriptに値を持たせたあと、この値をjavascriptに渡す。という流れですが、、、

すみませんが、よろしくお願いします。

補足日時:2011/01/20 11:49
    • good
    • 0

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