javascriptでフォーム送信 - PHPプロ!Q&A掲示板

2825

  • 0P

javascriptでフォーム送信

質問日時 / 2010年7月27日 15:07    回答数 / 4件

Questioner:  seisaku  このエントリーをはてなブックマークに追加 

キーワード / フォーム    submit    javascript   

htmlのフォームをjavascriptで送信して、新しいウインドウのphpで展開したいのですが、
フォームの内容が渡っていかないようなんです。どのようにしたらvalueの中身もpost送信できるのでしょうか?

html
  1. <img src="aa.gif" onclick="win_open('.$i.');">

javascript
  1. function win_open(num){
  2.   
  3.   var cform = "createform"+num;
  4.   
  5.   w = window.open("create.php", "newwindow");
  6.   document.cform.target = "newwindow";
  7.   document.cform.method = "post"; 
  8.    
  9.   document.cform.submit();
  10.     //document.f.target = "newwindow";
  11. }

php
  1. echo $_POST["create"];

この質問への意見の募集は締め切られ、ポイントは既に配分されました。
意見を投稿することはできますが、ポイントを受け取ることはできません。



ツリー一覧

┗A01shimix何点か確認させてください。 form要素(とその内側
 ┗A01-1seisakuコメントありがとうございます。 >form要素(とそ
  ┗A01-1-1shimixそういうformの記述ですね。最初の質問で書かれていた
   ┗A01-1-1-1seisakuありがとうございます!できました! javascriptの問

回答一覧

並び替え:

A01
answerershimix [7月27日 15:50] (最終編集:7月27日 17:03)

何点か確認させてください。

form要素(とその内側のinput要素)の転記がないのですが、name(もしくはid)がcreateという値のinput要素は既存なのでしょうか?

>onclick="win_open('.$i.');"

引数として「.$i.」という文字列を渡しているのは何か意味がありますか?win_openの先頭でalert(num);などとしてみれば、何が渡されているかは確認できると思いますが、渡したかったものが渡されているのでしょうか?

ひょっとして、単に「指定するフォームが間違っている(引数からフォーム名が正しく作られていない)」というだけではありませんか?フォームが存在しなくても(actionやmethodは自前でセットしているので)submit自体の動作はしている状態じゃないのでしょうか?



(追記)
つまり(JavaScriptのデバッグの話になるけど)

> var cform = "createform"+num;

の後ろにalert(cform);とか入れてみてフォーム名が正しいかどうか確認してください・・ということですね。form名(とその中の要素)さえ間違いなければsubmitは問題ないので(ちゃんと新しいタブでcreate.phpは開きますからね)。

この意見に回答する

ツリーへ TOPへ

A01-1
replyerseisaku [7月27日 17:23]

コメントありがとうございます。

>form要素(とその内側のinput要素)の転記がないのですが、name(もしくはid)がcreateという
>値のinput要素は既存なのでしょうか?
>onclick="win_open('.$i.');"
>引数として「.$i.」という文字列を渡しているのは何か意味がありますか?

はい。 name="create" のinput は存在しております。
  1. <form method="POST" action="create.php" name="createform0">
  2.  <input type="hidden" name="create" value="9" />
  3. </form>
  4. <form method="POST" action="create.php" name="createform1">
  5.  <input type="hidden" name="create" value="9" />
  6. </form>
実はフォームが複数あり、それを別々のウインドウで開きたいため、このようにしています。

alert(num);も「createform1」などが、きちんと渡っているのを確認しています。

いろいろやって、php.iniの設定を変えると、Notice: Undefined index:~~が出ました。
中身は配列ではないのですが、配列が格納されてしまっているという事でしょうか?

この意見に回答する

ツリーへ TOPへ

A01-1-1
replyershimix [7月27日 18:00] (最終編集:7月27日 18:03)

そういうformの記述ですね。最初の質問で書かれていた「.$i.」などは何かの間違いだったのでしょうね。phpで単引用符で括ってprintする途中だけ抜き出したもの・・でしょうか(汗

こちらで試した限りではfunction win_openを

  1. function win_open(num){
  2.    var cform = "createform"+num;
  3.    document.forms[cform].target = "newwindow";
  4.    document.forms[cform].method = "post";
  5.    document.forms[cform].submit();
  6. }

とすればいいようです。あくまでもJavaScriptの問題です。

この意見に回答する

ツリーへ TOPへ

A01-1-1-1
replyerseisaku [7月27日 18:17]

ありがとうございます!できました!
javascriptの問題だったんですね。大変勉強になりました。

ちなみに「.$i.」は動的に書き出している部分で、フォームのチェックの際、いろいろやっている間にまぎれてしまったようです。スミマセン。

この意見に回答する

ツリーへ TOPへ

<<質問一覧へ



Pick Up Q&A

Q
負荷時のmysql_connect()エラー
 このエントリーをはてなブックマークに追加 
A
これはPHPというよりOSまたはMySQLのコミュニティで質問されたほうがいいと思います。 ぱっと思いついた範囲で記すと MySQL等のDBに「ある時点において同時に接続可能なクライアントの最大数」に制限があるよう...

>>続きを読む

今回のような実践的な経験がエンジニアのキャリアに繋がると思います。是非サービスを成功させて下さい!

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)