🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
GET

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

POST

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

PHP

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

HTML

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

Q&A

解決済

2回答

2245閲覧

POST受信がうまくできません

kmtym1998

総合スコア9

GET

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

POST

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

PHP

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

HTML

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

1グッド

1クリップ

投稿2019/09/16 05:37

編集2019/09/16 05:51

POSTメソッドで送信したデータをうまく受け取ることができません。
signup.phpのフォームで受け取ったデータをsignup_process.phpで処理しています。
ちなみに、試しにPOSTをGETメソッドに変えてみたときはうまくいきました。

どこに問題がありそうでしょうか?

//<body>の一部を抜き出しています //signup.php <div class="registrationForm"> <h3>以下のフォームを埋めてください</h3> <form action="signup_process.php" method="POST"> <input type="email" name="email" placeholder="メールアドレス"><br> <?php if(!empty($emailError)) echo $emailError ."<br>" ?> <input type="text" name='userID' placeholder="ユーザID(任意の文字列)"><br> <?php if(!empty($userIDError)) echo $userIDError ."<br>" ?> <input type="password" name="password" placeholder="パスワード"><br> <input type="password" name="passwordCheck" placeholder="パスワードを再度入力してください(確認用)"> <br> <?php if(!empty($passwordError)) echo $passwordError ."<br>" ?> <input class="submit" type="submit" value="登録する"> <?php print_r($_SESSION['temp']) ?> </form> </div>

ひとまずPOSTで正しく値が受け取れているかどうか確認するため、$_POST['userID']をechoしています。

signup_process.php <?php session_start(); $_SESSION['error'] = []; //エラーメッセージを入れる配列 $_SESSION['login'] = false; $db = []; $db['dsn'] = 'mysql:dbname=intousers;host=localhost'; $db['user'] = 'kmtym1998'; $db['password'] = '6427'; //メアドが入力されてるか //ユーザIDが入力されているか if(empty($_POST['userID'])){ $_SESSION['error']['userID'] = 'ユーザIDを入力してください'; //header("Location: signup.php"); }else{ $_SESSION['error']['userID'] = ''; } echo $_POST['userID']; //ユーザIDが一意か try{ $pdo = new PDO($db['dsn'], $db['user'], $db['password'], [PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING]); $selectOrder = "SELECT * FROM iNTOAccount WHERE userid = :userID"; $stmt = $pdo->prepare($selectOrder); $stmt->bindParam('userID', $temp, PDO::PARAM_STR); $temp = $_POST['userID']; $stmt->execute(); $result = fetchAll(); }catch(PDOException $error){ $_SESSION['error']['other'] = "データベース接続エラー"; header("Location: index.php"); die(); } $_SESSION['temp'] = $result; $_SESSION['error'] = []; ?>

エラーメッセージは以下の通りです。

Notice: Undefined index: userID in C:\xampp\htdocs\php_test\iNTO\signup_process.php on line 22 Notice: Undefined index: userID in C:\xampp\htdocs\php_test\iNTO\signup_process.php on line 30 Fatal error: Uncaught Error: Call to undefined function fetchAll() in C:\xampp\htdocs\php_test\iNTO\signup_process.php:32 Stack trace: #0 {main} thrown in C:\xampp\htdocs\php_test\iNTO\signup_process.php on line 32

自分で考えてみて限界になったので質問させていただきました。

退会済みユーザー👍を押しています

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

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

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

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

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

guest

回答2

0

ベストアンサー

おそらくもっと単純な話

<form action="signup_process.php" method="POST">

[ ]method
↑ここの全角スペース

signup_process.php冒頭で下記のように入れてみるとわかりますし、

php

1<?php 2echo $_SERVER['REQUEST_METHOD']; 3 4//GET

URLもsignup_process.php?email=&userID=&password=&passwordCheck=のようになっているはずです。

つまりformのmethod属性が正しく認識されていないわけですね。
method属性の初期値はGETなので、「GETならうまくいった」は「method属性効いてないけどデフォルトがGETだからたまたまうまくいった」だけとなります。

投稿2019/09/16 07:26

m.ts10806

総合スコア80875

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

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

kmtym1998

2019/09/16 08:01

ご回答ありがとうございます。 とてつもなくダサいミスでした。助かりました。
m.ts10806

2019/09/17 00:38

解決されたようで何よりです。 実際に動かしてみてわかったことではあるので、ダサいとかは思わないですが、get/postをデバッグする際には「そもそもリクエストがpostかどうか」というところから疑うべきというところですね。
guest

0

「Notice: Undefined index: userID 」が出るってことは、'userID'をキーにした配列の参照をしようとして値が詰められていなかった場合。

isset($_POST['userID'])で存在チェックをするときは、そういうエラーは出ないものの、
おそらくechoの行と$temp = $_POST['userID'];の行で参照してそのときのエラーだろうね。

try以降の処理は、$_POST['userID']が存在する時に行うべきで、
エラーなどでその処理をしてはいけないのであれば、

php

1if (isset($_POST['userID'])) { // DBアクセスに必要な変数が揃っていることをisset()で確認、もしも複数の変数が必要ならここで&&条件ですべて確認しておくとよい 2 try { // DBアクセスの処理をこの中に 3 ~~ 4 } 5 catch(PDOException $error) { // DBアクセス時の例外をココでキャッチ 6 ~~ 7 } 8 catch(Exception $error) { // 起こりにくいかもしれないけどDB以外の部分で例外発生したらココでキャッチ 9 ~~ 10 } 11}

などとすればよいかと。

もう一点、

php

1$stmt->bindParam('userID', $temp, PDO::PARAM_STR);

でなく

php

1$stmt->bindValue(':userID', $temp, PDO::PARAM_STR);

だね。PHP: PDOStatement::bindValue - Manual参照。

投稿2019/09/16 05:58

編集2019/09/16 06:08
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

kmtym1998

2019/09/16 06:24

ご回答ありがとうございます。 申し訳ありません、情報が足りていなかったかもしれません。 フォームに値を入力したのにもかかわらず、$_POSTに入力した値が格納されておらず、Noticeが出ています。フォームをすべて埋め、送信ボタンを押したあと、signup.process.phpで、「print_r($_POST)」と記述すると、「Array()」という結果が返ってきます。$_POSTで値が受け取れていないのはどのような原因が考えられるでしょうか。 $stmtの記述のところに関してはありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問