Некорректное отображение данных в БД phpMyAdmin
Есть Сайт к которой я подключил базу данных из phpMyAdmin. Сайт по регистрации пользователей. Делаю всё на локалке. На сайте ввожу данные на русском языке то есть кириллице а в базе данных отображаться чепуха какая-то. Пробовал кучу разных сравнений, cp1251_general_ci, UTF8 и кучу других но так и не смог сделать так чтобы данные отображались нормально. Как это сделать?
Файл в котором я подключаю БД к сайту.
<?php
$host = "localhost";
$user_name = "root";
$user_password = "";
$db_name = "userdb";
$con = mysqli_connect($host,$user_name,$user_password,$db_name);
?>
Файл с регистрацией
<?php
require "init.php";
$name = $_GET["name"];
$user_name = $_GET["user_name"];
$user_password = $_GET["user_password"];
$sql = "select * from login_info where user_name = '$user_name'";
$result = mysqli_query($con,$sql);
if(mysqli_num_rows($result)>0)
{
$status = "exist";
}
else
{
$sql = "insert into login_info(name,user_name,user_password) values('$name','$user_name','$user_password');";
if(mysqli_query($con,$sql))
{
$status = "ok";
}
else
{
$status = "error";
}
}
echo json_encode(array("response"=>$status));
mysqli_close($con);
?>
html
<html>
<meta http-equiv="Content-type" content="text/html;charset=UTF-8"/>
<title>This is a tast web page</title>
<body>
<form method="get" action="register.php">
<table>
<tr>
<td>
Name:
</td>
<td>
<input type="text" name="name"/>
</td>
</tr>
<tr>
<td>
User name:
</td>
<td>
<input type="text" name="user_name"/>
</td>
</tr>
<tr>
<td>
Password :
</td>
<td>
<input type="password" name="user_password"/>
</td>
</tr>
<tr>
<td>
<input type="Submit" value="Register"/>
</td>
</tr>
</table>
</form>
</body>
</html>
Ответы (3 шт):
Когда Вы создаёте таблицу в базе данных, Вы указываете кодировку, в которой будет происходить работа с этой таблицей. Попробуйте работать везде (включая страницы сайта) с UTF8, это должно решить все проблемы.
В базе делайте таблицу со сравнением utf8_general_ci (лучше сделайте таблицу с нуля, ибо изменение кодировки иногда работает некорректно). Кстати, у полей внутри таблицы, кодировку тоже можно менять.
В php в начало файла вставьте: header('charset=utf-8');
Также на html страницах: <meta charset="utf-8">
У меня была такая же проблема, только я использовал подключение к бд с помощью PDO. Обычное подключение в PDO выглядит следующим образом:
$link = new PDO("mysql:host=localhost;dbname=DB");
Я добавил "charset=UFT8" и все начало корректно отображаться, вот так это выглядит:
$link = new PDO("mysql:host=localhost;dbname=DB;charset=UTF8");
В вашем случае с mysqli попробуйте после коннекта к базе добавить такую строчку:
mysqli_query("set names 'utf8'");