🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
MySQL

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

PHP

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

2回答

1461閲覧

PHPを使ってMysqlにアクセスしてHTMLで表示させたい(テキスト 数字 画像 )

nazonoinu

総合スコア1

MySQL

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

PHP

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2021/02/16 15:50

編集2021/02/17 13:54

前提・実現したいこと

PHPのPDOを使ってMySQLからデータを取得しhtmlで表にして表示したい。(数字とテキストと画像)

MySQLバージョン 5.0.95
###DBの内容
![DBの内容

発生している問題・エラーメッセージ

現状
理想
現状は上の画像のようになってしまい数字以外が表示されなくなっています。
下の画像のようにデータを表示したいです。
Picture1,2,3に関してはデータベースに直接写真を格納したいです。

該当のソースコード

PHP

1<?php 2 try{ 3 $dsn = ''; 4 $user = ''; 5 $password = ''; 6 7 $PDO = new PDO($dsn, $user, $password); //MySQLのデータベースに接続 8 $PDO->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); //PDOのエラーレポートを表示 9 10 11//2.実行したいSQL文をセットする。 12$car1=$PDO->query('SELECT * from user order by kanrino desc limit 1'); 13 14 15$cardb1=$car1->fetchAll(PDO::FETCH_ASSOC); 16 17$pdo=null; 18 19 }catch (PDOException $e) { 20 exit('データベースに接続できませんでした。' . $e->getMessage()); 21 } 22 23 24 25 26?> 27 28<body> 29<table border="1"> 30<!-- 1 --> 31<?php 32 if(isset($cardb1)){ 33 foreach($cardb1 as $card1){ 34 echo'<tr>'; 35 echo '<th colspan="5">',$card1['title'],'</th>'; 36 echo'</tr>'; 37 } 38 } 39 ?> 40 <!-- 2 --> 41 <?php 42 if(isset($cardb1)){ 43 foreach($cardb1 as $card1){ 44 echo'<tr>'; 45 echo'<th colspan="2" rowspan="2">',$card1['picture1'],'</th>'; 46 echo'<th colspan="2" rowspan="2">',$card1['picture2'],'</th>'; 47 echo'<td>',$card1['no'],'</td>'; 48 echo'</tr>'; 49 } 50 } 51 ?> 52 <!-- 3 --> 53 <?php 54 if(isset($cardb1)){ 55 foreach($cardb1 as $card1){ 56 echo'<tr>'; 57 echo '<td>',$card1['kanrino'],'</td>'; 58 echo'</tr>'; 59} 60} 61?> 62 63<?php 64 if(isset($cardb1)){ 65 foreach($cardb1 as $card1){ 66 echo'<tr>'; 67 echo'<th colspan="2" rowspan="2">',$card1['picture3'],'</th>'; 68 echo'<td colspan="3" rowspan="2">',$card1['Description'],'</td>'; 69 echo'</tr>'; 70 } 71 } 72?>

###追記

php

1<?php 2 try{ 3 $dsn = 'mysql:dbname=???;host=???;charset=utf8'; 4 $user = '???'; 5 $password = '???'; 6 7 $PDO = new PDO($dsn, $user, $password); //MySQLのデータベースに接続 8 $PDO->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); //PDOのエラーレポートを表示 9 10 11 12//2.実行したいSQL文をセットする。 13$car1=$PDO->query('SELECT * from user order by kanrino desc limit 1'); 14 15 16$cardb1=$car1->fetchAll(PDO::FETCH_ASSOC); 17 18$img1 = base64_encode($cardb1['picture1']); 19$img2 = base64_encode($cardb1['picture2']); 20$img3 = base64_encode($cardb1['picture3']); 21 22 23 24$pdo=null; 25 26 }catch (PDOException $e) { 27 exit('データベースに接続できませんでした。' . $e->getMessage()); 28 } 29 30 31 32 33?> 34 35<body> 36<table border="1"> 37<!-- 1 --> 38<?php 39 if(isset($cardb1)){ 40 foreach($cardb1 as $card1){ 41 echo'<tr>'; 42 echo '<th colspan="5">',$card1['title'],'</th>'; 43 echo'</tr>'; 44 } 45 } 46 ?> 47 <!-- 2 --> 48 <?php 49 if(isset($cardb1)){ 50 foreach($cardb1 as $card1){ 51 echo'<tr>';?> 52 <th colspan="2" rowspan="2"><img src="data:;base64,<?php echo $img1; ?>"></th> 53 <?php 54 echo'<th colspan="2" rowspan="2">',$img2,'</th>'; 55 echo'<td>',$card1['no'],'</td>'; 56 echo'</tr>'; 57 } 58 } 59 ?> 60 <!-- 3 --> 61 <?php 62 if(isset($cardb1)){ 63 foreach($cardb1 as $card1){ 64 echo'<tr>'; 65 echo '<td>',$card1['kanrino'],'</td>'; 66 echo'</tr>'; 67} 68} 69?> 70 71<?php 72 if(isset($cardb1)){ 73 foreach($cardb1 as $card1){ 74 echo'<tr>'; 75 echo'<th colspan="2" rowspan="2">',$img3,'</th>'; 76 echo'<td colspan="3" rowspan="2">',$card1['Description'],'</td>'; 77 echo'</tr>'; 78 } 79 } 80?>

img1を修正し表示できるようにしてみることを目標にやってみましたができませんでした。
imgタグの文法はimg1のところのように書いていけば大丈夫でしょうか?

画像の格納方法のコードはこうなっています。

html

1<form action="sell.php" method="POST" enctype="multipart/form-data"> 2 <p>車の番号(半角数字)</p> 3 <div><input pattern="^[0-9]+$"name="no" required></div> 4 <p>タイトル(25字まで)</p> 5 <div><textarea id="taitoru" name="taitoru" maxlength="25" placeholder="タイトルを入力"></textarea></div> 6 <p>車の説明(2500字まで)</p> 7 <div><textarea id="setumei" name="setumei" maxlength="2500" placeholder="車の説明を入力"></textarea></div> 8 <p>画像1(jpgもしくはjpeg)</p> 9 <div><input type="file" name="avatar1" accept=".jpg, .jpeg" required></div> 10 <P>画像2(jpgもしくはjpeg)</P> 11 <div><input type="file" name="avatar2" accept=".jpg, .jpeg" required></div> 12 <p>画像3(jpgもしくはjpeg)</p> 13 <div><input type="file" name="avatar3" accept=".jpg, .jpeg" required></div> 14 <p>掲載id</p> 15 <div><input pattern="^[0-9]+$"name="keisaiid" maxlength='6' minlength="6" placeholder="半角数字6桁" required></div> 16 <p>パスワード</p> 17 <div><input pattern="^['0-9''a-z''A-Z']+$" name="keisaipass" maxlength="8" minlength="8" placeholder="英数8桁(半角 英語は大文字可)" required></div> 18 <div><button type="submit">掲載する</button></div> 19 </form> 20

php

1<?php 2 try { $dsn = 'mysql:dbname=???;host=???;charset=utf8'; 3 $user = '???'; 4 $password = '???'; 5 6 7 $PDO = new PDO($dsn, $user, $password); //MySQLのデータベースに接続 8 $PDO->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); //PDOのエラーレポートを表示 9 10 11 $nowdeta = $PDO->query('SELECT (kanrino) from user order by kanrino desc limit 1'); 12// 4.実際にSQLを実行する。 13$nowdeta->execute(); 14// 5.結果を取得する。【任意】 15$beta = $nowdeta->fetch(); 16// newdetaの定義 17$newdeta=$beta['kanrino']+1; 18 19 // 2.実行したいSQL文をセットする。2 20 $car = $PDO->prepare('INSERT INTO user VALUES(:title,:Descript,:carno,:picture1,:picture2,:picture3,:id,:pass,:kanrino)' ); 21 22 23 //変数の定義 24 $img_data1 = file_get_contents(@$_FILES['avatar1']['tmp_name']); 25 $img_data2 = file_get_contents(@$_FILES['avatar2']['tmp_name']); 26 $img_data3 = file_get_contents(@$_FILES['avatar3']['tmp_name']); 27 28// 3.SQLに対してパラメーターをセットする。(画像の部分以外はカット) 29$car->bindValue(':picture1',$img_data1, PDO::PARAM_LOB); 30$car->bindValue(':picture2',$img_data2, PDO::PARAM_LOB); 31$car->bindValue(':picture3',$img_data3, PDO::PARAM_LOB); 32 33// 4.実際にSQLを実行 34$car->execute(); 35 36 37 38 } catch (PDOException $e) { 39 exit('データベースに接続できませんでした。' . $e->getMessage()); 40 } 41// 6.データーベースから切断する。 42unset($PDO); 43?> 44

画像の格納の部分に関してはバグがあるのかもわからないです。(エラーメッセージは出てません。)
自分では正しくできていると思っていました。

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

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

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

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

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

m.ts10806

2021/02/16 22:26

>PHPのPODを使って コードはあってますが、文章内は合ってないです。PDO。こういうの意外と大事。
m.ts10806

2021/02/16 22:29

あと、DB登録時のコードも提示してください。正しく登録できてないと当然、参照もできません。 可能ならテーブル定義はCREATE TABLEで。 phpMyAdminならエクスポート機能で確認できます(形式はSQLで)。 なんならエクスポート機能でBlobに登録された内容も出力できたはず。
nazonoinu

2021/02/17 13:56

phpMyAdminのエクスポート機能で確認したところ長い文字列が出てきてよくわかりませんでした
m.ts10806

2021/02/17 14:21

何もわからずにバイナリ使ってるということですか? そこ理解しとかないと、単に出したいものが出るようになっても何の理解にもつながらないと思います。
guest

回答2

0

DBに画像をバイナリで登録したなら、imgタグにに落とし込まないと表示は難しいです
DB以前に画像処理の部分を一旦学習したほうがいいでしょう
またMySQL5.0系は流石に古すぎる気がします。

投稿2021/02/17 01:50

yambejp

総合スコア116694

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

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

0

さらっと見た感じですが、画像データをデータベースにバイナリで直接突っ込んでいるのであれば、imgタグを使いかつbase64エンコードしないと画像は正しく表示されないかと思います。

参考
https://qiita.com/knowledge87sun/items/28136aaf2e674e0d290d

次のページの件は「PHP ページネーション」「PHP ページング」とかでググれば色々出てくるかと。

投稿2021/02/16 16:00

編集2021/02/16 16:01
AbeTakashi

総合スコア4853

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問