• ベストアンサー

HTMLのフォームでのデータの持っていきかたについて

HTMLとPHPを使いアカウント作成のページを作成しています。 テキストボックスに名前等を入力して登録ボタンを押すときに、パスワード認証画面(アカウント作成用のパスワードを入力)を経由して次の画面に行きたいと考えています。その際にはテキストボックスに入力したデータを持っていかなければならないのですが、うまく持っていってくれません。 actionに直接javascriptを入れるとデータは持っていってくれないのでしょうか? よろしくお願いします。 <form method='post' action="JavaScript:var pass=prompt('パスワードを入力してください','****');if(pass){location.href= pass+'.php';}"> <p>名前<input type="text" name='hName' value='$hName'></p> <p>住所<input type='text' name='hpostcode2' value='$hpostcode'></p> <p>コード番号<input type='text' name='haddress2' value='$haddress'></p> <input type="submit" value='$hNamebutton2'> </form>

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

  • ベストアンサー
  • kalze
  • ベストアンサー率47% (522/1092)
回答No.1

このスクリプトでは送信されないでしょう。 location.hrefでページ遷移しているわけですから、 pass+'.php'のURLに普通にGETでアクセスしていることになります。 location.hrefで指定しているURLにパラメータが指定されていないので、 http://example.jp/*****.php(*部分はプロンプトで入力した値)にGETで接続しているだけです。 javascriptでフォームの値を送信するには、 document.○.actionになるかな。 function send(){ pass=prompt('パスワードを入力してください','****'); if( pass ){ document.form1.action="xxxx.php"; document.form1.method="post"; } } というのを定義しておいて、 <form name="form1" onSubmit="send()"> <p>名前<input type="text" name='hName' value='$hName'></p> <p>住所<input type='text' name='hpostcode2' value='$hpostcode'></p> <p>コード番号<input type='text' name='haddress2' value='$haddress'></p> <input type="submit" value='$hNamebutton2'> </form> とするとか。 まぁpassが空だったらどうするのか?とか、 passがアクセスしてほしくないファイルだったらどうするのか?とかいろいろ問題はあるでしょうけど。 ここからは余計なお世話ですが。 このような設計は普通はしないとおもいます。 http://example.jp/*****.phpは好きにアクセスできて、そこでの認証がないわけですから、http://example.jp/*****.phpがばれてしまうと、好き勝手に、それこそスクリプトでも書いて送信しまくることで、いくらでもアカウント作成されますから。 普通にパスワード入力欄作成して、php側でパスワード照合したほうがよいとおもいますが。

bolder
質問者

お礼

回答ありがとうございました。急ぎと言いながら返答が遅れてすいません。 おかげさまで持っていくことができました! そうですね、php側で照合することにしました。作った後気づいたのですが、javascriptでの照合だとDBに入っているパスワードとの照合ができないようなので・・・・

その他の回答 (2)

noname#19175
noname#19175
回答No.3

> bolderさん ・CGI(およびPHP)とHTML(フォーム) ・HTML(フォーム)とJavaScript (・CGI(およびPHP)とJavaScript) のそれぞれの関係もわかっておられないのではないでしょうか、、、 (ANo.2の説明(の一部)はANo.1に対してだと思うのですが、、、?私のはANo.1やANo.2の内容とは関係有りません。) それがわかっていなければ、 ここでHTMLなりPHPなり、JavaScriptを書いたとして、 ログイン画面からログインしてもらうことは出来るかもしれませんが、 はたして、ログインしたその先の画面が作れるとは思えません。 > HTMLとPHPを使いアカウント作成のページを作成しています。 いきなりアカウント作成ページを作るのではなく、 たとえば ・フォームから入力したデータをサーバー側で受け取り、サーバーが受け取った結果をブラウザで確認する、 それが出来れば ・入力不足(たとえば必須項目が入力されていないなど)のチェックをして、不足が有ればその確認ができるようにする ・確認ページからさらに追加入力してみて、前回の内容と2回目の内容を一緒に表示させてみる などのように、段階を踏んでみてはいかがでしょうか。 もしJavaScriptはわからないがPHPならわかる、というのであれば、(すでに上記の段階は踏まれていると思うので、以下のJavaScriptを参考に作れると思います。) ほかの方も仰るとおり、 フォームに<input type="password">を追加して、PHPで入力のチェックを行ってみてはいかがでしょうか。 JavaScriptを切った状態では未入力のままでも送信できますから、サーバー側でもチェックが必ず必要です。 また、送信ボタンを押した後でパスワード入力を促すのは、ユーザーの混乱を招く可能性がありますので、おすすめできません。 一応、以下で動くと思います。(たぶん期待されている動作にはなっていると思います) 関数にして別の場所に書いて、それを呼び出した方がわかりやすいと思います。 <form method='post' action="xxx.php" onsubmit="return function(){var p=prompt('パスワードを入力してください','****');if(!p)return false;var el=document.createElement('INPUT');el.value=p;document.getElementsByTagName('FORM')[0].appendChild(el);return true;}();"> <p>名前<input type="text" name='hName' value='$hName'></p> <p>住所<input type='text' name='hpostcode2' value='$hpostcode'></p> <p>コード番号<input type='text' name='haddress2' value='$haddress'></p> <input type="submit" value='$hNamebutton2'> </form>

bolder
質問者

お礼

長い回答ありがとうございます。急ぎと言いながら回答が遅れてすいません。おかげさまでデータを持っていくことができました! 今私はHTMLとPHPは理解しているのですが、javascriptがまったくわからないという現状です。 「javascriptだとpostってどうすればいいんだ?」という感じでしたw 仕様の都合上、javascriptでパスワード入力画面を表示させるようにしなければいけなかったために今回のようなつくりになったのですが、DBの中にあるパスワードとの照合もできませんし、他の方も言っているとおりセキュリティ上に問題があるので単純にPHPでパスワード照合をしたいと思います。 ありがとうございました。

noname#24096
noname#24096
回答No.2

Javascriptを使うかどうかは関係ありませんね。 失礼ながら、CGIにおけるPOSTとGETの違いが お分かりになっていないように思います。 この辺りを参考にどうぞ。 http://www.php.net/manual/ja/language.variables.external.php http://www.hizlab.net/app/phppg.html また「pass.php」がどんな内容か不明ですが #1の方もおっしゃっている通り、 セキュリティには十分な注意が必要です。

bolder
質問者

お礼

回答ありがとうございました。急ぎと言いながら返答が遅れてすいません。おかげさまで持っていくことができました! 一応postとgetの理解はしている・・・つもりですが、javascriptの場合はどうやるのかがわかりませんでした。 そうですね、セキュリティ的に考えてもphpで照合することにしました。

関連するQ&A