• 締切済み

HTMLでフォームを作ってPHPで受け取ることができません。

プログラミング超初心者です。本でPHPを勉強中です。HTMLでフォームを作成しPHPでフォームに入力された内容を受け取るというところでつまづいてます。本に紹介されているサンプルスクリプトをローカルホストでブラウザで試しているのですがうまくいきません。 フォーム内に入力しSUBMITのボタンを押してもPHPの方のページが表示されません。2つのファイル名はform.html と form.php 名のですが、ブラウザのアドレスバーが http://localhost/form.html から http://localhost/form.html/form.php に替わりHTMLが再表示されるだけです。 環境は os windows XP SP1 ブラウザ IE6 php 4.2.2 です。 スプリクト載せると800字超えてしまいますので回答に載せます。 お解りになる方いらっしゃいましたらよろしくお願いいたします。

  • PHP
  • 回答数4
  • ありがとう数1

みんなの回答

  • moon_night
  • ベストアンサー率32% (598/1831)
回答No.4

PHPよりもサーバーの設定を疑ってみたほうがいいかも。 普通にHTMLからHTMLにリンクを付けたら? form.html から form2.html にリンクをつけると http://localhost/form.html/form2.html になる? 通常のAリンクとFORMタグでのリンクで試してみて。 なったら完全にサーバの設定がおかしい。 Apache?

Kazal
質問者

補足

monn night さん 何度もありがとうございます。 おっしゃるとおりリンクをつけてみたところおっしゃるとおりの症状になりました。 私には良く解らないのですがやはりサーバーがおかしいのでしょうか? サーバーはphpdev5 beta3という物の中のApache2.0.39を使用しております。 一応本に書いてある通りインストールの段階で設定を変更して使っておりましたが、もしかしたらその途中でミスがあったかもしれません。 具体的な対処法お解りになりましたらお教えください。

  • cojirou
  • ベストアンサー率50% (59/117)
回答No.3

><FORM ACTION="form.php" METHOD="POST"> を <FORM ACTION="./form.php" METHOD="POST"> としてみてもだめですか? アドレスの指定の仕方か、ローカルの設定あたりが 怪しいかと思うのですが。 飽くまで素人考えなので、ご参考までに。

Kazal
質問者

補足

おっしゃるとおりに変えてみたのですがだめでした。 ローカルの設定を調べてみます。 ご意見ありがとうございました。

  • moon_night
  • ベストアンサー率32% (598/1831)
回答No.2

文字列の受け渡しだけなら800字は超えないです。 ## form.html ## <html> <head> <title>ふぉーむ</title> </head> <body> <form action="form.php" method="POST"> <input type="text" name="com"><br> <input type="submit"> </form> </body> </html> ## form.php ## <?PHP print $_POST['com']; ?> 以上。 form.phpのHTMLタグは面倒なので割愛。

Kazal
質問者

補足

ご回答ありがとうございます。それと説明不足ですみませんでした800字超えるのでといったのはこの質問版の質問文が800文字までみたいなので回答という形で問題のスプリクトを書き込もうと思ってのものでした。 ご回答いただいた内容をコピーして実行してみたのですが、残念ながら結果は同じでした。 本のサンプルを以下に書き込みます。 ##form.html## <HTML> <HEAD> <TITLE>メンバー登録</TITLE> </HEAD> <BODY> <FONT SIZE=5 COLOR=GREEN>メンバー登録</FONT> <HR> <FORM ACTION="form.php" METHOD="POST"> <B>メールアドレス</B> <INPUT TYPE="text" NAME="email" SIZE=30> <P> <INPUT TYPE="checkbox" NAME="keitai" VALUE="1">携帯アドレスの場合チェックする <P> <B>性別</B> <INPUT TYPE="radio" NAME="sex" VALUE="male" CHECKED>男 <INPUT TYPE="radio" NAME="sex" VALUE="female">女 <P> <B>会費負担</B> <SELECT NAME="futan"> <OPTION VALUE="100">全額負担</OPTION> <OPTION VALUE="50">半額負担</OPTION> <OPTION VALUE="0">無料</OPTION> </SELECT> <P> <B>コメント</B><BR> <TEXTAREA ROWS=4 COLS=40 NAME="comment"> </TEXTAREA> <P> <INPUT TYPE="submit" VALUE="登録"> <INPUT TYPE="reset" VALUE="クリア"> </FORM> </BODY> </HTML> ##form.php## <?php $email = $_POST['email']; $keitai = $_POST['keitai']; $sex = $_POST['sex']; $futan = $_POST['futan']; $comment = $_POST['comment']; header('Content-Type: text/html; charset=shift_jis'); ?> <?php echo "メールアドレス=${email}<br>"; echo "携帯アドレス=${keitai}<br>"; echo "性別=${sex}<br>"; echo "会費負担=${futan}<br>"; echo "コメント=${comment}<br>"; ?> (HTML部分割愛) です。 ただご回答いただいたスクリプトでも同じ結果になるということはスプリクトの問題ではなくて実行環境など他の問題なのでしょうか?

noname#11187
noname#11187
回答No.1

http://localhost/form.html/form.php って、アドレスが変ですよ。 本を見直してその通りか確認されてみては。

Kazal
質問者

補足

Uozazaさんのおっしゃるとおりで本の中にある参考の写真の中では、http://localhost/form.html から http://localhost/form.php に替わっているのですが私の環境で実行すると http://localhost/form.html/form.php というふうになってしまうのです。submit のボタンを押すと勝手にそのようなアドレスになってしまいます。 その原因もわからなくて困っております。

関連するQ&A

  • セッション PHPとHTML

    form1.htmlのaction先にorder.phpを指定し、そのorder.phpで$_POSTを使ってform1.htmlのフォーム情報を取得します。その後、order.phpはheader(Location)でform2.htmlをブラウザ上に表示させます。 form2.htmlはaction先が同じorder.phpになっており、ifで動作を制御しています。form2.htmlのsubmitボタンを押すと、画面上にorder.phpにより、今まで2つのフォームで入力した内容が表示されます(order.phpはsessionですべての変数を保持しています)。 この時「form1の内容を訂正」「form2の内容を訂正」というリンクないしボタンを設けて、該当フォームに飛べるようにしたいのです。 このリンク/ボタンで該当フォームに飛んだ場合、入力内容がフォームに表示されるようにするには、どのようにすればいいのでしょうか? いまいちsessionの詳しい使い方が分からなくて困っています・・・。

    • ベストアンサー
    • PHP
  • PHPで求めた変数をHTMLで使う方法

    HTMLのformタグで与えた引数を元に、ある値をPHPで求めた後、その求めた変数をHTMLに戻って使う方法をご教授下さい。 例えば、 index.html ↓↓↓ <form action="submit.php" method="post"> <input type="text" name="xxxxx"> <input type="text" name="yyyyy"> <input tyoe="submit" value="実行"> </form> <textarea name="answer"> 実行後ここに、下のPHPで求めた$zzzzzを表示したい。 </textarea> 上のHTMLでxxxxxとyyyyyを入力して実行ボタンを押します。 そしてPHP側は、 submit.php  ↓↓↓ $zzzzz = $_POST["xxxxx"] . "は、" . $_POST["yyyyy"] . "です。"; このように求めた$zzzzzを上のHTMLに戻って表示したいのですが、しばらく調べてみても見つかりませんでした。 どなたかご教授下さい、お願いします。

  • HTMLのフォームをPHPで配列で受け取る方法

    Webアプリを作っています。 HTMLのフォーム上で、番号と名前を入力し、 PHPでデータベースに登録する感じになります。 HTMLのフォームから送信されたデータを、PHP側で配列として受け取るには、 どのようにHTMLを書き換えたら良いでしょうか? 説明のために例を挙げます。 sample.htmlには以下のように書いています。 <form action="action.php" method="get"> <input type="number" name="id1"> <input type="text" name="name1"> <input type="number" name="id2"> <input type="text" name="name2"> <input type="submit"> </form> ここで、送信ボタンを押すと、 ブラウザのロケーションバーには /action.php?id1=1&name1=taro&id2=2&name2=jiro このように表示されます。 action.phpは次のように書いています。 <?php print ($_REQUEST['id1']); print ($_REQUEST['name1']); print ($_REQUEST['id2']); print ($_REQUEST['name2']); ?> 出力結果は、 1taro2jiro のようになります。 このあと、PHPでデータベースに登録する処理をしたいのですが、 $_REQUEST['id1'] $_REQUEST['id2'] $_REQUEST['name1']; $_REQUEST['name2']; となっていると、処理が大変なので、 $_REQUEST['id'][0] $_REQUEST['id'][1] $_REQUEST['name'][0] $_REQUEST['name'][1] のように配列として受け取れるようにしたいのです。 sample.htmlを書き換える必要が有ると思うのですが、 どのように書き換えたら良いでしょうか? 教えていただけると幸いです。 どうぞ、よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • PHPでフォームに自動入力

    PHP初心者です。 (1)フォームに手入力しsubmit (2)手入力の内容をファイルに保管 (3)よそのサーバのフォームを開きユーザ名/パスワードを入力しsubmit (4)パスワード入力後に展開されるフォーム(https)に(1)の手入力の内容を入力しsubmit (5)"(4)"でsubmitした結果で次に表示するフォームを決定したい  submitした結果はフォームに正常/エラーが表示されます 自サーバのWebフォームに入力された内容を他のサーバに反映したい。 サーバへの反映結果で次処理を変えたい。 他のサーバに反映させる手段はWebの入力フォームのみとなっています。 (3)(4)(5)をサーバで動作するPHPで自動的(トリガーは(1))に行いたいです。 (3)(4)(5)の実装方法をどなたかご伝授いただけないでしょうか。 サンプルのソースがあればありがたいです。 linuxサーバ(Fedora) PHP 5 質問内容が大きすぎ申し訳ないですが伝授いただけないでしょうか。

    • 締切済み
    • PHP
  • HTMLにPHPを埋め込んでお問い合わせフォーム

    PHP超初心者です。 こんな感じの、お問い合わせフォームが含まれるHTMLページを作ろうとしています。↓ https://rdlp.jp/image/lp-archive/63361/full.jpg HTMLにPHPを埋め込んで作ろうと思っていて、 こちら↓ https://www.webdesignleaves.com/pr/php/php_contact_form_01.php を参考にしているのですが、 メール送信前に確認ページが表示されて、 OKだったら送信ボタンをクリックする、 修正する場合は戻るボタンをクリックしてもとのお問い合わせフォームに戻る(名前やメールアドレスなど入力した内容を残す)、 というふうにカスタマイズしたいのですが、 どのようにすればよいでしょうか。 (確認画面なしのフォームは実装済みです) カスタマイズでなくても、 ・確認画面あり ・二重送信防止機能あり ・自動返信機能あり ・バリデーション機能あり(お問い合わせフォームにエラーを表示)※添付画像(Web Design Leavesさんのページより) の4つを満たしている、別の作り方紹介ページをご紹介いただく形でもOKです。 どうぞよろしくお願いいたします。

    • ベストアンサー
    • PHP
  • PHPの質問:フォームから受け取った値がNULL

    あまりに基本的過ぎるのか、検索しても、参考書を読んでも分かりませんでした。 ■やりたいこと index.htmlのフォームで入力した値を、output.phpで変数$nameとして受け取りたい。 (この後$nameをstrstr関数の引数として使いたい) ■作ったソース 【index.html】 <form action="output.php" method="post"> <input type="text" name="name"> <input type="submit" value="入力"> </form> 【output.php】 <?php $name = $_POST['name']; var_dump($name); ?> ■困っていること output.phpをブラウザで開くと、以下の通りに表示されます。 string(4) "abcf" しかし、ブラウザで「ソースを表示」すると、[NULL]となってしまいます この変数$nameは、strstr関数の引数として使いたいのですが、 そこで値がNULLのため、上手くいきません。 ■お聞きしたいこと (1)フォームから受け取った値をvar_dump()を使い、ブラウザのソース表示をすると NULLになるのは、そういった仕様なのなのでしょうか? (2)フォームからの値を変数に格納する際、何か注意する点があるのでしょうか? 何か根本的なことから理解していないようでお恥ずかしいのですが、 教えて頂けると大変助かります。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 【HTML(PHP?)】複数のフォームと複数の実行ボタン(submit

    【HTML(PHP?)】複数のフォームと複数の実行ボタン(submit)の扱いについて どのカテゴリで質問しようか迷いましたがこちらで・・・。 今回は画像を使用して質問します。 今回はHTML(PHP使用)に関しての質問なのですが、 図にあるように、※1をクリックすると、その次のページにA,Bの情報がPOSTで次のページに送信されるようにしています。 ここで、※2にも同じように、A,Bの情報をPOSTで次のページに送信したいのですが、 何故かPOSTで送信されないみたいなのです。 どうにかして※2も※1と同じようにPOSTを送信したいのです。 別の質問サイトで、「押されたsubmitがどれかによって処理を分岐させる」と回答が帰ってきたのですが、javascript無しのPHPだけで以上のことができるのでしょうか? なお、HTMLのFORMタグは入れ子にしていませんし、 POST受け取り先の.phpも問題はありません。 以下、HTMLのform、input部分のソース ※1のフォームタグ内容 <form action="search.php" method="post" name ="search"> ※1ボタンの内容 <input type="submit" name="searching" value="再検索"> ※2のフォームタグ内容 <form action="result.php" method="post" name ="res"> ※2ボタンの内容 <input type="submit" name="result" value="結果表示"> まとめとして、 押されたsubmitがどれかによって処理を分岐させる方法を、 javascriptではなく、PHPのみで実装させたいのです。 どうかよろしくお願いします。

    • ベストアンサー
    • PHP
  • 【HTML(PHP?)】複数のフォームと複数の実行ボタン(submit

    【HTML(PHP?)】複数のフォームと複数の実行ボタン(submit)の扱いについて 【お詫び】 やたらと重く、送信ボタンを何度も押してしまい、同じ質問を何度も投稿した形になってしまい、大変申し訳ございませんでした。 それらの質問は全て削除させていただきました。 どのカテゴリで質問しようか迷いましたがこちらで・・・。 今回は画像を使用して質問します。 今回はHTML(PHP使用)に関しての質問なのですが、 図にあるように、※1をクリックすると、その次のページにA,Bの情報がPOSTで次のページに送信されるようにしています。 ここで、※2にも同じように、A,Bの情報をPOSTで次のページに送信したいのですが、 何故かPOSTで送信されないみたいなのです。 どうにかして※2も※1と同じようにPOSTを送信したいのです。 別の質問サイトで、「押されたsubmitがどれかによって処理を分岐させる」と回答が帰ってきたのですが、javascript無しのPHPだけで以上のことができるのでしょうか? なお、HTMLのFORMタグは入れ子にしていませんし、 POST受け取り先の.phpも問題はありません。 以下、HTMLのform、input部分のソース ※1のフォームタグ内容 <form action="search.php" method="post" name ="search"> ※1ボタンの内容 <input type="submit" name="searching" value="再検索"> ※2のフォームタグ内容 <form action="result.php" method="post" name ="res"> ※2ボタンの内容 <input type="submit" name="result" value="結果表示"> まとめとして、 押されたsubmitがどれかによって処理を分岐させる方法を、 javascriptではなく、PHPのみで実装させたいのです。 どうかよろしくお願いします。

    • ベストアンサー
    • PHP
  • phpメイラー 入力フォームの練習

    phpで入力フォームでのメールの送受信を行いたいのですが、そこで PHPMailer のメーラーをダウンロードして PHPMailer フォルダを submit.php のファイルの直下に置くらしいのですが、 PHPMailerを ホームページ入力フォームの中のフォルダ (入力ホーム練習)というフォルダを作ってそこに確認画面のphpファイルやHTMLファイルを保存しているのですが、 PHPMailerを submit.phpファイルの下に移動しようとドラッグしても勝手に PHPMailerのフォルダが一番上に来てしまいます。どうしたらよいでしょうか? このサイトを参考にしています。phpでのメールの送受信の方法 https://bluecode.io/basic/basic1/basic1-3/#phpmailer 送付画像は参考サイトに書いてある PHPMailer のフォルダの中の位置の画像です。 自分が作った入力ホームのフォルダの中は上記のURLのサイトに書いてあるphpのファイル名やhtmlファイル名は自分用に名前は変えてあります。 それは以下のものになります 以下 ホームページ入力フォームの中のフォルダフォルダ名(入力ホーム練習) PHPMailer←← ←← これが上に来てしまう・・・・・ confirmation.php contact.html submit.php 〇 〇 〇 ←← ←←ここに配置したい・・・・・ よろしくお願いいたします

    • 締切済み
    • PHP
  • HTMLのフォームについて

    ドロップダウンリストをHTMLのフォームで作成したときのことで悩んでいます。 1~10まで選択可能なドロップダウンリストを用意したフォームが2つあるとします。 そのフォームに送信をボタンをsubmitとしておいておきます。 "test.c"というプログラム内のprint文でHTMLコードを記述し、ブラウザで選択した値を、プログラム内で変数として使用したいと考えております。 以下のようなものを記述したとします。 <form name = "select" method="post" action="test.c"> <select name="list1"> <option value = "1"> 1 </option> ~ </select> <select name="list1"> <option value = "1"> 1 </option> ~ </select> <input type="submit" value="表示"> </form> として、 [1~10のリスト1] [1~10のリスト2] [送信] というような感じです。 このtest.cをブラウザ上で起動し、送信ボタンをおせば、 ・「0~リスト1で選択した数字」をブラウザに表示 ・その中で「リスト2で選択した数字」の表示を消す という処理がtest.cで行われるようなプログラムとします。 例として ・リスト1とリスト2は始めに1が選択されているとします。 ・「リスト1で5」、「リスト2で3」を選択して送信を押します。 ・test.cのページが更新され、ブラウザ上にはリスト2つと送信ボタン、「0・1・2・4・5」が表示されているとします ここからが質問になります。 このとき更新されたことにより、2つのリストは初期選択の1が選択された状態に戻っているが、ブラウザ上には前回送信した結果の数字「0・1・2・4・5」が表示されています。 このときに、このままやっぱり3を表示しないのではなく2を消したいとなった場合、リスト2を"2"に選択しなおすだけでなく、リスト1も再度"5"を選択しておかなければならないと思います。 この場合に、更新後のページのリストを前回選択した5と3のままにしておけば、リスト2を3から2に変更するだけで良くなるのですが、このように前回送信した状態を保持してリストを表示することは可能でしょうか。 よろしくおねがいします。

専門家に質問してみよう