teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

6

プログラム修正

2021/11/16 03:29

投稿

Masa_1321412
Masa_1321412

スコア12

title CHANGED
File without changes
body CHANGED
@@ -95,7 +95,7 @@
95
95
  $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
96
96
  $dbh->query('SET NAMES utf8'); //文字コードのための設定
97
97
 
98
- $sql = "SELECT * FROM img where id=?";
98
+ $sql = "SELECT * FROM picture where id=?";
99
99
  $stmt_pic = $dbh->prepare ( $sql );
100
100
  $stmt_pic->execute ([$_GET["id"]]);
101
101
  $row = $stmt_pic->fetch(PDO::FETCH_ASSOC);
@@ -108,13 +108,10 @@
108
108
  }
109
109
 
110
110
  header("Content-Type: ".$row["type"]);
111
- print $row["image"];
111
+ print $row["data"];
112
112
  ?>
113
113
  ```
114
114
 
115
- 以下のように画像がエラーになります
116
- ![イメージ説明](e1be70276bb3db5500d5df99bf33d3f1.png)
117
-
118
115
  ### 補足情報(FW/ツールのバージョンなど)
119
116
  データベースの構造は以下のようになります
120
117
  ![イメージ説明](49430d548fece308d7b9a4546b6ac169.png)

5

内容変更

2021/11/16 03:29

投稿

Masa_1321412
Masa_1321412

スコア12

title CHANGED
File without changes
body CHANGED
@@ -111,34 +111,7 @@
111
111
  print $row["image"];
112
112
  ?>
113
113
  ```
114
- ### 試したこと
114
+
115
- 最後の行のhtmlの部分をphpにいれてforeachで繰り返せばできるかと思い
116
- 以下のように書いてみたのですが
117
- ```
118
- <?php
119
- try{
120
- $dsn = 'mysql:dbname=map;host=localhost';
121
- $user = 'root';
122
- $password = '';
123
- $dbh = new PDO($dsn, $user, $password); //データベースに接続
124
- $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
125
- $dbh->query('SET NAMES utf8'); //文字コードのための設定
126
-
127
- $sql = "SELECT * FROM picture";
128
- $stmt_pic = $dbh->prepare ( $sql );
129
- $stmt_pic->execute ();
130
- $row = $stmt_pic->fetch ( PDO::FETCH_BOTH );
131
- $img = base64_encode($row['data']);
132
- $dbh = null; //データベースから切断
133
- }
134
- catch(PDOException $e){
135
- die($e->getMessage());
136
- print 'サーバが停止しておりますので暫くお待ちください。';
137
- exit();
138
- }
139
- echo '<img src="data:'.$row['type'].';base64,'.$img.';"><br>';
140
- ?>
141
- ```
142
115
  以下のように画像がエラーになります
143
116
  ![イメージ説明](e1be70276bb3db5500d5df99bf33d3f1.png)
144
117
 

4

プログラム修正

2021/11/16 03:23

投稿

Masa_1321412
Masa_1321412

スコア12

title CHANGED
File without changes
body CHANGED
@@ -67,12 +67,11 @@
67
67
  $dbh = new PDO($dsn, $user, $password); //データベースに接続
68
68
  $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
69
69
  $dbh->query('SET NAMES utf8'); //文字コードのための設定
70
-
70
+
71
71
  $sql = "SELECT * FROM picture";
72
72
  $stmt_pic = $dbh->prepare ( $sql );
73
73
  $stmt_pic->execute ();
74
- $row = $stmt_pic->fetch ( PDO::FETCH_BOTH );
74
+ $row = $stmt_pic->fetchAll ( PDO::FETCH_BOTH );
75
- $img = base64_encode($row['data']);
76
75
  $dbh = null; //データベースから切断
77
76
  }
78
77
  catch(PDOException $e){
@@ -80,11 +79,38 @@
80
79
  print 'サーバが停止しておりますので暫くお待ちください。';
81
80
  exit();
82
81
  }
82
+ foreach($row as $data){
83
+ echo '<img src="image.php?id='.$data["id"].'"><br>'.PHP_EOL;
84
+ }
83
85
  ?>
84
- <!-- エンコードした情報をimgタグに表示 -->
85
- <img src="data:<?php echo $row['type'] ?>;base64,<?php echo $img; ?>"><br>
86
86
  ```
87
-
87
+ ### image.php
88
+ ```
89
+ <?php
90
+ try{
91
+ $dsn = 'mysql:dbname=map;host=localhost';
92
+ $user = 'root';
93
+ $password = '';
94
+ $dbh = new PDO($dsn, $user, $password); //データベースに接続
95
+ $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
96
+ $dbh->query('SET NAMES utf8'); //文字コードのための設定
97
+
98
+ $sql = "SELECT * FROM img where id=?";
99
+ $stmt_pic = $dbh->prepare ( $sql );
100
+ $stmt_pic->execute ([$_GET["id"]]);
101
+ $row = $stmt_pic->fetch(PDO::FETCH_ASSOC);
102
+ $dbh = null; //データベースから切断
103
+ }
104
+ catch(PDOException $e){
105
+ die($e->getMessage());
106
+ print 'サーバが停止しておりますので暫くお待ちください。';
107
+ exit();
108
+ }
109
+
110
+ header("Content-Type: ".$row["type"]);
111
+ print $row["image"];
112
+ ?>
113
+ ```
88
114
  ### 試したこと
89
115
  最後の行のhtmlの部分をphpにいれてforeachで繰り返せばできるかと思い
90
116
  以下のように書いてみたのですが
@@ -114,7 +140,7 @@
114
140
  ?>
115
141
  ```
116
142
  以下のように画像がエラーになります
117
- ![イメージ説明](c3558c6fded75cd0d2d530048d618e63.png)
143
+ ![イメージ説明](e1be70276bb3db5500d5df99bf33d3f1.png)
118
144
 
119
145
  ### 補足情報(FW/ツールのバージョンなど)
120
146
  データベースの構造は以下のようになります

3

修正

2021/11/16 03:13

投稿

Masa_1321412
Masa_1321412

スコア12

title CHANGED
File without changes
body CHANGED
@@ -87,8 +87,32 @@
87
87
 
88
88
  ### 試したこと
89
89
  最後の行のhtmlの部分をphpにいれてforeachで繰り返せばできるかと思い
90
- 以下の行をphp内に書いてみたのですが
90
+ 以下のように書いてみたのですが
91
+ ```
92
+ <?php
93
+ try{
94
+ $dsn = 'mysql:dbname=map;host=localhost';
95
+ $user = 'root';
96
+ $password = '';
97
+ $dbh = new PDO($dsn, $user, $password); //データベースに接続
98
+ $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
99
+ $dbh->query('SET NAMES utf8'); //文字コードのための設定
100
+
101
+ $sql = "SELECT * FROM picture";
102
+ $stmt_pic = $dbh->prepare ( $sql );
103
+ $stmt_pic->execute ();
104
+ $row = $stmt_pic->fetch ( PDO::FETCH_BOTH );
105
+ $img = base64_encode($row['data']);
106
+ $dbh = null; //データベースから切断
107
+ }
108
+ catch(PDOException $e){
109
+ die($e->getMessage());
110
+ print 'サーバが停止しておりますので暫くお待ちください。';
111
+ exit();
112
+ }
91
- echo '<img src="data:'.$row['name'].';base64,'.$img.';"><br>'
113
+ echo '<img src="data:'.$row['type'].';base64,'.$img.';"><br>';
114
+ ?>
115
+ ```
92
116
  以下のように画像がエラーになります
93
117
  ![イメージ説明](c3558c6fded75cd0d2d530048d618e63.png)
94
118
 

2

プログラム修正

2021/11/15 05:37

投稿

Masa_1321412
Masa_1321412

スコア12

title CHANGED
File without changes
body CHANGED
@@ -35,10 +35,11 @@
35
35
  $file_name = $_POST["file_name"];
36
36
  $imgdat = file_get_contents($_FILES["upfile"]["tmp_name"]);
37
37
 
38
- $sql = "INSERT INTO picture (name,data) values (?,?)";
38
+ $sql = "INSERT INTO picture (name,data,type) values (?,?,?)";
39
39
  $stmt = $dbh->prepare($sql);
40
40
  $data[] = $file_name;
41
41
  $data[] = $imgdat;
42
+ $data[] = mime_content_type($_FILES["upfile"]["tmp_name"]);
42
43
  $stmt->execute($data);
43
44
  $dbh = null; //データベースから切断
44
45
  }
@@ -81,7 +82,7 @@
81
82
  }
82
83
  ?>
83
84
  <!-- エンコードした情報をimgタグに表示 -->
84
- <img src="data:<?php echo $row['name'] ?>;base64,<?php echo $img; ?>"><br>
85
+ <img src="data:<?php echo $row['type'] ?>;base64,<?php echo $img; ?>"><br>
85
86
  ```
86
87
 
87
88
  ### 試したこと
@@ -93,5 +94,5 @@
93
94
 
94
95
  ### 補足情報(FW/ツールのバージョンなど)
95
96
  データベースの構造は以下のようになります
96
- ![イメージ説明](11d1d3502377ad808d84a6363e0b0d66.png)
97
+ ![イメージ説明](49430d548fece308d7b9a4546b6ac169.png)
97
- ![イメージ説明](022830ad9b948e41a8f0b38955800d04.png)
98
+ ![イメージ説明](bfb37468cf8c0ba3525c878e3fed9183.png)

1

プログラム追加

2021/11/15 05:32

投稿

Masa_1321412
Masa_1321412

スコア12

title CHANGED
File without changes
body CHANGED
@@ -3,9 +3,61 @@
3
3
  データベースに登録された画像をすべて表示するプログラムを作成したいです
4
4
  [参考にしたサイト](https://qiita.com/knowledge87sun/items/28136aaf2e674e0d290d)
5
5
 
6
- ### 該当のソースコード
6
+ ### upimg.php (画像をデタベーに登録するコード)
7
7
 
8
+ ```
8
- ```ここに言語名を入力
9
+ <HTML>
10
+ <HEAD>
11
+ <META http-equiv="Content-Type" content="text/html; charset=utf-8">
12
+ <TITLE>データベースへの画像の格納</TITLE>
13
+ </HEAD>
14
+ <P>ファイルのアップロード</P>
15
+ <BODY>
16
+ <FORM method="POST" enctype="multipart/form-data" action="upimg.php">
17
+ <INPUT type="hidden" name="MAX_FILE_SIZE" value="65536">
18
+ 画像のファイル名を入力してください(最大64KByte)<BR>
19
+ ファイル名:<INPUT type="text" name="file_name"><BR>
20
+ パス:<INPUT size="30" type="file" name="upfile"><BR>
21
+ <BR>
22
+ <INPUT type="submit" name="submit" value="送信">
23
+ <INPUT type="reset" name="reset" value="リセット">
24
+ </FORM>
25
+
26
+ <?php
27
+ if(isset($_POST["submit"])){
28
+ try{
29
+ $dsn = 'mysql:dbname=map;host=localhost'; $user = 'root'; $password = '';
30
+ $dbh = new PDO($dsn, $user, $password); //データベースに接続
31
+ $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
32
+ $dbh->query('SET NAMES utf8'); //文字コードのための設定
33
+ print "<hr>";
34
+
35
+ $file_name = $_POST["file_name"];
36
+ $imgdat = file_get_contents($_FILES["upfile"]["tmp_name"]);
37
+
38
+ $sql = "INSERT INTO picture (name,data) values (?,?)";
39
+ $stmt = $dbh->prepare($sql);
40
+ $data[] = $file_name;
41
+ $data[] = $imgdat;
42
+ $stmt->execute($data);
43
+ $dbh = null; //データベースから切断
44
+ }
45
+ catch(PDOException $e){
46
+ print 'サーバが停止しておりますので暫くお待ちください。';
47
+ exit();
48
+ }
49
+ }
50
+
51
+
52
+ ?>
53
+ </BODY>
54
+ </HTML>
55
+ ```
56
+ ![イメージ説明](2c5d70363032b09a369ee1bafa19c178.png)
57
+
58
+ ### display.php (画像を表示させるコード)
59
+
60
+ ```
9
61
  <?php
10
62
  try{
11
63
  $dsn = 'mysql:dbname=map;host=localhost';