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

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

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

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

PHP

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

セッション

Sessionはクライアントがサーバに送ったすべてのリクエストのことを指します。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

ログイン

ログインは、ユーザーがコンピューターシステムにアクセスするプロセスの事を呼びます。

Q&A

解決済

2回答

1297閲覧

PHP 新規登録画面 $_SSESIONを使っていたらよくわからなくなりました

Tyo2

総合スコア1

POST

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

PHP

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

セッション

Sessionはクライアントがサーバに送ったすべてのリクエストのことを指します。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

ログイン

ログインは、ユーザーがコンピューターシステムにアクセスするプロセスの事を呼びます。

0グッド

2クリップ

投稿2021/09/15 17:22

前提・実現したいこと

前回(解決ずみ)からの続きでログイン画面を制作途中なのですが
教本にあった新規登録のチェック画面に、書き直す機能を付け足そうと$_SSESIONを使って制作していました。
↓(こんなの)
if ($_REQUEST['action'] == 'rewrite') {
$_POST = $_SESSION['join'];
header('Location: check.php');
exit();
}
実際コードを書いて試しているといつの間にかよくわからなくなってきて
色々いじりすぎて($_SESSIONを$_POSTにしてみたり)自分では理解できないことが起こって困っています。
最初の新規登録画面ではセッションに値を入れてもいないのにチェック画面に行くとセッションに
値が入っているではありませんか(var_dump()で確認済み)

もしかしたらセッションに関して自分では理解していないことがまだあったりするかもしれないので
質問しました。
もうつ付け足し質問をしたいのですが元々DBに接続はできていたのですが
いじりすぎたせいか送信ができなくなりました。
そこも教えていただきたいです。

エラーメッセージに関しては何も出ていません

login.php <?php ini_set('display_errors', "On"); $name = filter_input(INPUT_POST, 'name'); $email = filter_input(INPUT_POST, 'email'); $password = filter_input(INPUT_POST, 'password'); $err_msg = array(); //var_dump($_SESSION); __確認するとここには値は入っていない__ if (!empty($_POST)) { if ($name === "") { $err_msg['name'] = '入力必須です'; }elseif (strlen($name) > 12) { $err_msg['name'] = '12文字以内で入力してください'; } if ($email === "") { $err_msg['email'] = '入力必須です'; }elseif (strlen($email) > 255) { $err_msg['email'] ='255文字以内で入力してください'; } if ($password === "") { $err_msg['password'] = '入力してください'; }elseif (strlen($password) > 255 || strlen($password) < 6) { $err_msg['password'] = '6文字以上255文字以内で入力してください'; }elseif (!preg_match("/^[a-zA-Z0-9]+$/", $password)) { $err_msg['password'] = '半角英数字で入力してください'; } if (empty($err_msg)) { //var_dump($_SESSION); __ここの時点でも値は入っていなかった__ header('Location: check.php'); exit(); } } //if (isset($_REQUEST['action']) == 'rewrite') { // $arr = array($_SESSION['name'],$_SESSION['email']); // list($name, $email) = $arr; // $error['rewrite'] = true; //}                   __書き直しするためのコード__ ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <link rel="stylesheet" href="style.css"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>login</title> </head> <body> <h1>登録画面</h1> <form action="" method="post"> <div class="err_msg"><?php if (array_key_exists('name', $err_msg)) : ?><?php echo $err_msg['name']; ?><?php endif; ?></div> <label for=""><span>ユーザーネーム</span> <input type="text" name="name" id="" placeholder="12文字以内" value="<?php echo htmlspecialchars($name, ENT_QUOTES)?>"><br> </label> <div class="err_msg"><?php if (array_key_exists('email', $err_msg)) : ?><?php echo $err_msg['email']; ?><?php endif; ?></div> <label for=""><span>メールアドレス</span> <input type="email" name="email" id="" value="<?php echo htmlspecialchars($email, ENT_QUOTES)?>"><br> </label> <div class="err_msg"><?php if (array_key_exists('password', $err_msg)) : ?><?php echo $err_msg['password']; ?><?php endif; ?></div> <label for=""><span>パスワード</span> <input type="text" name="password" id="" value=""><br> </label> <div class="submit"><input type="submit" value="送信"></div> </form> </body> </html>
check.php <?php session_start(); require ('dbconnect.php');  //__DB接続はちゃんとできてます__ //var_dump($_SESSION); __確認すると値が入っている__ if(!empty($_POST)) { $stmt = $db->prepare('INSERT INTO members SET name=?, email=?, password=?'); $stmt->execute(array( $_SESSION['name'], $_SESSION['email'], $_SESSION['password'] )); unset($_SESSION); //header('Location:----.php'); __DB送信後メインページへ__ //exit(); } ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <link rel="stylesheet" href="style.css"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>CloPos login</title> </head> <body> <h1>確認画面</h1> <form action="" method="post"> <label for=""><span>ユーザーネーム</span> <div class="session"><?php echo htmlspecialchars($_SESSION['name'], ENT_QUOTES); ?></div> <br> </label> <label for=""><span>メールアドレス</span> <div class="session"><?php echo htmlspecialchars($_SESSION['email'], ENT_QUOTES); ?></div> <br> </label> <label for=""><span>パスワード</span> <div class="session"><?php echo htmlspecialchars($_SESSION['password'], ENT_QUOTES); ?></div> <br> </label> <a href="login.php?action=rewrite" class="btn-top-radius">書き直す</a> <input type="submit" value="送信" /> </form> </body> </html>

試したこと

$_SSESIONを$_POSTにした
var_dump()で$SESSIONの中身確認

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答2

0

session_start()
はセッションを使用したいスクリプトで書かれてないと利用できません。

あと$_POSTや$_GETなどはリクエストにより自動的に設定されるスーパーグローバル変数なので、任意の値を設定してはいけませんし、設定したところでリクエストされるわけではないので何も起きません。

投稿2021/09/15 22:40

m.ts10806

総合スコア80875

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

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

Tyo2

2021/09/16 05:23

login.phpにsession_start()がないよということですかね? 一応入れてない理由を書きますとlogin.phpでsession_startがなかったら上記の問題を挙げている通りcheck.phpにデータ送信がされないと思ったからです。 filter_inputをしなくても良いということですか?
m.ts10806

2021/09/16 10:09

セッションと送信関係ないです。 session_start()しないと当該スクリプトでセッション使えないというのは事実です。 あと、filter_inputするなら$_POSTは不要です。
Tyo2

2021/09/16 16:12

check.phpにページが移ると$_SESSIONに値が入っているのは何故ですかね? unset($_SESSION)で何度か消してみましたが、check.phpに移ると消したはずの値が復活しています。 $_POSTはcheck.phpでSQLに値を入れるためのスイッチとして!empty($_POST)をしてるのですけど これはしないほうが良いということでしょうか? とりあえず別の方法を模索しながらやってみます。
m.ts10806

2021/09/16 22:55

提示したリンクをきちんと読んだのなら https://www.php.net/manual/ja/session.examples.basic.php unset()を使うことはありません。読んでください。 基本と仕様から学んでください。 (私が何を言ってるか分からないなら、分かるくらいにならないとお話にならないという意味です。解決はしません。)
Tyo2

2021/09/19 08:13

すみません この質問の仕方が悪かったです。 check.phpに移ると$_SESSIONは['name']['email']['password']しか値は入れていないはずなのに ['newsession']という値があって、なぜそれがあるのかという質問の仕方をするべきでした。 このセッションは以前同じファイル内か別のファイルでセッションの使い方を学ぶために作ったものでそれが消えていなかったのかなと思います。 説明の仕方が悪いかもしれませんが、MAMPのsession.save_pathで指定されているファイルの中身を 見て、値を消してみたら自分がなぜだ?と思っていた問題が解消されました。 ただちゃんとDB接続はできるようになりましたが自分のPHP構文の実力不足のせいかページ移動でつまづいているので別で質問させていただきたいと思います。
Tyo2

2021/09/19 08:19

あとunsetで全てのsessionを削除するなとマニュアルでありますが 私のコードで例えるとunset($_SESSION['name'])をすると次のページから$_SESSION['name']を 使えなくなるし、作れなくもなるということでしょうか?
m.ts10806

2021/09/19 08:32

>ということでしょうか? 百聞は一見に如かず。試してみたら良いです。
guest

0

自己解決

MAMPのsession.save_pathで指定されているファイルの中身にある値を消して
リセットした。

投稿2021/09/19 08:22

Tyo2

総合スコア1

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問