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

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

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

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

PHP

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

SNS

SNS(ソーシャル・ネットワーキング・サービス)は、 人と人とのつながりを促進したり、サポートしたりすることが可能なコミュニティ型のWebサービスです。

Q&A

解決済

3回答

304閲覧

PHPによるSNサイトの作成

Chandler_Bing

総合スコア673

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

PHP

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

SNS

SNS(ソーシャル・ネットワーキング・サービス)は、 人と人とのつながりを促進したり、サポートしたりすることが可能なコミュニティ型のWebサービスです。

1グッド

0クリップ

投稿2018/12/13 08:05

PHPで簡易のFB(SNSサイト)を作成しています。

今考えているSNSサイトの構造は

①利用にはログイン(新規登録)が必要。
②自分でツイートできる。
③友達リクエストの申請、承認、非承認
ができる。
④互いに友達同士のツイートのみ1ページ10件で表示する。

①,②と④一部に関しては、
ツイートをクラス化、ツイートはデータベースに保存し10件取ってくる。
登録者とツイートはリレーションを保つ様にして、登録者テーブルとツイートテーブルに分けて登録する。というイメージが出来ています。これに関しては実装した事があるので出来そうですが、

③,④に関してイメージが湧きません。
例えば友達申請ですが、どうやって友達申請申請をするのですか?

例えば登録者Aさんが登録者Bさんに対して
友達申請などは、HTMLのaタグなので行うのでしょうか。

それとも、何かメールの様な機能で情報を投げる関数などがあるのでしょうか。
特に③の機能をどう実装するか教えて頂きたいです。

使用環境
PHP、HTML/CSS、My SQL

bochan2👍を押しています

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

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

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

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

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

m.ts10806

2018/12/13 08:06

細かいですがタイトルちょっとミスってるので修正しておいてください> SN
m.ts10806

2018/12/14 21:57

細かいですがタイトルちょっとミスってるので修正しておいてください> SN あとできれば解決したのであればどう解決したのか回答にコメントつけてもらればと。 どの程度理解されたのかは回答した側としては気になります。
guest

回答3

0

ベストアンサー

③友達リクエストの申請、承認、非承認

あくまで私見による一例です。

もちろん「メール送信」があったほうがログインしなくても気づけるのでありがたいですけど、なくても実装は可能です。
まずは「その友達のページにアクセスしたときに自分の友達にいるかいないか」で「友達リクエスト機能(多分ボタンとか)」を表示するかどうかが決まりますよね。
これが第一段階。

次に「友達リクエスト管理テーブル」を用意します。
テーブルには連番のID,申請者ユーザID,申請先ユーザID,申請状態

とかあればいいかと(できれば作成日時、更新日時)

次は
「友達リクエスト機能」の表示非表示の条件に「友達リクエスト管理テーブル」の「申請状態」を追加します。
「申請中」なのに申請ボタンが押せたらおかしいですしね。
他に表示非表示を判断するのは仕様です。却下された場合に再申請OKにするのかとか。
あと申請履歴を残すかどうか。

次は
「友達リクエスト機能」を押した際に「友達リクエスト管理テーブル」にデータを「申請中」で保管します。
ボタンですが画面遷移を伴う必要はないのでAjaxで更新し、その結果でJavaScriptでボタンの表示状態を切り替えておくのもありです(PHPで判断して切り替えるのは必須)

次は
「友達リクエスト機能」の表示状態を「友達リクエスト管理テーブル」の「申請状態」によって表示文言をかえたりしてみます。
「非表示」だけだとわからないので「申請中」と表示して押せないようにするとかですね。

次は
「申請者ユーザ」の「友達申請一覧」を作りましょう。「友達リクエスト管理テーブル」の情報をとってきて表示すればいいですね。
あくまで状態を見るだけのものです。初期は「申請中」だけ表示させて切り替えてもいいかもしれません。

次は
「申請先ユーザ」がログインした際に「友達リクエスト管理テーブル」を確認し「申請状態」によって通知を画面表示します。
最初は「申請中」だけで良いでしょう。履歴を残したい場合は「受付申請一覧」などのページを作っても良いでしょうし、通知をクリックしたらその一覧に飛ぶようにすると良いでしょう。

次は
「申請先ユーザ」が「受付申請一覧」から「申請」のものから「承認」「却下」を押せるようにしましょう。
押したら「友達リクエスト管理テーブル」の「申請状態」を更新します。連番でIDをとっているのでUPDATE先はそのIDですね。

次は
「申請者ユーザ」がログインした際に「友達リクエスト管理テーブル」を確認し「申請状態」によって通知を画面表示します。
「承認されました」「却下されました」 どうするかは仕様です。決めてください。
「承認」された場合は「友達リストテーブル」に追加します。このあたりは作られている前提です(最初の表示非表示にかかってくる部分)

ザッと書きましたが、
昨今のソーシャルゲームの仕組みを少し詳細に書き出しただけとなります。
もしこれを「どのようなコードを」となると作業依頼となるのでteratailでは非推奨です。お気をつけください。

というか余程の独自仕様を盛り込まない限り、CMSのプラグインとかで充分事足りるのではないか
という疑問が拭えませんが(WordPressとかXOOPSとか)、自前で作っているということなので、ひとまず参考まで頑張ってください。

投稿2018/12/13 08:23

編集2018/12/13 08:28
m.ts10806

総合スコア80850

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

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

Chandler_Bing

2018/12/13 14:05

ありがとうございます。 できるかどうは分かりませんが頑張ります。 テーブルの使用についてご教示お願いします。 ユーザーテーブルには オートインクリメントのIDカラム ユーザ名カラム ツイートテーブルには オートインクリメントのIDカラム つぶやき内容カラム 誰がつぶやきしたのか、のカラム ツイート日時のカラム ユーザに関しては趣味等は追加するとして、最低限これがあれば大丈夫でしょうか。 これが質問の①です。 2つ目は友達に関してですが、 ユーザー1人1人に対しての 友人一覧のテーブルは必要でしょうか。 例えばAというテーブルには 全てAさんの友人が入っているという感じです。
m.ts10806

2018/12/13 18:18 編集

質問は編集できるので適宜ご対応ください(タイトル) 1 設計、仕様なので決めてください。仕様は他人が決めることではありません。 「こういう仕様だけどテーブル設計はこれで良いか」という聞き方に変えてください。 どういう仕様にしたら良いか迷う場合は私も回答に書いていますように既存のサービスを参考にすると良いです。 2 ユーザー分だけテーブル増えることになるまずい設計になります。 1テーブルで対応できるよう考えてください。 多対多 の考え方ですね。 これも仕様なので。teratailやtwitterのようなフォロー、フォロワーという考え方なのか、FaceBook,mixiのように常に相互フォローなのかで違います。
m.ts10806

2018/12/13 18:27 編集

というか机上では物事進みませんのでまず作ってみては。 回答の最後にも書いていますが、これまでの内容だけだとわざわざ自作するまでもなく既存のCMSで対応可能です。 別回答にもついてますしね。 参考までにCMS入れてみて挙動確認するのはありだと思いますよ。DB必ずあるので設計の参考にもなるでしょうし。 効率的かとか正規化されているかとかはあっても「絶対こうじゃなきゃできない」という唯一の道などなく、要は要件通り動いていればいいので。効率化正規化は後からでも可能です。
guest

0

友達申請を管理するテーブルを設けて、
いつ、だれが、誰に対して
友達申請をしたかを記録すればいいんじゃないかな。

そのテーブルに記録するきっかけは、
確かに「友達申請をする」って書いてあるリンクをクリックさせるとかボタンを押させるっていうのでいいと思うけども。

投稿2018/12/13 08:10

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

Chandler_Bing

2018/12/13 08:14

ありがとうございます。 イメージとしてはaタグ等で申請を送り PHPのコード中で自分(ブラウザ使用者)に申請があれば表示させるの様なイメージでしょうか。
guest

0

OpenPNE の挙動を確認してみては?

投稿2018/12/13 14:11

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問