質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.50%
phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

PHP

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

Q&A

1回答

4585閲覧

MySQLから取得してきた値が文字化けしてしまいます

newyee

総合スコア213

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

PHP

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

0グッド

0クリップ

投稿2017/08/24 11:55

編集2022/01/12 10:55

※すみません。 ご質問させていただいた後、var_dumpを消してみて、実行してみましたら文字化けせずにできていました。。。
ですが、なぜ$drink_name = htmlspecialchars($row['drink_name'],ENT_QUOTES, 'UTF-8');の後にvar_dumpしたら文字化けしてしまうかが分からないです...

現在phpの勉強で自動販売機作成ツールというのを作成しているのですが、phpMyAdminに接続し、MySQLから取得してきた値が文字化けしてしまいます。
自動販売機作成ツールに関しましては、3つのファイル(管理ページ,購入ページ,購入結果ページ)に分けて作成しています。
問題の文字化けが起きてしまっている部分に関しましては、購入結果ページになります。
以下が現在作成途中の購入結果ページ(result.php)になります

php

1<?php 2date_default_timezone_set('Asia/Tokyo'); 3const HOST = ''; 4const DB_NAME = ''; 5const USER_NAME = ''; 6const PASSWORD = ''; 7$err_msg = array(); 8$change = 0; 9$drink_name = ''; 10$date = date('Y/m/d H:i:s'); 11$drink_info_list = array(); 12 13if(($link = mysqli_connect(HOST,USER_NAME,PASSWORD,DB_NAME)) !== FALSE){ 14 mysqli_set_charset($link,'UTF8'); 15 16 if ($_SERVER['REQUEST_METHOD'] === 'POST') { 17 $stock_numbers = (int)$_POST['stock_numbers']; 18 $amount_money = $_POST['amount_money']; 19 20 //入力値チェック 21 if($_POST['selected_drink'] === ''){ 22 $err_msg[] = 'ドリンクを指定して下さい'; 23 } 24 if(ctype_digit($amount_money) === FALSE){ //ctype_digit:string型以外はfalseになる。 25 $err_msg[] = '金額は整数で入力してください'; 26 } 27 28 if($price > $amount_money){ 29 $err_msg[] = '金額が足りません'; 30 } 31 $amount_money = (int)$amount_money; 32 33 34 //エラーがなかった場合 35 if (count($err_msg) === 0){ 36 $drink_id = (int)$_POST['drink_id']; 37 38 $sql = 'SELECT drink_name,price FROM drink_info_table WHERE drink_id = ' . $drink_id; 39 40 if($result = mysqli_query($link,$sql)){ 41 while($row = mysqli_fetch_assoc($result)){ //while文について質問。 42 43 $price = htmlspecialchars($row['price'],ENT_QUOTES, 'UTF-8'); 44 $drink_name = htmlspecialchars($row['drink_name'],ENT_QUOTES, 'UTF-8'); 45 var_dump($drink_name);exit(); 46 } 47 }else{ 48 $err_msg[] = 'drink_info_table:SELECTエラー:'.$sql; 49 } 50 51 52 53 if($amount_money > $price){ 54 $change = $amount_money - $price; 55 } 56 57 $sql = 'UPDATE drink_stock_table SET stock_number = ' . $stock_numbers . '- 1 WHERE drink_id = ' . $drink_id; 58 if(mysqli_query($link,$sql) === FALSE){ 59 $err_msg[] = 'drink_stock_table: UPDATEエラー' . $sql; 60 } 61 62 $sql = 'INSERT INTO drink_history_table(drink_id,bought_date) VALUES (' . $drink_id . ',\''. $date .'\')'; 63 if(mysqli_query($link,$sql) === FALSE){ 64 $err_msg[] = 'drink_history_table: insertエラー' . $sql; 65 } 66 //var_dump($stock_numbers);exit(); 67 68 69 } 70 71 } 72}else{ 73 $err_msg[] = 'DB接続失敗'; 74} 75 76 77 78?> 79 80 81<!DOCTYPE html> 82<html lang="ja"> 83<head> 84 <meta charset="UTF-8"> 85 <title></title> 86</head> 87<body> 88 <h1>自動販売機結果</h1> 89 <?php foreach($err_msg as $value){ ?> 90 <p><?php echo $value; ?></p> 91 <?php } ?> 92 <?php if(count($err_msg) === 0){?> 93 <p>がしゃん!【<?php echo $drink_name; ?>】が買えました! </p> 94 <?php } ?> 95 <?php if($change >= 1){ ?> 96 <p>おつりは【<?php echo $change; ?>円】です</p> 97 <?php } ?> 98 <footer> 99 <a href="index.php">戻る</a> 100 </footer> 101</body> 102</html>

以下は購入ページ(index.php)となります。

pho

1<?php 2const HOST = ''; 3const DB_NAME = ''; 4const USER_NAME = ''; 5const PASSWORD = ''; 6$drink_info_list = array(); 7 8//DB接続 9if(($link = mysqli_connect(HOST,USER_NAME,PASSWORD,DB_NAME)) !== FALSE){ 10 mysqli_set_charset($link,'UTF8'); 11 // sql where にて 以下の条件を追加すること。 12 // 1.ステータスが公開になっているもののみを表示。 13 // 2.在庫数が1以上の商品のみ。 14 $sql = 'SELECT drink_info_table.drink_id,drink_name,price,status,stock_number 15 FROM drink_info_table 16 JOIN drink_stock_table 17 ON drink_info_table.drink_id = drink_stock_table.drink_id 18 WHERE status = 1 AND stock_number >= 1;'; 19 20 21 if($result = mysqli_query($link,$sql)){ 22 $i = 0; 23 while($row = mysqli_fetch_assoc($result)){ 24 $drink_info_list[$i]['drink_id'] = htmlspecialchars($row['drink_id'],ENT_QUOTES, 'UTF-8'); 25 $drink_info_list[$i]['drink_name'] = htmlspecialchars($row['drink_name'],ENT_QUOTES, 'UTF-8'); 26 $drink_info_list[$i]['price'] = htmlspecialchars($row['price'],ENT_QUOTES, 'UTF-8'); 27 $drink_info_list[$i]['status'] = htmlspecialchars($row['status'],ENT_QUOTES, 'UTF-8'); 28 $drink_info_list[$i]['stock_number'] = htmlspecialchars($row['stock_number'],ENT_QUOTES, 'UTF-8'); 29 30 $i++; 31 } 32 33 // var_dump($drink_info_list);exit(); 34 } 35 36 37 38} 39 40?> 41 42 43<!DOCTYPE html> 44<html lang="ja"> 45<head> 46 <meta charset="UTF-8"> 47 <title></title> 48</head> 49<body> 50 <h1>自動販売機</h1> 51 52 <form action="result.php" method="post"> 53 <div>金額<input type="text" name="amount_money"></div> 54 <!--画像を表示すること--> 55 <?php foreach($drink_info_list as $values){ ?> 56 <img src="img/<?php echo $values['drink_id'] ;?>.pic"> 57 <?php echo $values['drink_name']; ?> 58 <?php echo $values['price']; ?> 59 60 <?php if((int)$values['stock_number'] === 0){ ?> 61 <p>売り切れ</p> 62 <?php } else { ?> 63 <input type="radio" name="selected_drink"> 64 <?php } ?> 65 66 <?php } ?> 67 68 <p><input type="submit" value="■□■□■購入■□■□■"></p> 69 <input type="hidden" name="stock_numbers" value="<?php echo $values['stock_number']; ?>"> 70 <input type="hidden" name="drink_id" value="<?php echo $values['drink_id'];?>"> 71 72 </form> 73 74</body> 75</html>

result.phpにおきまして、 mysqli_set_charset($link,'UTF8');←を書き忘れたままvar_dump($drink_name)とした所、中身が???となっていたので、mysqli_set_charset($link,'UTF8')を付け足したら今度は文字化けしてしまいました...
どなたか教えて下さる方いましたら、ご教授下さい。

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

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

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

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

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

aro10

2017/08/24 13:03

phpMyAdminはPHP製のWebベースのMySQL用のGUI管理ツールの事ですので、質問内容はmysqli_connect関数を利用している関係からMySQLから取得してきた値とした方がより適切な回答を得られるかと思います。
newyee

2017/08/24 13:11

ご指摘感謝します。早速修正させていただきます。
guest

回答1

0

質問させていただいたタイトルの問題は解決できたのですが、説明欄に追記させていただきましたvar_dumpしたら何故文字化けしてしまうのかが分からない状態です...

投稿2017/08/24 12:05

newyee

総合スコア213

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問