前提・実現したいこと
MysqlのテーブルにあるデータをフォームのInput textに表示させ、
保存をクリックでデータの上書きをしようとしています。件数が2,3件なので
変更がない場合でもボタンがクリックされるとSQLが実行されます。
その際、Input 表示上は問題ありませんが、SQLに入れると一か所だけ文字化けが起こります。
発生している問題・エラーメッセージ
INSERT INTO location (id,name,adddress) VALUES ('1','�','渋谷区'),('2','�','新宿区'),('3','�','練馬区') ON DUPLICATE KEY UPDATE name = VALUES(name),address = VALUES(address)
該当のソースコード
mysql
1テーブル location 2 3id name address 4--------------------- 51 渋谷店 渋谷区 62 新宿店 新宿区 73 練馬店 練馬区
php
1 2if (isset($_POST["save"])) { 3 4 $num = count($link->real_escape_string($_POST['id'])); 5 6 for($i = 0;$i < $num ;$i++){ 7 8 $id[$i] = $link->real_escape_string($_POST['id'][$i]); 9 $name[$i] = $link->real_escape_string($_POST['name'][$i]); 10 $address[$i] = $link->real_escape_string($_POST['address'][$i]); 11 12 13 $values_r[$i] = "('".$id[$i]."','". $name[$i]."','" . $address[$i]."')" ; 14 } 15 16 $InsertValues = implode( ",", $values_r); 17 $query = "INSERT INTO location (id,name,address) VALUES ". $InsertValues . " ON DUPLICATE KEY UPDATE name = VALUES(name),address = VALUES(address)"; 18 19 $result = $link->query($query); 20} 21
php
1<?php 2//エスケープ用 3function SetHtmlChars($str){ 4 echo htmlspecialchars($str, ENT_QUOTES, 'UTF-8'); 5} 6?> 7<table> 8 <tr> 9 <th>id</th> 10 <th>名前</th> 11 <th>住所</th> 12 </tr> 13<?php 14 while($row = $result->fetch_assoc()){ 15 $cnt = $result->num_rows; 16?> 17 18 <tr > 19 <td><?php echo SetHtmlChars($row["id"]); ?></td> 20 <td><input type="text" name="name[]" value="<?php echo SetHtmlChars($row['name']); ?>" ></td> 21 <td><input type="text" name="address[]" value="<?php echo SetHtmlChars($row['address']); ?>" ></td> 22 </tr> 23<?php 24} 25?> 26</table> 27
HTMLのソースをみるとValueには文字化けせず「渋谷店」も「渋谷区」も表示されています。
表示も問題ありません。
DBのテーブルも問題ないように思うのですが、どうして1箇所だけこうなるのかわかりません。
なお、通常Webページからデータを更新する場合、このようなやり方はしない、これでは不十分、など
ありましたら、合わせてアドバイスいただけたら大変嬉しいです。
(PDOを使うべき、というのは理解しています)
宜しくお願い致します。