• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:window.openerでセットした値でCGIの動作が変わってしまいます。)

window.openerでセットした値でCGIの動作が変わってしまう

このQ&Aのポイント
  • webメーラーをphpで作成中ですが、住所録から選択したメールアドレスをTo欄にセットする際に、エラーが発生してしまいます。
  • 手入力や親ウィンドウからの代入では問題なく動作しますが、子ウィンドウからの固定値の代入だけがエラーになります。
  • 現在の環境はWindows Vistaのクライアント、IE 7 / Firefoxのブラウザ、Windows 2003のサーバー、PHP 5 / Smarty / PEARです。

質問者が選んだベストアンサー

  • ベストアンサー
  • steel_gray
  • ベストアンサー率66% (1052/1578)
回答No.5

連投失礼。 サーバへのpostにAjaxとか使ってるなら、Firefoxにfirebug入れてモニタリングするのもいいかもしれない? (私はProxomitron使ってるけど・・・Vistaで使えるかわからない)

qscft
質問者

お礼

ありがとうございます。現在、Ajaxは使用していません。 ただ単に子ウィンドウから window.opener.document.form1.to.value = 値; でセットしたtextboxの値を親ウインドウの決定ボタンを押したときにPOSTしているだけなんですが・・・ 取得した値をtrim()に通しているので、もしnullコードなどのコードが入っていればサーバー側では取れていると思います。

qscft
質問者

補足

全体お礼を書くところがないのでこちらから失礼します。 申し訳ありませんでした。大まかですが、原因が判明しました。 子ウィンドウを開いただけでNGとなってしまうようですので、javascriptは悪くないようです。 すべてのウィンドウのオープン時にセッションハイジャック対策用にセッションIDの再構築を行っているのですが、そのあたりが原因かなと推測できました。(send直前に値確認をして大丈夫なのになぜ?という問題は残りますが) 以降はphp側の問題(たぶんプログラムバグ)となりますので、こちらの質問はcloseさせていただきます。 皆様、ご助力いただき本当にありがとうございました。

その他の回答 (4)

  • steel_gray
  • ベストアンサー率66% (1052/1578)
回答No.4

送信データの確認方法ですが、 なるべく早い段階のデータを捕まえてOKの場合とNGの場合を比べたほうがいいような気がする。 ダンプとかじゃなく単純に送信formのmethodをpostからgetに変更してみれば、ブラウザが送信しているデータはURL欄で確認できますね。(multipartじゃなければ)

  • zxcv0000
  • ベストアンサー率56% (111/196)
回答No.3

form1.to では無く別のパラメーターを、Mail の To: に入れてるとか、JavaScriptとは無関係な所でミスってたりしませんか?

qscft
質問者

お礼

回答が遅くなり申し訳ありません。 メール送信時(サーバー側)のsendへの引渡しToをvar_dump調べてみたところ、手入力と子ウィンドウでセットしたToの値(メールアドレス)に文字コードや値に違いがなかったので、じゃあ、JSのほうかなと推測しました。

  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.2

> なにか見えない値がくっついて入ってしまうのでしょうか それを確認できるのはあなただけよ。 私の手元にはそのプログラムはないもの。 ちなみに >前後を[]で囲むとよりいいわ はphpでやった方がいいわ。 htmlに出さずにファイルに出力するようにするとなおよし。

qscft
質問者

お礼

>はphpでやった方がいいわ。 >htmlに出さずにファイルに出力するようにするとなおよし。 バイナリ出力でファイル書き出しをしてみました。 OK時、NG時ともに同じバイト数が出力されています。 テキストエディタでは同じ内容でしたが、ダンプ比較できるようなフリーのソフトを探して比較してみます。

  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.1

子ウィンドウから入力しようと 直接入力しようと それはクライアント側の処理よね。 サーバには一切関係ないわ。 となると、 単純に送信データか もしくは 子ウィンドウを表示する際に何かやっている としか思えないわ。 メールアドレスのドメイン部がおかしいんじゃないかしらと 勝手に想像。 とりあえず、 ・Toへの直接入力 ・子ウィンドウからメールアドレス固定でToへ代入 の2つで var_dumpじゃなく、 もっと直接的に受け取ったメールアドレスを出力して確認してみるのね。 前後を[]で囲むとよりいいわ。 たぶん余計な何かがついてたりするんじゃないかしら。

qscft
質問者

お礼

ご回答ありがとうございます。 >もっと直接的に受け取ったメールアドレスを出力して確認してみるのね。 >前後を[]で囲むとよりいいわ。 以下のJSを書いて試してみました。 子ウィンドウ: function emailSet(val) { var owner = window.opener; owner.add_to('test@example.com'); window.close(); } 親ウィンドウ: function add_to(val) { document.form1.to.value = "[" + val + "]"; } これで試してみましたが,間に[]と引数の間になにも入っていないようです。(見た目) 1つ試してみたことがありますので補足に投稿します。

qscft
質問者

補足

住所録からメールアドレスを選択して親ウィンドウにメールアドレスが入る。 ↓ Toのテキストボックスに入った値を削除して、手入力でメールアドレスを入力。 この手順でもNGになってしまいます。一度windows.openerでセットするとダメなようです。 なにか見えない値がくっついて入ってしまうのでしょうか。

関連するQ&A