発生している問題・エラーメッセージ
DBのテーブルに.jpg形式の画像をアップロードするとテーブルの中身が文字化けとなるのですが、どなたか解決方法分かる方がいらっしゃればご教授お願いしたいです。
###エラーメッセージ
###作成したテーブル
mysql> CREATE TABLE IF NOT EXISTS `posts` ( -> `ID` bigint(20) unsigned NOT NULL AUTO_INCREMENT, -> `imgdat` blob NOT NULL, -> `mime` VARCHAR(64) NOT NULL, -> PRIMARY KEY (`ID`) -> ) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;
### edit.php ```ここに言語名を入力 <form enctype="multipart/form-data" action="login" method="POST"> <input type="hidden" name="MAX_FILE_SIZE" value="300000" /> <input name="image" type="file" /> <p><input type="submit" name="save" value="Submit" /><p> {{ csrf_field() }} </form> <?php $url = "localhost"; $user = "root"; $pass = ""; $db = "myblog"; if (!empty($_POST)) { // バイナリデータ $fp = fopen($_FILES["image"]["tmp_name"], "rb"); $imgdat = fread($fp, filesize($_FILES["image"]["tmp_name"])); fclose($fp); $imgdat = addslashes($imgdat); // 拡張子 $dat = pathinfo($_FILES["image"]["name"]); $extension = $dat['extension']; // MIMEタイプ if ( $extension == "jpg" || $extension == "jpeg" ) $mime = "image/jpeg"; else if( $extension == "gif" ) $mime = "image/gif"; else if ( $extension == "png" ) $mime = "image/png"; // MySQL登録 $link = mysqli_connect( $url, $user, $pass ) or die("MySQLへの接続に失敗しました。"); $sdb = mysqli_select_db( $link,$db) or die("データベースの選択に失敗しました。"); $sql = "INSERT INTO `myblog`.`posts` (`imgdat`, `mime`) VALUES ('".$imgdat."', '".$mime."')"; $result = mysqli_query( $link,$sql) or die("クエリの送信に失敗しました。"); mysqli_close($link) or die("MySQL切断に失敗しました。"); } ?>
view.php
<?php $url = "localhost"; $user = "root"; $pass = ""; $db = "myblog"; $link = mysql_connect( $url, $user, $pass ) or die("MySQLへの接続に失敗しました。"); $sdb = mysql_select_db( $db, $link ) or die("データベースの選択に失敗しました。"); $sql = "SELECT * FROM myblog.posts"; $result = mysql_query( $sql, $link ) or die("クエリの送信に失敗しました。"); $rows = mysql_num_rows( $result ); mysql_close( $link ) or die("MySQL切断に失敗しました。"); if($rows){ while($row = mysql_fetch_array($result)) { echo '<img src="posts/edit?id='.$row["ID"].'" />'; } } ?>
create_mage.php
<?php $url = "localhost"; $user = "root"; $pass = ""; $db = "myblog"; $id = $_GET['id']; $link = mysqli_connect( $url, $user, $pass ) or die("MySQLへの接続に失敗しました。"); $sdb = mysqli_select_db( $db, $link ) or die("データベースの選択に失敗しました。"); $sql = "SELECT * FROM myblog.posts WHERE ID = '".$id."'"; $result = mysqli_query( $sql, $link ) or die("クエリの送信に失敗しました。"); $rows = mysqli_num_rows( $result ); mysqli_close( $link ) or die("MySQL切断に失敗しました。"); if( $rows ){ while($row = mysqli_fetch_array($result)) { header( "Content-Type: ".$row['mime'] ); echo $row['imgdat']; } } ?>
補足情報(FW/ツールのバージョンなど)
OS:mac
php ver:7.1
mysql ver:5.6
create_mage.php にて出力したものに問題がありますか?
回答3件
あなたの回答
tips
プレビュー