スレッド表示 | フラット表示〕 全トピック 920 件中 395 番目 次≫ ≪前

フレーム間のsubmitボタンの判定

created: 2005-08-02 01:02 | modified: 2005-08-09 00:13 | reply: 5

[2425] フレーム間のsubmitボタンの判定

user: トリニティ | created: 2005-08-02 01:02
こんばんわ。
質問させていただきます。

いま、フレームを利用したHPを作成しているのですが、
左フレームの中にあるボタン(type = submit name =A
value = 1?5)と、右フレームにあるボタン
(type = submit name =B value = 1?10)
を連動できないかで迷っています。
具体的にいいますと、左フレームには同じタイプで
同じ名前が付いているボタンが5個あり(value は違う)
同じく右フレームにも同じ名前が付いているボタンが
10個あります(value は違う)。
右フレームと左フレームのボタンの名称は異なります。

何をやりたいかといいますと、Aのボタンを押して直後に
Bのボタンをおすと、データベース上のAのvalue値の
ある項目に、Bのボタンのvalue値が入るように
したいのです。例えば、Aの1を押した直後に、Bの10を
押したら、1-10というような関係付けをしたいのです。
これには、フレーム間を跨いで、ソレゾレA,Bのボタンを
押したかどうかという判定が必要になってくるのですが、
可能なのでしょうか?

文が長くなってしまい、申し訳ありませんが、
ご教授していただけないでしょうか?
reply: 2428 返信 編集 削除

[2428] Re. フレーム間のsubmitボタンの判定

user: ゆうじ | created: 2005-08-02 12:36
こんにちは。

2つのページ間で値を共有すると考えられますね。
こういう時はセッションを使ってみてください。

ページAで送信された値を $_SESSION['submit']['A']に保存。
ページBで送信された値を $_SESSION['submit']['B']に保存。

この値を参照すればボタンが押されたペアがわかるので
いずれかが空ならば再びボタンのページを、
ペアが出来ていればデータベースに問合せを、
といった処理分岐ができると思います。
Parent: 2425  reply: 2432 返信 編集 削除

[2432] ありがとうございます。

user: トリニティ | created: 2005-08-05 23:41
ゆうじさん、アリガトウございます。
セッション関数を使ってやってみたところ、
確かにフレーム間での変数の取り扱いができました。

しかし、ここで問題が・・・
たとえば、Aのページでボタンを押して、
$_SESSION['submit']['A']に保存します。
同じようにBのページでもボタンを押して
$_SESSION['submit']['A']に保存します。
この段階でBのページのPHPでiset関数を使って、
両方のセッション関数にデータが入ったら、DBを
更新するというコーディングを入れました。
たしかに、更新はされました。しかし、リロードするのは
Bのページだけで、Aのページにはリロードされないため、
更新は反映されないのです。これは、Aのページでイベントが
おこっていないためなのでしょうか?
Parent: 2428  reply: 2433 返信 編集 削除

[2433] 具体的コーディング

user: トリニティ | created: 2005-08-06 02:14
set2フレーム
<?php

if($result=mysql_query("UPDATE MEMBER SET NO = '$no' WHERE NAME = '$name'")){
parent.ptset1.location.reload();
}else{
print "失敗 コード=".mysql_errno()."<BR>";
exit;
}
?>


とやっております。

parent.set.location.reload();
とあるように、set2で更新処理がうまくいったら、
set1フレームでリロードをさせたいとおもっております。
Parent: 2432  reply: 2434 返信 編集 削除

[2434] target="_top"

user: ゆうじ | created: 2005-08-06 11:59
parent.ptset1.location.reload();

↑これは JavaScript でしょうか?
PHPはサーバーサイドなので残念ながら
このようにJavascriptを書いても動作しません。
PHPはサーバサイド、Javascriptはクライアントサイド、
という関係をお忘れなく。


さて、HTML の target属性 を使えば
思っていらっしゃる動作になると思いますよ。

処理結果がわかりやすいよう、
フレームをひとつ増やしたサンプルを書いてみました。

ポイントは、
formタグにページ全体を指し示す target="_top" を入れることと、
update.php で様々な処理後、最終的に frame.html に飛ばすこと。
これで常にページ全体がリロードされるようになります。


frame.html
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=euc-jp">
<title>フレーム間の値共有</title>
</head>
<frameset rows="20%,*">
<frameset cols="50%,*">
<frame src="a.php">
<frame src="b.php">
</frameset>
<frame src="c.php">
</frameset>
</html>

a.php
<?php
session_start();
?>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=euc-jp">
<title>左フレーム</title>
</head>
<body>
<h5>左フレーム</h5>
<form method="post" action="update.php" target="_top">
<input type="submit" name="a" value="1">
<input type="submit" name="a" value="2">
<input type="submit" name="a" value="3">
<input type="submit" name="a" value="4">
<input type="submit" name="a" value="5">
</form>
<p>
選択:<?php echo $_SESSION['submit']['a'] ?>
</p>
</body>
</html>

b.php
<?php
session_start();
?>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=euc-jp">
<title>右フレーム</title>
</head>
<body>
<h5>右フレーム</h5>
<form method="post" action="update.php" target="_top">
<input type="submit" name="b" value="1">
<input type="submit" name="b" value="2">
<input type="submit" name="b" value="3">
<input type="submit" name="b" value="4">
<input type="submit" name="b" value="5">
</form>
<p>
選択:<?php echo $_SESSION['submit']['b'] ?>
</p>
</body>
</html>

c.php
<?php
session_start();
?>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=euc-jp">
<title>メニュー選択</title>
</head>
<body>
<h5>メニュー選択結果</h5>
<p>
選択: <?php echo $_SESSION['submit']['a'], ' - ', $_SESSION['submit']['b'] ?>
</p>
</body>
</html>

update.php
<?php
session_start();

if ($_POST['a']) {
$_SESSION['submit']['a'] = $_POST['a'];
}
if ($_POST['b']) {
$_SESSION['submit']['b'] = $_POST['b'];
}

if ($_SESSION['submit']['a'] && $_SESSION['submit']['b']) {
// ここにデータ更新処理
}

header('Location: frame.html');
exit();
?>
Parent: 2433  reply: 2437 返信 編集 削除

[2437] ありがとうございました

user: トリニティ | created: 2005-08-09 00:13
具体的なサンプルまでつけてくださり、ありがとうございます。
サーバーサイドとクライアントサイドの関係を
もう少し勉強してみます。

ご丁寧にありがとうございました。
Parent: 2434  返信 編集 削除
スレッド表示 | フラット表示〕 全トピック 920 件中 395 番目 次≫ ≪前
ページの一番上へ
Googleグックマークに登録 Yahooグックマークに登録 livedoorクリップに登録 @niftyクリップに登録 はてなブックマークに登録 deliciousに登録 Buzzurlに登録 FC2ブックマークに登録
最近更新された掲示板トピックス
管理人Blog
Yahoo Search

最近更新したNote
PHPマニュアル
今日のブックマーク
PHPマニュアル関数検索
関数名を入力し検索ボタンをクリック↑