前提・実現したいこと
PHPのPDOを使ってMySQLからデータを取得しhtmlで表にして表示したい。(数字とテキストと画像)
発生している問題・エラーメッセージ
現状は上の画像のようになってしまい数字以外が表示されなくなっています。
下の画像のようにデータを表示したいです。
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
画像の格納の部分に関してはバグがあるのかもわからないです。(エラーメッセージは出てません。)
自分では正しくできていると思っていました。