プロが教えるわが家の防犯対策術!

PHPとJavaScriptの連携をしたいと思いましたが、下記が分からなかったので、アドバイスいただける方がいらっしゃいましたら、ご教示の程よろしくお願いします。

1. 下記の親ウィンドウで子ウィンドウを開く後、テキストエリアに文字を入力し、値をセットボタンを押すと、「親ウィンドウ」の「値が渡せます」には値が渡せますが、「値が渡せません」には値が渡せません。
違いはnameをtext00からdata[text02]に変更したのみとなります。

2. 下記のソースでは、子ウィンドウのテキストエリアに入力した内容をそのまま渡してますが、子ウィンドウのテキストエリアの情報を基に、PHPでデータベースを検索し、ヒットしたものを親ウィンドウに渡したいと思います。
下記のソースを例にすると、「値をセット」ボタンを押した後、テキストエリアの値を子ウィンドウのSELECT文のidに設定し、取得した$tmpの内容を親ウィンドウに渡したいと思います。
なお、記載のSQL文はシンプルですが、実際には複数のフィールドの値を取り、idの値も複数あります(下記のデータベースを例にすると、idに1と2を渡した際、親ウィンドウのテキストエリアに「あいうえお かきくけこ」と表示させ、idの値を隠し項目でもっていたいと思います)。

3. 上記2で親ウィンドウにデータベースの値を渡した後、子ウィンドウを開くクリック時、子ウィンドウのテキストエリアに渡したidの値を表示したいと思います。

【index.html(親ウィンドウ)】
<script type="text/javascript">
<!--
function window_open() {
window.open('sub.php',null,'width=640, height=480, scrollbars=yes')
};
//-->
</script>
</head>
<body>
<form action="index.php" method="post" name="form00" id="form00">
<a onclick="window_open()" href="javascript:void(0)">子ウィンドウを開く</a>
<br />
値が渡せます
<input type="text" name="text00" value="" readonly="readonly" />
<br />
値が渡せません
<input type="text" name="data[text02]" value="" readonly="readonly" />
</form>
</body>

【sub.php(子ウィンドウ)】
<script type="text/javascript">
<!--
function Set() {
window.opener.document.form00.text00.value=document.form01.text01.value;
window.opener.document.form00.data[text02].value=document.form01.text01.value;
window.close();
}
//-->
</script>
</head>
<body>
<form action="index.php" method="post" name="form01" id="form01">
<input type="text" name="text01" />
<input type="button" onclick="Set()" value="値をセット" />
</form>

<?php
/*
$link=mysql_connect('localhost', 'データベースユーザ名', 'データベースパスワード名');
mysql_select_db('データベース名', $link);
$query=mysql_query("SELECT nm_master FROM master_db WHERE id=2", $link);
$tmp="";
while ($row=mysql_fetch_array($query)) {
$tmp .= $row["nm_master"];
}
echo $tmp;

mysql_close($link);
*/
?>
</body>

【データベース:master_db】
フィールド名:(`id`, `nm_master`)
(1, 'あいうえお'),
(2, 'かきくけこ');

以上、よろしくお願いします。

A 回答 (2件)

data[text00]を、扱いたいときは、



window.opener.document.form00.elements['data[text02]'].value=document.form01.text01.value;

ですね。
formの要素は、elementsの中に、名前が格納されてます。
text00の場合でも、
form.elements['text00']
で参照出来ます。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

質問1~3のうち、質問1についてはご教示いただいた方法で意図した動作となりました。
このたびはどうもありがとうございました。

以上、よろしくお願いします。

お礼日時:2011/01/13 23:37

2,3の質問に関してですが、



いくつか方法はあると思いますが、
mysqlから値を取得するときに、idの属性を全部hiddenタグをつくっておく
<form>
<?php
while($row = mysql_fetch_array($query)){

echo sprintf('<input type="hidden" name="item_id" value="%s">', $row['id']);
echo $row['nm_master'] . '<br />';

}
</form><!--このようにformでくくって。-->

このようにして、hiddenタグで値を書いておけばとりあえずhiddenの中身をjavascriptからでも取得しやすい形になると思います。

後は、Set関数で、
<script>
function Set(){

var item_id = document.forms[0].elements['item_id'];

if(item_id.length !== undefined){

var ids = new Array();
for(var i=0; i<item_id.length; i++){

ids.push(item_id[i].value);

}

//とかやってやれば
//変数idsに配列として、全部のidが入っているはず。
//後はうまいことやって親windowに渡してやれば良いのでは。(例えばカンマ区切りにして文字列にしちゃうとか)


}else{ //一個しかない場合はlengthが取れない。

item_id.value //で値がとれるので、親windowに渡す。

}

}
</script>

といった感じで、実質、このご質問はjavascriptの話になるので、
この方法でこの後の処理に関してピンとこなかったら、javascriptのスレッドの方で
ご質問してみてはいかがでしょう。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

一度ご回答いただいた内容を検討し、分からないようであればjavascriptの方で質問するようにします。
このたびはどうもありがとうございました。

以上、よろしくお願いします。

お礼日時:2011/01/17 18:09

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