現在PHPプログラミングの教科書という書籍を使って、PHPとMySQLの勉強をしているのですが、
localでphpMyAdminでMySQLにテーブルを作ったところ、
phpMyAdmin上でm_messageという部分の日本語は表示されていて、
変更、削除、詳細閲覧などは正常にできるのですが、
ブラウザで見ると、日本語がUTF8に設定しているのに何故か文字化けしてしまいます。
データベースとテーブルは、照合順序をutf8_general_ciとしています。
ブラウザのhtmlでもUTF-8は設定しています。
html
1<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
何故なのかわからず、、
ご教授いただけたら幸いです。
下記は見本のコードのままですが
update.php
1 2<?php 3// セッションの開始 4session_start(); 5 6// 変更データの主キーを取得 7if (!isset($_GET["m_id"])) { 8 exit; 9} else { 10 $m_id = $_GET["m_id"]; 11 $_SESSION["m_id"] = $m_id; // 主キーを$_SESSIONに格納 12} 13 14// 接続設定 15$dbtype = "mysql"; 16$sv = "localhost"; 17$dbname = "guestbook"; 18$user = "root"; 19$pass = "root"; 20 21// データベースに接続 22$dsn = "$dbtype:dbname=$dbname;host=$sv"; 23$conn = new PDO($dsn, $user, $pass); 24 25// 変更するデータを取得 26$sql = "SELECT * FROM message WHERE (m_id = :m_id);"; 27$stmt = $conn->prepare($sql); 28$stmt->bindParam(":m_id", $m_id); 29$stmt->execute(); 30$row = $stmt->fetch(); 31?> 32<html> 33<head> 34<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 35<title>ゲストブック</title> 36</head> 37<body> 38<p>変更画面</p> 39<!-- データ変更フォーム --> 40<form method="POST" action="update-confirm.php"> 41 <table border="1"> 42 <tr> 43 <td>名前</td> 44 <td><input type="text" name="m_name" size="30" 45 value="<?php echo $row["m_name"]; ?>"></td> 46 </tr> 47 <tr> 48 <td>メールアドレス</td> 49 <td><input type="text" name="m_mail" size="30" 50 value="<?php echo $row["m_mail"]; ?>"></td> 51 </tr> 52 <tr> 53 <td>メッセージ</td> 54 <td> 55 <textarea rows="5" cols="30" 56 name="m_message"><?php echo $row["m_message"]; ?></textarea> 57 </td> 58 </tr> 59 <tr> 60 <td colspan="2"> 61 <input type="submit" value="確認する"> 62 </td> 63 </tr> 64 </table> 65</form> 66</body> 67</html> 68 69コード
追記:
ブラウザの方で、文字化けしたmessageを更新したところ(Jerry じぇりーのことろです)、ブラウザ上の日本語は普通に表示できました。しかしphpMyAdmin上では今入力した日本語が文字化けしています。ということは、phpMyAdminがおかしいということでしょうか、、
解決しました。ありがとうございます。
全てのファイルで、new PDOに入っている$dsnの中にcharset=utf8を書き加えました。
php
1// データベースに接続 2$dsn = "$dbtype:dbname=$dbname;host=$sv;charset=utf8;"; 3$conn = new PDO($dsn, $user, $pass);
回答1件
あなたの回答
tips
プレビュー