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

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

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

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

PHP

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

Q&A

解決済

2回答

1072閲覧

URLにその人個人のプロフィール情報などを乗っける方法

aoihello

総合スコア31

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

PHP

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

1グッド

0クリップ

投稿2022/09/05 07:47

編集2022/09/05 07:52

前提

ログインは問題なくできログイン情報などはSESSIONで取得しています。ログイン後はプロフィールページに飛ばし、入力した値がみれている状況なのですが、今のままだと、プロフィール画面を見ている際に皆同じURLになっていて、他の人がログインすると書き変わってしまうと思い、当サイトなどにも使われている、URLに個人の情報を乗っけたURLを作りたいと思いました。

実現したいこと

他の人がログインしても変わらないように、個人のURLをつけたプロフィール画面などを作りたいです。

該当のソースコード

ログイン用のコードです。

php

1<?php 2$err_msg=""; 3session_start(); 4if(isset($_POST['login'])){ 5 $nickname = $_POST['nickname']; 6 $password = $_POST['password']; 7 try { 8 $db = new PDO('mysql:host=---------'); 9 $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 10 $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 11 $sql = 'SELECT name, nickname, password, comment FROM Info where nickname = :nickname AND password = :password'; 12 $stmt = $db->prepare($sql); 13 $stmt->bindValue(':nickname', $nickname, PDO::PARAM_STR); 14 $stmt->bindValue(':password', $password, PDO::PARAM_STR); 15 $stmt->execute(); 16 $result = $stmt->fetch(); 17 $stmt = null; 18 $db = null; 19 if(!empty($result)){ 20 $_SESSION['name'] = $result['name']; 21 $_SESSION['nickname'] = $result['nickname']; 22 $_SESSION['comment'] = $result['comment']; 23 header('Location:https://-----------'); 24 exit(); 25 }else{ $err_msg = "アカウント情報が間違っています。";} 26 }catch (PDOExeption $e) { 27 echo "値が入力されていません。\n"; 28 echo $e->getMessage(); 29 exit(); 30 } 31} 32?> 33<!DOCTYPE html> 34<html lang="ja"> 35<body> 36 <h1>ログイン</h1> 37 <form action="" method="POST"> 38 ID:<input type="text" name="nickname"><br> 39 Password:<input type="password" name="password"><br> 40 自動ログイン:<input type="checkbox" name="auto" value="fales"><br> 41 <input type="hidden" name="csrf_token" value=""> 42 <input type="submit" value="login" name="login"> 43 <input type="reset" value="reset"> 44 <a href="-------" class="fir-pro">初めてのログイン</a> 45 </form> 46</body> 47</html>

ログイン後に飛ばされるプロフィール画面のコードです。

php

1<?php 2session_start(); 3?> 4<!DOCTYPE html> 5<!--------------------------------共通のHTML--------------------------------------------------> 6<html lang="ja"> 7 <head> 8 <meta charset="utf-8"> <!--このページの情報--> 9 <meta name="viewport" content="width=device-width, initial-scale=1"> 10 <link rel="shortcut icon" href="/favicon.ico"> <!--ブックマークのアイコン--> 11 <link rel="apple-touch-icon" href="/apple-touch-icon.png"> 12 <meta name="description" content="分からないことを聞いたり説明し、分からないことをなくす.より理解を深めるwebsite。"> 13 <title>Arch Education</title> 14 <link rel="stylesheet" href="------" type="text/css"> 15 </head> 16 <body> 17<!-----------------------------header-他のページでも共通のヘッダー----------------------------> 18 <header> 19 <div class="body header header-inner header-logo"> 20 <img src="/images/header.jpg" alt="header.jpg" width="100" height="60"> 21 <a href="" class="header-botton">設定</a> 22 <h1 href="" class="header-name">profile</h1> 23 </div> 24 </header> 25<!-----------------------------nav-----------------------------------------------------------> 26<!---------------------------------------main-----------------------------------------------> 27<main> 28 <dl>[お名前]</dl> 29 <?php 30 echo $_SESSION['name']; 31 ?> 32 <dl>[ID]</dl> 33 <?php 34 echo $_SESSION['nickname']; 35 ?> 36 <dl>[自己紹介]</dl> 37 <?php 38 echo $_SESSION['comment']; 39 ?> 40 <a href="------" class="fix-pro">プロフィール編集</a> 41 42</main> 43<!-----------------------------------footer-完成----------------------------------------------> 44 <footer> 45 <div class="body wrapper footer btn-orange btn-circle btn-circle-a"> 46 <a href="-------" class="btn btn-orage btn-circle btn-circle-a">他の質問</a> 47 <a href="-------" class="btn btn-orage btn-circle btn-circle-a">Research</a> 48 <a href="-------" class="btn btn-orage btn-circle btn-circle-a">+Q</a> 49 <a href="" class="btn btn-orage btn-circle btn-circle-a">問題集</a> 50 <a href="" class="btn btn-orage btn-circle btn-circle-a">Profile</a> 51 </div> 52 <a href="" class="footer-copyright"> 53 &copy; Arch 54 </a> 55 </footer> 56 </body> 57</html>

試したこと

インターネットでURL関連のことを調べていて当サイトで2019年に同じ質問をされている方がいたのですが、やり方までは書いておらず、URLに情報を乗っける方法がわかりません。
当サイトの他の質問者のものです。
https://teratail.com/questions/182999
Yahoo知恵袋の同じ質問者のものです。
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q12265339882

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

このサイトでは禁止行為の丸投げ方式のようにも感じるのですが、調べているとInstagramのアプリ内でのプロフィールシェア方法などがヒットしてしまい、見つけられませんでした。コンピュータ関連の語彙が足らず、十分な検索ができていないのだと思うのですが、この検索方法なら出てくると思うなどアドバイスもいただけたら幸いです。
よろしくお願いいたします。
サイトに関する情報の部分は----で隠しています。

Maximillion👍を押しています

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

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

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

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

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

m.ts10806

2022/09/05 07:50

>当サイトの他の質問者のものです。 後ろにスペースがついていて正しくリンクになっていないようです。
aoihello

2022/09/05 07:53

ご指摘誠にありがとうございます。 編集いたしました。よろしくお願いいたします。
guest

回答2

0

例えばteratailなら私の個人ページは「https://teratail.com/users/yambejp」
つまりユニークなハンドルを付けられるなら「http://exsample.com/index.php?users=yambejp」
的な処理をrewriteしてやればよいということです
もっと単純に「https://exsample.com/index.php?uid=123」のような
任意に振られたユーザーidを使うと管理しやすいでしょう

投稿2022/09/05 08:00

yambejp

総合スコア114863

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

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

aoihello

2022/09/05 08:31

ご回答、誠にありがとうございます。 今回は、sessionに対する理解が深まったこともあり、m.ts10806様のご回答をベストアンサーにさせていただいた次第です。 今後とも、ご教授いただければ幸いです。
guest

0

ベストアンサー

他の人がログインすると書き変わってしまう

そもそも動的にページを作っているわけで、
表示する情報をログイン情報から取得しているのであれば
問題は起きません。

同一端末でもブラウザが違えば別セッションになるので、
複数のブラウザを用いて試してみればわかると思います。

ブラウザ1でAさんでログイン。プロフィールページにアクセス
そのまま
ブラウザ2でBさんでログイン。プロフィールページにアクセス
ブラウザ1で画面更新
ブラウザ2で画面更新

teratailで言うと、「アカウント設定」の画面は全てのユーザが
https://teratail.com/users/setting/profile
ですが、
例えば100人が順番にアクセスしていったとしても、
ログインしているユーザーのセッションがどうなるわけでもなく、
あくまでそのセッションのユーザーとして操作している画面から変わることはありません。

ちなみに

URLに個人の情報を乗っけたURLを作りたいと思いました。

こちらをした場合、URL直アクセスが可能となるので、
「ログインユーザと同じユーザか否か」でページ表示に分岐をつけなければいけません。
全くの他人がアクセスして良いのかどうかという要件のところから詰める必要があるという意味ですね。
見れて良かったとしても見れる情報を制限したり、公開情報をユーザで設定したり、
色々な要件が増えていくと思います。

投稿2022/09/05 08:01

編集2022/09/05 08:03
m.ts10806

総合スコア80850

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

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

m.ts10806

2022/09/05 08:13

もっと言えばリクエストされた先にレスポンスとして画面返してるだけなので、別セッションで勝手に書き換わること自体がありえません。 データベースは同じでサーバは同じでも、各セッションとはあくまで1on1の関係です。
aoihello

2022/09/05 08:28

ご回答、誠にありがとうございます。 URLの方がsessionよりもユーザで行う設定が多くできるようになるというようなことでしょうか。
m.ts10806

2022/09/05 08:35

>URLの方がsessionよりもユーザで行う設定が多くできるようになるというようなことでしょうか。 何を聞きたいのかいまいちわかってないので外してたら申し訳ないですが、 元々の要件や実装次第なので、「如何様にもできる」というふわっとした返答になります。
aoihello

2022/09/05 08:55

URLでというものがsessionの上位互換のようなものに当たるのだと勝手に勘違いしていました。プログラムなので何通りも書き方のあるうちの1つということですね。 度々ご回答ありがとうございました。
m.ts10806

2022/09/05 09:27

URLはあくまでリクエストを送信するための外向けの文字情報 セッションはサーバ内部で持っている内部のオブジェクトなので全く別の概念です。 これら含めて「リクエスト」「レスポンス」について、Webサーバの仕組み(どのような道を通って画面表示に至るのか)を理解しておいた方が良いです。 Web開発をするのでしたら必須です。(言語に限らないのできちんと覚えれば他の言語でも考え方は使える)
aoihello

2022/09/05 09:29

ありがとうございます! 全然別物なんですね。またお勉強してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問