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

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

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

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

Q&A

解決済

3回答

629閲覧

よくわかるphpの教科書について

xo_yo

総合スコア54

PHP

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

0グッド

0クリップ

投稿2021/12/18 10:01

php

1<?php 2session_start(); 3require('./dbconnect.php'); 4 5if(isset($_SESSION['id']) && $_SESSION['time'] + 3600 > time()){ 6 $_SESSION['time']=time(); 7 8 $members=$db->prepare('SELECT * FROM members WHERE id=?'); 9 $members->execute(array($_SESSION['id'])); 10 $member=$members->fetch(); 11}else{ 12 header('Location:login.php'); 13 exit(); 14} 15 16if(!empty($_POST)){ 17 if($_POST['message']!=''){ 18 $message = $db->prepare('INSERT INTO posts SET member_id=?,message=?,created=NOW()'); 19 $message->execute(array( 20 $member['id'], 21 $_POST['message'] 22 )); 23 24 header('Location:index2.php'); 25 exit(); 26 } 27 28} 29 30$posts=$db->query('SELECT m.name,m.picture,p.*FROM members m,posts p 31WHERE m.id=p.member_id ORDER BY p.created DESC'); 32 33?> 34 35<!DOCTYPE html> 36<html lang="en"> 37<head> 38 <meta charset="UTF-8"> 39 <title>Document</title> 40</head> 41<style> 42 body{ 43 text-align: center; 44 45 } 46 47 h2{ 48 padding: 15px; 49 } 50</style> 51<body> 52<h2>ひとこと掲示板</h2> 53 <form action="" method="post"> 54 <dl> 55 <dt><?php echo htmlspecialchars($member['name'],ENT_QUOTES) ;?>さん、メッセージをどうぞ</dt> 56 <dd> 57 <textarea name="message" cols="50" rows="5"></textarea> 58 </dd> 59 </dl> 60 <div> 61 <input type="submit" value="投稿する"> 62 </div> 63 </form> 64<?php foreach($posts as $post):?> 65 <div class="msg"> 66 <img src="./member_picture/<?php htmlspecialchars($post['picture'],ENT_QUOTES);?>"width="48" height="48" alt="<?php echo 67 htmlspecialchars($post['name'],ENT_QUOTES) ; ?>"/> 68 69 <p><?php echo htmlspecialchars($post['message'],ENT_QUOTES); ?><span class="name"> 70<?php echo htmlspecialchars($post['name'],ENT_QUOTES); ?>71 </span></p> 72 </div> 73<?php endforeach;?> 74 75</body> 76</html>

よくわかるphpの教科書で勉強をしているのですが、以下のコードの部分が理解できないです。

「$posts=$db->query('SELECT m.name,m.picture,p.*FROM members m,posts p
WHERE m.id=p.member_id ORDER BY p.created DESC');」

m.name,m.pictureのm.や p.createdのp.の役割がよくわかりません。

メッセージの情報を取り出していることは分かったのですが、コードの書き方が理解できません。

_________________________________
調べたこと

よくわかるphpの教科書を読みました。

Googleで色々と検索してみましたが、解決できるような記事が見つかりませんでした。

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

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

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

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

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

guest

回答3

0

「ジャパネットたにぐち」の異名を持つたにぐちまこと先生の御本ですね。対応するPHPのバージョンによって3種類の版がありますが、どの版で勉強されていますか? 最新版の「PHP7対応版」でしょうか。

さて、既に回答があるように、これは別名あるいはエイリアスと呼ばれる機能です。たにぐち先生の御本では、データベースの基本を学ぼう | データベースの真骨頂、リレーション 中のコラム「テーブル名のショートカット」にて短く解説されています。
でも、何故正式な用語である「別名」あるいは「エイリアス」を使わないのでしょうね。版を重ねてもこのタイトルは変わっていないようです。正式な用語を示していれば、それを手がかりに詳しく説明できるのに、謎です。

投稿2021/12/18 13:07

ockeghem

総合スコア11701

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

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

xo_yo

2021/12/18 14:34

コメントありがとうごうざいます。 勉強になりました!
guest

0

PHPではなくSQLの問題です。

SELECT m.name,m.picture,p.*FROM members m,posts p

WHERE m.id=p.member_id ORDER BY p.created DESC

「エイリアス」で調べてください。
提示コードでは私が引用で太字にしたところでエイリアスが定義されています。

投稿2021/12/18 11:20

編集2021/12/18 11:32
m.ts10806

総合スコア80850

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

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

m.ts10806

2021/12/18 11:31

ただ、本当に書籍内に何一つ言及がないとは思えません。
xo_yo

2021/12/18 14:32

コメントありがとうございます。 書籍内の、この説明の部分で今までの応用としか書いていなかったのです。 ご教授ありがとうございます。
guest

0

ベストアンサー

「$posts=$db->query('SELECT m.name,m.picture,p.*FROM members m,posts p

WHERE m.id=p.member_id ORDER BY p.created DESC');」
m.name,m.pictureのm.や p.createdのp.の役割がよくわかりません

通常、このケースでは、WHERE members.id=posts.members_idのように書いても問題ありません。
FROM members m, posts pとする事でmembers=mposts=pとしてWHERE文に指定した名前でテーブル名を書く事ができます。
この場合、単純に短い名前で書きたかったのだろうと推測できます。
しかしながら、短縮は良い事ではありません。
この場合、明らかに短縮しないほうが良いです。断言します!
members, postsというテーブル名を省略してmとかpで表す意味はほとんどありません。
省略しないことで、コードを初見のメンバーにも理解しやすい表現となります。
逆にテーブル名を短くした名前にしてしまう事で混乱が生じています。

基本的に書籍を書いている人は素人でチームでの長期メンテナンスの視点を持った人はいません。
だいたいゴミコードです。
紙面的な都合とかいろいろ言い訳はあるかと思いますが、エンジニア視点としてはアウトプットの質が評価対象となるので、ゴミなコードを出してきたらゴミと評価するだけです。

まとめとなりますが、mとかpの役割が分かりませんに対する答えは「そんなものはありません」です。
したがって、あなたの感性は正常です。
membersとかpostsとかを省略したい意図という事かもしれませんが、
その事が余計に読者に混乱を与えているわけですからまったく無意味、無価値です。

投稿2021/12/18 10:46

mingos

総合スコア4025

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

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

xo_yo

2021/12/18 14:31

そうなんですねw 説明がわかりやすかったです!ありがとうございました!!
xo_yo

2021/12/19 04:57

$posts=$db->query('SELECT members.name,members.picture,posts. * FROM members modlfied,posts picture WHERE members.id=posts.members_id ORDER BY posts.created DESC'); 省略せずに書くと、このような書き方で合ってますか?
xo_yo

2021/12/19 05:00

上記のように書いたのですが、上手く機能せずにわからない状態です。ご教授願いたいです。よろしくお願いします。
mingos

2021/12/19 05:20

(1) FROM テーブル名 (2) FROM テーブル名 別名 の2つの使い方があります。テーブル名をそのまま使いたい場合は別名を書いてはいけません。 SELECT members.name, members.picture, posts.* FROM members, posts WHERE members.id = posts.members_id ORDER BY posts.created DESC
xo_yo

2021/12/19 05:23

なるほど!ありがとうございます!勉強になりました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問