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

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

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

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

セッション

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

ログイン

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

Q&A

1回答

1277閲覧

phpを使ってログインした後の画面移動

kqosu19

総合スコア0

PHP

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

セッション

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

ログイン

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

0グッド

2クリップ

投稿2020/11/27 07:16

編集2020/11/27 12:06

前提・実現したいこと

phpを使って、ログインした後に画像投稿フォームに飛んで画像を投稿できる機能を作っているのですが、 ログインした後に画像投稿フォームに飛ぶのですが、投稿した後に、別のページに飛んで、’アップロードされました。’などの表示がされ”戻る”ボタンを押すと、毎回ログインするページに飛び再度ログインしないとちゃんと投稿されているのか見れません。 ”戻る”を押した後再度ログインしなくても画像投稿フォームに戻るにはどうしたらいいですか。ご教授ください。
ここに質問の内容を詳しく書いてください。
■■な機能を実装中に以下のエラーメッセージが発生しました。

発生している問題・エラーメッセージ

一度ログインしているのに画像投稿後再度ログインを求められる

エラーメッセージ

該当のソースコード

login_form.php

<?php session_start(); ini_set( 'display_errors', 1); ini_set( 'error_reporting', E_ALL ); require_once '../classes/UserLogic.php'; $result = UserLogic::checkLogin(); if($result) { header('Location: mypage.php'); return; } $err = $_SESSION; $_SESSION = array(); session_destroy(); ?> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>ログイン画面</title> </head> <body> <div> <img src="../img00/travel.jpg"> <h2>ログインフォーム</h2> <?php if (isset($err['msg'])) : ?> <p><?php echo $err['msg']; ?></p> <?php endif; ?> <form action="../upload/upload_form.php" method="POST"> <div class="email"> <p> <label for="email">メールアドレス:</label> <input type="email" name ="email"> <?php if (isset($err['email'])) : ?> <p><?php echo $err['email']; ?></p> <?php endif; ?> </p> </div> <p> <label for="username">パスワード:</label> <input type="text" name ="password"> <?php if (isset($err['password'])) : ?> <p><?php echo $err['password']; ?></p> <?php endif; ?> </p> <p> <input type="submit" value="ログイン"> </p> </form> <a href="signup_form.php">新規登録はこちら</a> <p></p> </div> <style> img {margin-top: 10px;} div {text-align: center;} .email {margin-right: 37px;} body {background-color: #CCFFFF;} h2, label, input {margin-top: 20px;} </style> </body> </html>

upload_form.php

<?php ini_set( 'display_errors', 1); ini_set( 'error_reporting', E_ALL ); session_start(); // フォーム require_once '../classes/UserLogic.php'; require_once '../dbc/dbc.php'; require_once "dbc.php"; $files = getAllFile(); //エラーメッセージ $err = []; //バリデーション if(!$email = filter_input(INPUT_POST, 'email')) { $err['email'] = 'メールアドレスを記入してください。'; } if(!$password = filter_input(INPUT_POST, 'password') ) { $err['password'] = 'パスワードを記入してください。'; } if (count($err) > 0) { // エラーがあった場合は戻す $_SESSION = $err; header('Location: ../public/login_form.php'); return; } //ログイン成功時の処理 $result = UserLogic::login($email, $password); //ログイン失敗時の処理 if (!$result) { header('Location: ../public/login_form.php'); return; } ?> <!-- ①フォームの説明 --> <!-- ②$_FILEの確認 --> <!-- ③バリデーション --> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>アップロードフォーム</title> </head> <style> body { padding: 30px; margin: 0 auto; width: 50%; background-color: #CCFFFF; } textarea { width: 98%; height: 60px; } .file-up { margin-bottom: 10px; } .submit { text-align: right; } .btn { display: inline-block; border-radius: 3px; font-size: 18px; background: #67c5ff; border: 2px solid #67c5ff; padding: 5px 10px; color: #fff; cursor: pointer; } </style> <body> <form enctype="multipart/form-data" action="./file_upload.php" method="POST"> <div class="file-up"> <input type="hidden" name="MAX_FILE_SIZE" value="1048576" /> <input name="img" type="file" accept="image/*" /> <a href="../public/mypage.php">マイページへ</a> </div>
<div> <textarea name="caption" placeholder="キャプション(140文字以下)" id="caption" ></textarea> </div> <div class="submit"> <input type="submit" value="送信" class="btn" /> </div> </form> <div> <?php foreach($files as $file): ?> <img src=<?php echo "{$file['file_path']}"; ?> alt=""> <p><?php echo h("{$file['description']}"); ?></p> <?php endforeach; ?> </div>
</body> </html>

file_upload.php

<?php ini_set( 'display_errors', 1); ini_set( 'error_reporting', E_ALL ); session_start(); // require_once '../classes/UserLogic.php'; //①ファイルの保存 //②DB接続 //③DBへの保存 require_once "../upload/dbc.php"; // ファイル関連の取得 $file = $_FILES['img']; $filename = basename($file['name']); $tmp_path = $file['tmp_name']; $file_err = $file['error']; $filesize = $file['size']; $upload_dir = 'images/'; $save_filename = date('YmdHis') . $filename; $err_msgs = array(); $save_path = $upload_dir. $save_filename; // キャプションを取得 $caption = filter_input(INPUT_POST, 'caption', FILTER_SANITIZE_SPECIAL_CHARS); //キャプションのバリデーション //未入力 if(empty($caption)) { array_push($err_msgs, 'キャプションを入力してください。'); echo '<br>'; } //140文字か if(strlen($caption) > 140) { echo 'キャプションは140文字以内にしてください。'; echo '<br>'; } //ファイルのバリデーション // ファイルサイズが1MB未満か if($filesize > 1048576 || $file_err == 2) { echo 'ファイルサイズは1MB未満にしてください。'; echo '<br>'; } //拡張は画像形式か $allow_ext = array('jpg', 'jpeg', 'png'); $file_ext = pathinfo($filename, PATHINFO_EXTENSION); if(!in_array(strtolower($file_ext), $allow_ext)) { array_push($err_msgs, '画像ファイルを添付してください。'); echo '<br>'; } if (count($err_msgs) === 0) { //ファイルはあるかどうか? if (is_uploaded_file($tmp_path)) { if (move_uploaded_file($tmp_path, $save_path)) { echo $filename . 'を'. $upload_dir. 'アップしました。'; // DBに保存(ファイル名、ファイルパス、キャプション) $result = fileSave($filename, $save_path, $caption); if ($result) { echo'データベースに保存しました!'; } else { echo 'データベースへの保存に失敗しました!'; } } else { echo 'ファイルが保存できませんでした。'; } } else { echo 'ファイルが選択されていません。'; echo '<br>'; } } else { foreach($err_msgs as $msg) { echo $msg; echo '<br>'; } /// 更新日時順で並び替える関数 $sort_by_lastmod = function($a, $b) { return filemtime($b) - filemtime($a); }; /// 並び替えして出力 $files = glob( 'path/to/files/*.*' ); usort( $files, $sort_by_lastmod ); foreach( $files as $file ) { $timestamp = date('Y-m-d H:i:s', filemtime( $file ) ); echo basename( $file ) . ' : ' . $timestamp . '<br>'; } } ?>

<a href= "upload_form.php">次ページ</a>

<style> body { background-color: #CCFFFF; } </style>

UserLogic.php

<?php ini_set( 'display_errors', 1); ini_set( 'error_reporting', E_ALL ); require_once '../dbconnect.php'; class UserLogic { /** * ユーザーを登録する * @param array $userData * @return array|bool $result|false */ public static function createUser($userData) { $result = false; $sql = 'INSERT INTO users (name, email, password) VALUES (?, ?, ?)'; //ユーザーデータを配列に入れる $arr = []; $arr[] = $userData['username']; $arr[] = $userData['email']; $arr[] = password_hash($userData['password'], PASSWORD_DEFAULT); try { $stmt = connect()->prepare($sql); $result = $stmt->execute($arr); return $result; } catch(\Exception $e) { return $result; } } /** * ログイン処理 * @param string $email * @param string $password * @return bool $result */ public static function login($email, $password) { // 結果 $result = false; // ユーザーをemailから検索して取得 $user = self::getUserByEmail($email); if (!$user) { $_SESSION['msg'] = 'emailが一致しません。'; return $result; } // パスワードの照会 if (password_verify($password, $user['password'])) { // ログイン成功 session_regenerate_id(true); $_SESSION['login_user'] = $user; $result = true; return $result; } $_SESSION['msg'] = 'パスワードが一致しません。'; return $result; } /** * emailからユーザーを取得 * @param string $email * @return array|bool $user|false */ public static function getUserByEmail($email) { //SQLの準備 //SQLの実行 //SQLの結果を返す $sql = 'SELECT * FROM users WHERE email = ?'; //emailを配列に入れる $arr = []; $arr[] = $email; try { $stmt = connect()->prepare($sql); $stmt->execute($arr); //SQLの結果を返す $user = $stmt->fetch(); return $user; } catch(\Exception $e) { return false; } } /** * ログインチェック * @param void * @return bool $result */ public static function checkLogin() { $result = false; //セッションにログインユーザーが入っていなかったらfalse if (isset($_SESSION['login_user']) && $_SESSION['login_user'] ['id'] > 0) { return $result = true; } return $result; } /** * ログアウト処理 */ public static function logout() { $_SESSION = array(); session_destroy(); } } ```ここに言語名を入力 php html css MAMP ``` ### 試したこと ぐぐったりyahoo質問箱を使いました。 ここに問題に対して試したことを記載してください。 ### 補足情報(FW/ツールのバージョンなど) ここにより詳細な情報を記載してください。

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

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

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

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

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

m.ts10806

2020/11/27 07:35

コードはマークダウンのcode機能を利用してご提示ください(ヘルプページ参照) >ぐぐったり どういうキーワードでどういう記事を読んでどう対応したのか具体的に記載してください。 >yahoo質問箱を使いました。 「知恵袋」でしょうか。 ただ、同じ質問を投稿したのでしたら「マルチポスト」です。こちらもヘルプページを確認し、ガイドラインの通り対応してください。
m.ts10806

2020/11/27 07:36

ざっと見た感じコードが半端に提示されてるような? あなたが書いたコードはあなたしか知りませんので原則すべて提示してください。 人が違えば同じ要件でもコードはかわってきます
kqosu19

2020/11/27 12:11

返信と補足ありがとうございます。 コード一通り提示しました。 これは、youtubeに上がっていた”ログインフォーム”と、”画像投稿フォーム”を自分なりにくっつけたのですが、つまずいたので初めて質問させていただきました。  まだ気になるところがあったら、気軽に聞いてください。 回答お待ちしております。
guest

回答1

0

”戻る”ボタンを押すと、毎回ログインするページに飛び

そういう作りなのでは?
ご自身でつくっていて動作が想定外なのですか?
遷移するページがおなじurlドメインで、すべてsession_start()してあれば
ブラウザを閉じなければセッションは引き継がれます(クッキー次第)

投稿2020/11/27 07:37

yambejp

総合スコア114837

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

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

kqosu19

2020/11/27 12:12

返信ありがとうございます。 コード一通り提示しました。 これは、youtubeに上がっていた”ログインフォーム”と、”画像投稿フォーム”を自分なりにくっつけたのですが、つまずいたので初めて質問させていただきました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問