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

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

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

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

Q&A

解決済

1回答

412閲覧

会員登録と同時にメッセージフォームを作成したい

2525mi

総合スコア8

PHP

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

0グッド

1クリップ

投稿2020/05/09 08:12

編集2020/05/10 02:00

練習として、質問箱やマシュマロのようなアプリを作ってみたいと思っています。
こちら https://qiita.com/qwertyuiopngsdfg/items/597da67387723a5aedad のサイトを参考に会員登録やログイン・ログアウトの機能はできたのですが、会員登録すると同時に会員それぞれのメッセージフォームをどう作成すればいいのかが分かりません。
どういう道筋でやっていけばいいか、ご教授いただけますと幸いです。

【追記】
ログイン・会員登録機能はほぼリンク先のコードと同じです。メッセージフォーム画面は以下のように考えています。この画面を、ユーザーが会員登録すると同時に自動でユーザーごとに生成したいと思います。

html

1<!DOCTYPE html> 2<html> 3 <head> 4 <meta charset="utf-8" /> 5 <title>box page</title> 6 </head> 7 <body> 8 <p> 9 <h2>メール送信フォーム</h2> 10 </p> 11 <form action="confirm.php" method="post"> 12 <textarea name="content" cols="50" rows="5"></textarea> 13 <input type="submit" name="send" value="送信"> 14 </body> 15</html>

また、メッセージのデータベース部分は以下のコードを使いたいと考えています。

PHP

1try{ 2 $pdo = new PDO(DSN, DB_USER, DB_PASS); 3 $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 4 $pdo->exec("create table if not exists message( 5 id int not null auto_increment primary key, 6 user_id int not null, 7 post_time timestamp not null, 8 body text, 9 ip_address text, 10 created timestamp not null default current_timestamp) 11 "); 12}catch(Exception $e){  13   echo $e->getMessage() . PHP_EOL; 14}

これらをどう組み合わせて使えばいいのかが分かりません。情報追加・修正依頼ありがとうございます。

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

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

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

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

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

m.ts10806

2020/05/09 08:17

>会員登録すると同時に会員それぞれのメッセージフォームを ちょっとこれだけでは意味が分かりません。設計はどこまでしているのでしょう? 要件がふわっとしていては道筋も何もないかと思います。 HowよりWhat/Whyです。
m.ts10806

2020/05/10 02:10

create table の意味は分かってるんでしょうか。 「動的」について理解されてますでしょうか。
2525mi

2020/05/10 02:34

ユーザーごとにテーブルがあればいいのかなと思い、create tableにしました。「動的」については検索した知識しかありません。
m.ts10806

2020/05/10 02:37

>ユーザーごとにテーブルがあればいいのかな 1000人いたら1000テーブル どうやって管理しますか? 「テーブルの正規化」から学んだ方が良いと思います。 例えばteratailの質問って、質問ごとにテーブルがあるように思いますか? この質問の番号が260085ということは260085個テーブルがあることになります。
2525mi

2020/05/11 04:59

テーブルは一人一つではなく、一つのテーブルにユーザー名などを紐づけたデータをまとめて挿入すればいいということまでは分かったのですが、質問ページをどう作ればいいのかが分かりません。 上記のメッセージフォームHTMLが会員登録されると同時に「マイページ」としてhttp://example/username という感じで生成され、そこに質問を投げるとそのページのユーザーidを取得してデータベースにメッセージと共に投げるという風にしたいのですが、上記のhtmlをユーザーごとに増やすにはどうすればいいのでしょうか。
m.ts10806

2020/05/11 06:06

ふむ。基本的なところですね。 前に回答した覚えがなくもない内容ですが、ヒントとして投稿してみます。
guest

回答1

0

ベストアンサー

データベースには「キーとなる情報」というものを通常は設定します。
専門用語的には「一意となる」という表現をしますが、これは「その情報だけで特定できる情報」という意味を指します。

よくあるのが「○○ID」というものですね。
teratailでこの質問のURLはquestions/260085となっていますが、実はこれ、「ルーティング」という考え方のもと、URL自体が「リクエスト」となっています。

/で区切り、1番目が○○ 2番目が○○ といったルール付けをシステム側で行う行為です。
フレームワークにはよくある考え方です。
別に「questionsというフォルダの配下に260085というフォルダがある」というわけではありません。

で、URLの考え方はともかく、要は「一意となるキー情報」があれば、欲しい情報を特定できるわけです。
つまり、どのような形であれ、「一意となるキー情報」を渡してPHP側で受けとれば、その情報をもってデータベースに問い合わせすることで、欲しい情報が1件だけ取れます。
その情報を元にHTMLを出力すれば、「特定の情報だけで構成されたページ」ができあがります。

実際に質問者さんがやりたそうなことはteratailで実現されています。
ユーザー情報ページがそれに当たります。
例えば質問者さんのページ

teratail上の表示名は一意である仕様のようですので、このURLでアクセスすることで対象のユーザー情報が取得でき、予め用意されたテンプレートにそれぞれの情報を出力させています。

/区切りでのアクセス方法については「リクエスト index.phpに集約」とかで調べてください。

下記はクエリストリングでアクセスした簡易的な例

php

1// url で ?user=test 2 3$userid = $_GET['user']; 4 5//省略: $useridでuserテーブルに問い合わせしてユーザー情報を取得する処理 6?> 7<p>ユーザー名:<?php echo $userData["user_name"] ?></p>

これで、「userの設定値によって該当するユーザー名が出力される」が実現できます。
※もちろん、存在しないキーが指定された場合の対処とかXSSは適宜やってください。

投稿2020/05/11 06:18

m.ts10806

総合スコア80875

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問