質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.42%
GET

GETとはHTTPが対応するリクエストメソッドの一つです。クライアントからサーバーへ送られたURLパラメータのデータを取得する時必要がある時に使われます。

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

3回答

9047閲覧

PHPにおけるGET,POSTでのUndefined index: nameエラーについて

退会済みユーザー

退会済みユーザー

総合スコア0

GET

GETとはHTTPが対応するリクエストメソッドの一つです。クライアントからサーバーへ送られたURLパラメータのデータを取得する時必要がある時に使われます。

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

1クリップ

投稿2020/07/25 08:07

よろしくお願いします。

PHPにてformタグを生成し、input,submitで送ったデータを同ページで反映させたいと思いましたが、うまくいきませんでした。

以下、状況です。

[test.phpファイル]

<form name="name" action="test.php" method="GET"> <Label for="name">氏名:</Label> <input name="name" type="text"> <input type="submit" value="送信"> </form> <pre> <?php echo htmlspecialchars($_GET["name"]); ?> </pre>

*htmlやbody等のタグは割愛しております。

同ページで氏名欄に任意の氏名を記述して送信を押すと、Undefined index: nameエラーが発生してしまいます。

調べるとtest.phpに初回アクセスした際に($_GET["name"]);が未定義のため発生するエラーらしく、
対策として

if (!empty($_POST["submit"])) {}

もしくは

if (isset($_POST["submit"])) {}

を用いての定義確認をする

という旨の記事がありましたが、そもそも本文中において$_GET["name"]の定義とは何を指しているのでしょう。

formから送られた情報のタグ内にはname="name"にて定義済みGET変数で"name"を取得できるのかと思いましたが、
別途定義の必要性があるのでしょうか。

恐縮ですが、アドバイスいただけますと幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

運営さんへ。

わからないことがあるからこちらで質問しています。
理解しようと自分なりに努力しております。

m.ts10806のような学びの門戸を狭めるような方へのブロック機能を追加してください。

仮に技術力があってもm.ts10806のようなプログラマーには絶対になりたくないと
思いました。

というか質問と関係ない尾鰭を突っつく暇があったらスルーすれば良いのになぜわざわざ
非効率なことしてんの?どちらにも得がないことに気づかないのかよ。

あなたの場合は徳もないけどな笑
以上。

投稿2020/08/10 12:06

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2020/08/10 20:46

前提知識もない状態では理解できないよと書いてるだけの話がどう解釈したらこうなりますか? あと、この回答は本件をどう解決するのですか?「質問と全く関係ない」回答を自分でしておいて尾鰭を突っつくと人には言えません。
guest

0

form属性のnameがバッティングしている可能性がなくはないですが、
GET、POST関係なく、formから送られてない、それだけの話かと思います。
※もちろん紛らわしい名称は問題切り分けを煩雑にするので避けるべき

もっとも、GETは調べたらわかる通りクエリストリングで取り扱うので、URLにきちんとkey=valueの形式でつければ初回アクセスでも関係なく受け取れます。
送信後のURLどうなってますか?>name=入力値`はついてますか?

が、クエリストリングがないときは当然何も送信されてないのと同じなのでkeyのチェックは必須です。

いずれにしても、GET,POSTに直接アクセスするのではなく、filter_input通した方がこの手の対応は楽です。

if (!empty($_POST["submit"])) {}

もしくは
if (isset($_POST["submit"])) {}

いえ、filter_input通さないのでしたら特定のキーを参照するのではなく、$_SERVERのREQUEST_METHODを確認してください。

投稿2020/07/25 08:22

編集2020/07/25 08:28
m.ts10806

総合スコア80873

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/08/09 11:41

おっしゃる通り、特にフィルターなどで確認せずにpostおよびget形式で問題なく動作いたしました。 どうやらサーバー設定の絡みで動作しなかったようでした。 それを踏まえた上でfilter_inputやif(isset)などでの記述を行うのは、データを受け取ったとに任意の処理をさせたい時など限定で使用するものなのでしょうか。 上記以外の使用用途ではいまいち印象がわきませんでした。
m.ts10806

2020/08/09 20:38

>データを受け取ったとに任意の処理をさせたい時など限定で使用するものなのでしょうか。 何を意図しているのか良く分かりません。 filter_inputはその名のとおりinputしたものをfilterするものなので、リクエスト処理に利用します。 if-issetはissetの結果をifで判定しているので用途が違います。isset自体、あらゆる場面で使えます。「変数が定義されているかどうか」ですし、「データを受け取った」と仰っているのがどの範囲かにもよるでしょう。 「リクエスト」=「データを受けとる」でしたら、「そのためだけに利用されるものでもない」です。 代替手段があるために限定されているように感じるのかもしれませんが、まあ、そこは考えてみてください。 アプリケーションは言語の持つ機能を利用するために作られるわけではなく、機能はあくまでアプリケーションを作るために利用される数多の手段のひとつでしかないので。
退会済みユーザー

退会済みユーザー

2020/08/09 22:55

ご回答ありがとうございました。 それぞれ再度調べてみます。
m.ts10806

2020/08/10 04:44

というか「リクエスト」と「レスポンス」の概念の理解なくして、アプリケーションは作れません。 根本的な理解をしないとどんな調査も理解には繋がりません。 やろうとしてることと、本来やるべきこと、間違えてる気がします。 素振りすらままならないのにホームラン打とうとしてません? そういう初心者は多いですが得てして成長の阻害にしかなってません。自身の現在地を見誤るとこの先何年も成長しませんよ。
退会済みユーザー

退会済みユーザー

2020/08/10 11:54

私の質問には2度と回答いただかなくて結構です。
退会済みユーザー

退会済みユーザー

2020/08/10 11:55

ブロック機能がないので、今後はそちらで対応してください。 技術があるのは結構ですが、人間性を疑いますね正直
m.ts10806

2020/08/10 20:44

どこに触れたのかわかりませんが、その思考回路は理解できかねます。 分かってるつもりのまま進めてませんか?と問うてるだけです。
guest

0

調べるとtest.phpに初回アクセスした際に($_GET["name"]);が未定義のため発生するエラーらしく、

そのとおりです。最初に(ユーザーが入力しようとして)test.phpを開いたときに、URLでname=hogeのような引数を指定していなければ、$_GETは空です。

(送信用のフォームと結果表示用のページを同じPHPで使いまわしていると、このように「1回目だけ」「結果が送られた場合」の切り分けが必要となってしまうので、送信前と送信後の処理は別ファイルにするのも一案です)

投稿2020/08/10 12:45

maisumakun

総合スコア145507

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.42%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問