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

PHP、JavaScript、共に初心者なので、的を得ていない質問かもしれませんが、是非ともご教授お願い致します。

やりたいこととしては以下の内容で、複数ではなく、1つの別ウィンドウしか表示されずに困っております。
(1)元のウィンドウで、入力や選択を行った後、結果ボタンを押し、"その都度"別ウィンドウを
 表示させる。(つまり複数別ウィンドウを表示させたい)
 (元のページはそのまま残す)
(2)元ウィンドウの入力値をPOSTデータとして、別ウィンドウに受け渡す。
(3)別ウィンドウでも、常に同一のロジックを必要とするため、都度開く別ウィンドウを同一PHPファイルとしたい。

上記で使用しているソース(主要な部分抜粋)は以下の通りです。
【元ウィンドウ】
<script type="text/javascript">
<!--
function newsubmit() {
window.open("about:blank", "kekka", "WindowStyle");
mainform=top.window.document.motoform;
mainform.action = "kekka.php";
mainform.target = "kekka";
mainform.submit();
}
// -->
</script>

<form name="motoform" method="POST" action="<?= $_SERVER['PHP_SELF'] ?>">
・・・
<input type="button" value="結果" name="kekka" onClick="newsubmit();">
・・・
<select name="no" onchange="this.options[this.selectedIndex].value">
<option value="100">100</option>
<option value="200">200</option>
<option value="300" selected>300</option>
<option value="400">400</option>
<option value="500">500</option>
</select>
・・・
</form>

【別ウィンドウ(kekka.php)】
<form name="subform" method="POST" action="<?= $_SERVER['PHP_SELF'] ?>">
・・・
<?php
print "no: " .$_POST['no']. "<br>\n";
?>
・・・
</form>

POSTデータの受渡しは、出来ています。
別ウィンドウのURLを、001.html、002.html、003.html・・・のように、別々のHTMLにしようとも考えましたが、
それぞれの別ウィンドウでどうしてもPHPの同一ロジックを入れたいため、同一のkekka.phpとしています。
それ故に、既に同じウィンドウ(kekka.php)が表示されているので、別ウィンドウが上書きされてしまい、
1つの別ウィンドウしか表示されません。

同じPHPを使用して、複数、別ウィンドウを表示させる方法、もしくは、別案などございましたら、
ご教授願えますでしょうか。お願い致します。

A 回答 (3件)

#1です。


追記ですが、submitと同時に元phpをjavascriptでリロードでもいけるっちゃあいけますね(笑)
javascriptで時間生成の方法を取るのであれば、特に正確な時間を出す必要はないので、
function newsubmit(){
ymd = new Date();
yy = ymd.getYear();
mm = ymd.getMonth();
dd = ymd.getDate();
ho = ymd.getHours();
mi = ymd.getMinutes();
se = ymd.getSeconds();
wname = yy + mm + dd + ho + mi + se;
window.open("kekka.php",wname);
mainform=top.window.document.motoform;
mainform.method = "POST";
mainform.action = "kekka.php";
mainform.target = wname;
mainform.submit();
}
こんな感じで大雑把でいいと思います。
    • good
    • 0
この回答へのお礼

どうもありがとうございます。
サンプルを参考に、早速試して、思うように動作致しました。

このような初心者のために、丁寧に教えて頂き、感謝致しております。
それとともに、自身の勉強不足を実感致しました。。。

本当にありがとうござました。

お礼日時:2007/05/11 11:29

#1です。


>ただ、元ウィンドウを更新(F5)しないと、やはり同一別ウィンドウとなってしまいます。
現在の書き方でtime()の値をウインドウ名にしても、htmlが生成される際にphpが取得する値なので、一旦作られたらウインドウ名は固定でつけたのと同じになってしまいます。
F5を押せばtime()が生成しなおされてウインドウ名が変わるので別ウインドウになるということです。
ですので一意にする値の作り方を変えた方が良いと思います。
kekka.phpに渡したい値で一意になるような値があればその値をウインドウ名にするのがベターかもしれないですね。
もしくはonClickでは特に引数を渡さずにjavascript側で時間を取得・生成してそれをウインドウ名にするのならいけそうなきがします。
    • good
    • 0

submitする際にIDとか連番とか何かユニークになる値をjavascriptに渡してやって、


>window.open("about:blank", "kekka", "WindowStyle");
の"kekka"というwindow名の部分をphpから受け取った値にしてやればいけるのではないでしょうか。
多分現状は固定のwindow名(kekka)になっているから上書きされてしまうんだと思います。
    • good
    • 0
この回答へのお礼

アドバイス、どうもありがとうございます。
参考にさせて頂き、早速試してみました。
ただ、元ウィンドウを更新(F5)しないと、やはり同一別ウィンドウとなってしまいます。
(更新すると、複数別ウィンドウが表示されます。)
キャッシュか何かが原因なのでしょうか?

変更したソースは以下の通りです。
【元ウィンドウ】
・・・
function newsubmit(id) {
window.open("about:blank", id, "WindowStyle");
mainform=top.window.document.motoform;
mainform.action = "kekka.php";
mainform.target = id;
mainform.submit();
}
・・・
<input type="button" value="結果" name="kekka" onClick="newsubmit(<?= (string)time() ?>);">
・・・

重ね重ね申し訳ございませんが、ヒントを頂けると幸いです。

お礼日時:2007/05/11 00:13

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