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

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

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

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

PHP

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

Q&A

解決済

5回答

832閲覧

MySQLとPHPでブログのようなシステムを作っています。(WordPressを使わない)

退会済みユーザー

退会済みユーザー

総合スコア0

MySQL

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

PHP

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

0グッド

0クリップ

投稿2017/07/24 12:16

編集2017/07/25 07:05

###記事のテーブルにある番号でアカウント情報を読み込ませたい

PHP

1<?php 2function head($a){ 3 $pdo = new PDO("mysql:dbname=datavase;host=example","example","password"); 4 $st = $pdo->query("SELECT * FROM head"); 5 $row = $st->fetch(); 6 echo htmlspecialchars($row[$a]); 7} 8?> 9<!DOCTYPE html> 10<html lang="ja"> 11 <head> 12 <meta charset="UTF-8"> 13 <title><?php head("title"); ?></title> 14 <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1, user-scalable=no"> 15 <link rel="stylesheet" href="style.css"> 16 </head> 17 <body> 18 <header> 19 <h1><?php head("title"); ?></h1> 20 </header> 21 <main role="main"> 22 <article> 23 <?php 24 $pdo = new PDO("mysql:dbname=datavase;host=example","example","password"); 25 $st = $pdo->query("SELECT * FROM blog"); 26 while ($row = $st->fetch()) { 27 ?> 28 <div class="list"> 29 <div class="image"> 30 <a href="#"> 31 <img src="image.jpg"> 32 <span class="new">NEW</span> 33 </a> 34 </div> 35 <div class="content"> 36 <a href="#"> 37 <h2><?php echo $row["title"] ?></h2> 38 </a> 39 <div class="content_bottom"> 40 <div class="author"> 41 <a href="#"> 42 <?php 43 $author = htmlspecialchars($row["no"]); 44 $acs = new PDO("mysql:dbname=datavase;host=example","example","password"); 45 $con = $acs->prepare("SELECT * FROM account WHERE no=?"); 46 $con->execute(array($author)); 47 $text = $con->fetch(); 48 echo '<img src="author.jpg"><span>'.$text["nickname"].'</span>'; 49 ?> 50 </a> 51 </div> 52 <div class="date"> 53 <time datetime="<?php echo $row["date"] ?>"><?php echo str_replace('-','.',$row['date']); ?></time> 54 </div> 55 </div> 56 </div> 57 </div> 58 <?php } ?> 59 </article> 60 </main> 61 </body> 62</html>
  • 記事が入っているテーブルが「blog」
titledatecontentno
Hello World2017-07-16Test1
Test2017-07-17Test2
  • アカウント情報が入っているテーブルが「account」
idnicknamepasswordcommentno
guestNicknameguestTest1

記事に付けた番号「no」からアカウントの番号「no」のニックネームを呼び出したいのです。
一応このようになっていますが、PHPの扱いになれていないので、ご了承ください。
また、できれば改良策があればご指摘いただくとありがたいです。

###発生している問題
上記のやり方だと、記事が入っているテーブルは全て表示されても、
記事を投稿した人のニックネームが一件の記事だけ表示されて、
他の記事には表示されなくなってしまいます。
イメージ説明
このようになるのを
イメージ説明

###補足情報(言語/FW/ツール等のバージョンなど) PHP 7.0.6

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2017/07/24 13:26

現象を再現するために必要なソースコードは省略せず、過不足なく提示してください。
guest

回答5

0

ベストアンサー

php

1<?php 2// エラーをHTMLで表示する(開発時は必須) 3ini_set('display_errors', true); 4error_reporting(E_ALL); 5 6function h($string) 7{ 8 return htmlspecialchars($string, ENT_QUOTES, 'UTF-8'); 9} 10 11$pdo = new PDO("mysql:dbname=datavase;host=example", "example", "password"); 12 13// ループの中でSQLを投げるのはNG。JOINするとSQLの問い合わせは一回になる 14$stmt = $pdo->query("SELECT b.*, a.nickname FROM blog b INNER JOIN account a ON b.no = a.no"); 15$articles = $stmt->fetchAll(PDO::FETCH_ASSOC); 16 17// ロジックとビューは分離すると保守性が上がる。 18?><!DOCTYPE html> 19<html lang="ja"> 20 <head> 21 <meta charset="UTF-8"> 22 <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1, user-scalable=no"> 23 <link rel="stylesheet" href="style.css"> 24 </head> 25 <body> 26 <main role="main"> 27 <article> 28 <?php foreach ($article as $articles): ?> 29 <div class="list"> 30 <div class="image"> 31 <a href="#"> 32 <img src="image.jpg"> 33 <span class="new">NEW</span> 34 </a> 35 </div> 36 <div class="content"> 37 <a href="#"> 38 <h2><?php echo h($article["title"]); ?></h2> 39 </a> 40 <div class="content_bottom"> 41 <div class="author"> 42 <a href="#"> 43 <img src="author.jpg"> 44 <span><?php echo h($article["nickname"]); ?></span> 45 </a> 46 </div> 47 <div class="date"> 48 <time datetime="<?php echo h($article["date"]); ?>"> 49 <?php echo h(str_replace('-', '.', $article['date'])); ?> 50 </time> 51 </div> 52 </div> 53 </div> 54 </div> 55 <?php endforeach; ?> 56 </article> 57 </main> 58 </body> 59</html>

投稿2017/07/24 14:02

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2017/07/24 14:55

一度この方法でやってみたのですが、この方法だと、記事を全て表示できずに、accountの数が影響してしてaccountの数だけ同じ記事が表示されていまします。
退会済みユーザー

退会済みユーザー

2017/07/24 14:56

DBの定義を書いてないから、そう回答せざるを得ない。
guest

0

日本語でおk。

あと、

new PDO("mysql:dbname=u926285186_sirok;host=mysql.hostinger.jp","u926285186_blog","abc1239500");

これはマズイんじゃないの。
実際のパスワードのように見えますが。

投稿2017/07/25 06:54

zico_teratail

総合スコア907

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

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

0

nicknameとは、accountテーブルのidの事でしょうか。
コード、テーブル、画像が一致していないような気もしますが、
画像から判断するに、title=Testのblogに紐付くaccountが無くとも
guest(画像ではNicknameとなっていますが)と表示したいのですかね?

紐付かなくても表示したい。というのが理解できかねますが。

投稿2017/07/24 22:49

hige0119

総合スコア37

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

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

0

それぞれのテーブルの構造がよくわからないので、詳しくは答えられないですけど、LEFT JOINなどを使うと、2つのテーブルを結合できますので、もっと簡潔に書くことができます。例えば、記事が入っているテーブルのユーザーidと、アカウント情報が入っているテーブルのidを紐付けするような、
SELECT * FROM blog LEFT JOIN account on blog.user_id = account.id みたいな感じで…

投稿2017/07/24 14:07

xjaPANDA

総合スコア124

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

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

0

記事を投稿した人のニックネームが一件の記事だけ表示されて、
他の記事には表示されなくなってしまいます。

他の方も質問の意味が汲み取れず回答ができないのかもしれません。
上記の意味が分かりませんが、一件の記事とは?他の記事とは?

なんとなく、以下のような表示になりそうですが、
これで合っている場合、何が問題なのでしょうか?
どう表示したいのでしょうか?
イメージ説明

投稿2017/07/24 12:51

hige0119

総合スコア37

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問