javascript、php、mysql の連携について

[新着] Webテンプレートを仮オープンしました



0   名前: あさ : 2007/07/30(月) 01:21  ID:T8rfYYg2 sub-Cl
【何をしたいのか】
javascript、php、mysql の連携で
まず
親から子に変数を渡し、その変数を使いphpにてmysqlで検索。
子の検索内容から選択し親に返す。
親から子への変数が文字列になり、php、mysqlで検索できません。
初心者ですのでつたないコードですがご勘弁ください。

親(3.php)


<form name="f1">
<select name=a>
<option></option>
<option value=1>1</option>
<option value=2>2</option>
<option value=3>3</option>
<option value=4>4</option>
</select>
<input type="button" value="開く" onclick="func()">
<input type="text" name="abc">
</form>

<script language="javascript">
function func() {
var args = new Array();
args[0] = window;
args[1] = document.f1.a.value;
x=args[1];
x = new Number(x);
var result = showModalDialog("4.php ",window,
"resizable:no; status:1; scroll:1;dialogHeight:400px;dialogWidth:500px");
if(result){
document.f1.abc.value = result;
}else{
document.f1.abc.value = "";
}
}
</script>

子(4.php)

<script language="Javascript">
<!--
function onChoice(value){
if(value == null){
window.returnValue = false;
}else{
window.returnValue = value;
}
window.close();
}
//-->
</script>

<?php
$a = ("
<script language=\"javascript\">
x = parseInt(\"\"+window.dialogArguments.x+\"\")
document.write(x)
</script>");

print("<form><table border=1>");

include("../modules/dblogin.php");

//以下sql文
$res = mysql_query("
SELECT t.tkryaku, t.tkID
FROM mtokui t
where t.syozokuID = $a
order by tkID;",$MyLink);

while($row = mysql_fetch_array($res)) {
print("<tr><td>");
print($row["tkryaku"]);
print("</td><td><input type=button value=" . $row["tkID"] . $row["tkryaku"] . "
onClick=\"onChoice(this.value)\">");
print("</a></td></tr>");
}


mysql_free_result($res);
mysql_close($MyLink);

?>


javascript内で数値に変換したり、 phpで変換したりしましたが値が0になり困っております。
また、他の方法(post等)でより良い方法がございましたらご指導いただければと思います。
ただ、「モーダルダイアログ」で実装したいのでよろしくお願いいたします。

1   名前: 匿名 : 2007/07/30(月) 01:21  ID:dBNgdka7 sub-t1
すいません
いまいち伝わってないのにコメントしちゃいますが



1.親から子への変数が文字列はどの時点のお話でしょうか?

2.<?php
$a = ("
<script language=\"javascript\">
x = parseInt(\"\"+window.dialogArguments.x+\"\")
document.write(x)
</script>");
この部分なんですが$aは文字列ですけど、それは大丈夫なんですか?

3.未確認ですけど、showModalDialog("4.php "・・・の時クエリをつけて開いてあげれば子の方で値が取得できるんじゃないですかね?「4.php?id=5」みたいな感じで?

4.ちなみになんですが
IE以外だと動きませんがそれは特に大丈夫なんですか?



すいません未検証ですが
どうでしょう?

2   名前: 匿名 : 2007/07/30(月) 01:21  ID:dBNgdka7 sub-t1
追記。。。

基本的に
サーバー側でPHPを実行してる時に
親ウインドウのJavaScriptの変数の値は参照できないと思うんですよね。

という事はSQLで親ウインドウの変数を元に検索は出来ない。

もし仮にSQLでの検索に親ウインドウの入力の値を使うとしたら
PHPにPOSTなりGETなりでデータを与えてやらにゃならん。

で、漸くうまい事処理されたとして
(すいませんテーブルの生成あたりはチェックしてませんので仮定です)
クライアントサイドにPHPが生成したHTMLドキュメントが届く。

JavaScriptが実行できるのは一番最後ですかね。。。

3   名前: 匿名 : 2007/07/30(月) 01:21  ID:dBNgdka7 sub-t1
さらに追記。。

なので親ウインドウでの変数(x)を
クエリにして、くっつけてみては?

4   名前: あさ : 2007/07/30(月) 01:21  ID:T8rfYYg2 sub-Cl
ご返信ありがとうございました。

参考にさせていただき
function func() {
var args = new Array();
args[0] = window;
args[1] = document.f1.a.value;
x=args[1];
 x = new Number(x);
var url = "4.php?a="+x;
var result = showModalDialog(url,window,
"resizable:no; status:1; scroll:1;dialogHeight:400px;dialogWidth:500px");

でいけました。
社内のシステムですのでIEのみで可能です。
本当にありがとうございました。
また行き詰ったら相談させてください。

5   名前: あさ : 2007/07/30(月) 01:21  ID:T8rfYYg2 sub-Cl
すみません。よろしければ続けてご指導お願いいたします。

上記のように「showModalDialog」での実装はできました。
この子に検索機能をつけたのですが新しいウィンドウが立ち上がります。
調べてみたのですが解決法がわからず苦戦しています。

さらに
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=18764&forum=12&4
上記に仕様なので無理とかありますがどうなのでしょうか?
よろしくお願いいたします。

以下子ウィンドウのコードです

<?php

if(!isset($_REQUEST["a"])){$_REQUEST["a"]="";}
if(!isset($_REQUEST["ken"])){$_REQUEST["ken"]="";}


$a = $_REQUEST["a"];
$b = $_REQUEST["ken"];

?>
<script language="Javascript">
<!--
function onChoice(value){
if(value == null){
window.returnValue = false;
}else{
window.returnValue = value;
}
window.close();
}
//-->
</script>


<center>
<table>
<tr>
<td>
<FORM action="<?php print($_SERVER['PHP_SELF']); ?>" method=get>
<font size=2><b> かな名検索:</b></font>
<input type="text" name="ken" size="12" id="e1">
<BUTTON type="submit" style="width:50px;height:20px">
<font size=2>検索</font>
</button>
<button type="reset" style="width:50px;height:20px">
<font size=2>クリア</font>
</button>
</td></form>
</tr>
</table>

<?php

include("../modules/dblogin.php");
$syozoku = $_COOKIE["syozoku"];


if($a != "")
{
print("<form><table border=1>");

$res = mysql_query("
SELECT t.tkryaku, t.tkID    ・・・・以下SQLのコードです。

よろしくお願いいたします。

6   名前: 匿名 : 2007/07/30(月) 01:21  ID:dBNgdka7 sub-t1
こんばんは

<a href="">という形でリンクを貼ると
どうしても別のウインドウが開くようです
(テストしてみた結果なので何か裏技はあるかもしれません!?)

なので
JavaScriptの非同期通信を使用し
PHPにデーターを送信。
それをJavaScriptで
ダイアログ内のウインドウに反映するというのは如何でしょうか?

一応テストしましたが
ダイアログ内からも
バックグラウンドで通信は行えました。

どうでしょ?

7   名前: 匿名 : 2007/07/30(月) 01:21  ID:dBNgdka7 sub-t1
>6
すいません
<a href="">じゃなく
<FORM action="<?php print($_SERVER['PHP_SELF']); ?>" method=get>
ですね。。。


あの、、失礼なんですが
タグは小文字で統一した方が宜しいかと・・・
あと属性は " でくくった方が宜しいと・・・

8   名前: 匿名 : 2007/07/30(月) 01:21  ID:dBNgdka7 sub-t1
>7
すいません。
属性値ですね。

9   名前: あさ : 2007/07/30(月) 01:21  ID:VQ.cBlL/ sub-2Y
ご返信ありがとうございます。

>JavaScriptの非同期通信を使用し
PHPにデーターを送信。
それをJavaScriptで
ダイアログ内のウインドウに反映する

この方法に非常に興味あります。
今の自分には敷居が高いようですががんばって理解したいと思います。

よろしければ参考にさせていただきたいのでコードを教えていただけませんでしょうか?
その他のご指摘も真摯にうけとめさせていただきます。
よろしくお願いいたします。

10   名前: 匿名 : 2007/07/30(月) 01:21  ID:dBNgdka7 sub-t1
こんばんは

う〜む、、、
一応書いてみましたけど
セキュリティホールには十分注意して利用してくださいね。

var methodType = "GET";//ここにはPOSTかGETを入れましょう
var requestFileName = "";/*ここはリクエストするファイルのパスを!(例えば「example/test/search.php?id=5」とか)*/
function createHttpRequest(){/*XMLHttpRequest生成関数とブラウザごとの振り分け*/
if(window.XMLHttpRequest){return new XMLHttpRequest();}
else{
if(window.ActiveXObject){//IE6以前用
try{return new ActiveXObject("Msxml2.XMLHTTP");}
catch(e){
try{return new ActiveXObject("Microsoft.XMLHTTP")}
catch(e2){return null;}
}
}
else{return null;}
}
}
function test(){
var request = createHttpRequest();//XMLHttpRequestオブジェクトの生成
request.open(methodType ,requestFileName );
request.setRequestHeader("content-type","application/x-www-form-urlencoded; charset=UTF-8");//Ajax用に適切なヘッダーを設定
request.send("");//POSTの時はココにデータ
request.onreadystatechange = function(){
if(request.readyState == 4 && request.status == 200){
var txt = request.responseText;//今回はXMLでなくテキストで受信
document.getElementById("area").innerHTML = txt;/*任意の部分に受信データを挿入、この時、タグが含まれていれば反映される*/
}
}
}


ちょっと説明がいい加減ですが
こんな感じです。
このスクリプトをPHPのファイルに埋め込むなり
HTMLに埋め込むなりして使ってみては?


GETにして
PHPのファイル名にクエリをつけてあげれば
いいんじゃないですかね。。。
一応それでテストはしてみました。
下記、動きの見本とまでは言えませんが一応参考にはなるかな?
http://justoneplanet.sakura.ne.jp/wordpress/2007/07/29/ajax%e3%81%a3%e3%81%a6%e4%bd%95%ef%bc%9f%e2%80%a6%e3%81%a8%e3%81%84%e3%81%86%e4%ba%ba%e3%81%ae%e7%82%ba%e3%81%ae%e3%82%b5%e3%83%b3%e3%83%97%e3%83%ab/

社内システムとはいえ
SQLインジェクションには注意した方がイイと思います。

失礼ながら、
あとはAjaxの本を何か読んだ方がイイかもしれません。

あとはこの下に様々な人がくれるアドバイスも参考にどうぞ。



ではまた。。。

11   名前: 匿名 : 2007/07/30(月) 01:21  ID:dBNgdka7 sub-t1
>追記

GETの場合、
IEのキャッシュがキツイみたいだから
1.POSTを使う
2.クエリに日時データをはさむ
とかしてみたらイイと思います。

上記、URLをIEで見た方・・・すいません。。。
現在は修正してます。。。

一覧へ戻る