[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Гостевая с БД
WhiteKnight
Эх эти кодировки. Это ужас. уже какой день я с ними мучаюсь...

Вот пишу гостевуху с БД.

-----------------------------------------------------
install.php Создаю для нее БД
add.php Добавление записей
index.php Главная она же просмотрщик
-----------------------------------------------------



install.php Создаю для нее БД

PHP
$connection = mysql_connect($host,$user,$password)
        or die("Не удалось выполнить с сервером");
    
    
    $query 
= "CREATE DATABASE IF NOT EXISTS gb";
    
    $result 
=  mysql_query($query)
        or die("Ошибка при выполнении запроса".mysql_error());
        
    echo 
"БД успешно содана <br>";
    
    $DBase 
= mysql_select_db($db,$connection)
        or die("Ошибка при выборе БД");
    
    $query 
= "CREATE TABLE gbdata (ID MEDIUMINT NOT NULL AUTO_INCREMENT, Name VARCHAR(20), Email VARCHAR(20), Msg TEXT,PRIMARY KEY (ID))";
    
    $result 
= mysql_query($query)
        or die("Ошибка при выполнении запроса".mysql_error());
    
    echo 
"Таблица успешно создана<br>";
    
    mysql_close
($connection);



add.php Добавление записей

PHP
$connection mysql_connect($host,$user,$password);
            or die("Не удалось подключиться к серверу");

        $New = mysql_select_db("gb",$connection);

        $query = "INSERT INTO gbdata (Name,Email,Msg) VALUES ('Антон','an214@rambler.ru','привет')";

        $result = mysql_query($query)
            or die("Ошибка при выполнении запроса".mysql_error());

        mysql_close($connection);



index.php Главная она же просмотрщик

PHP
$connection = mysql_connect($host,$user,$password);
    
    $DBase 
= mysql_select_db($db);
    
    $query 
= "SELECT * FROM gbdata";
    $result = mysql_query($query);
    
    echo 
'<table align = center style="border: 1px dotted #FFC1C1">';
    while ($row = mysql_fetch_array($result))
    {    echo"<tr>";
        echo "<td>".$row['ID']."</td>"."<td>".$row['Name']."</td>"."<td>".$row['Email']."</td>";
        echo"</tr>";
        echo"<tr>";
        echo "<td>".$row['Msg']."</td>";
        echo"</tr>";
    }
    echo "</table>";
    
    mysql_close
($connection);



На этот раз решил запись создать также и в самом phpmyadmin
и добавлять через мой add.php

вот что я вижу в phpmyadmin
user posted image

в браузере
Цитата
4 Антон an214@rambler.ru
привет
5 ?????? Sergey@rambler.ru
??????



также не пересчиталось ID почему то после удаление в phpmyadmin записей sad.gif



Спустя 16 минут, 18 секунд (11.09.2009 - 20:24) Guest написал(а):
1. кодировка базы одна а скприпта другая, отсюда вполне закономерный результат, -
в поиск (SET NAMES и т.д.)
2. truncate table, - тогда id обнулится


Спустя 32 минуты, 15 секунд (11.09.2009 - 20:56) WhiteKnight написал(а):
Перед вызовом запросов во всех трех файлах: инсталяция,добавление и отображение написал следующие:
mysql_query ("set character_set_client='utf8'");
mysql_query ("set character_set_results='utf8'");
mysql_query ("set collation_connection='urf8_general_ci'");

теперь в браузере
Цитата
1 ????? an214@rambler.ru
??????
2 ????? an214@rambler.ru
??????


и тоже самое в phpmyadmin

Спустя 22 минуты, 56 секунд (11.09.2009 - 21:19) glock18 написал(а):
Цитата
и тоже самое в phpmyadmin


ну вот видишь, совпало ведь smile.gif

а если серьезно, то надо, как сказано выше, выполнять запрос SET NAMES после подключения к базе данных.

phpma скорее всего не делает, вот у тебя получаются крокозябры.

выкинь его на свалку. smile.gif

Спустя 21 минута, 3 секунды (11.09.2009 - 21:40) WhiteKnight написал(а):
glock18
А я что до, делал. Конечно после. Или ты про что то другое говоришь ?

вот так


PHP
$connection = mysql_connect($host,$user,$password);
    
    $DBase 
= mysql_select_db($db);
    
    
    mysql_query 
("set character_set_client='cp1251'");
    mysql_query ("set character_set_results='cp1251'");
    mysql_query ("set collation_connection='cp1251_general_ci'");
    
    $query 
= "SELECT * FROM gbdata";
    $result = mysql_query($query);
    
    echo 
'<table align = center style="border: 1px dotted #FFC1C1">';
    while ($row = mysql_fetch_array($result))
    {    echo"<tr>";
        echo "<td>".$row['ID']."</td>"."<td>".$row['Name']."</td>"."<td>".$row['Email']."</td>";
        echo"</tr>";
        echo"<tr>";
        echo "<td>".$row['Msg']."</td>";
        echo"</tr>";
    }
    echo "</table>";
    
    mysql_close
($connection);


если брать 1251 то
Цитата
1 Антон an214@rambler.ru
привет
2 Антон an214@rambler.ru
привет



кого выкинуть ?

Спустя 7 минут, 43 секунды (11.09.2009 - 21:48) WhiteKnight написал(а):
А если брать utf8 то вот такое blink.gif

Цитата
1 ????? an214@rambler.ru
??????
2 ????? an214@rambler.ru
??????


Это я про браузер говорю

То че не использовать utf8 чтоли

Спустя 1 минута, 5 секунд (11.09.2009 - 21:49) glock18 написал(а):
1. сравни то, что ты делал, и то, что тебе дают.

2. выкинь phpma.

3. прочитай еще раз внимательно, что я тебе написал.

Спустя 4 минуты, 35 секунд (11.09.2009 - 21:54) WhiteKnight написал(а):
Цитата
а если серьезно, то надо, как сказано выше, выполнять запрос SET NAMES после подключения к базе данных.

Я правильно сделал это или нет ?

PMA чтоли не правильно делает ?

Спустя 28 минут, 58 секунд (11.09.2009 - 22:23) WhiteKnight написал(а):
отказаться от phpma, а что есть вместо него ?

Спустя 52 минуты, 36 секунд (11.09.2009 - 23:15) Soldier Ghost написал(а):
Сами файлы у тебя в какой кодировке? а именно add.php

Спустя 5 минут, 4 секунды (11.09.2009 - 23:20) WhiteKnight написал(а):
да в utf8 без бом

Спустя 1 минута, 36 секунд (11.09.2009 - 23:22) Soldier Ghost написал(а):
А тогда почему тут:
PHP
mysql_query ("set character_set_client='cp1251'");
    
mysql_query ("set character_set_results='cp1251'");
    
mysql_query ("set collation_connection='cp1251_general_ci'");

cp1251 ?

Спустя 2 минуты, 30 секунд (11.09.2009 - 23:24) WhiteKnight написал(а):
Я пробывал и 1251 и utf8
вот тут

mysql_query ("set character_set_client='cp1251'");
mysql_query ("set character_set_results='cp1251'");
mysql_query ("set collation_connection='cp1251_general_ci'");


с 1251 в браузере норм а с utf8 вот такая ерунда в браузере, за PMA уже молчу.

Да и зачем мне узконаправленная 1251 если utf международная

Спустя 3 минуты, 50 секунд (11.09.2009 - 23:28) Soldier Ghost написал(а):
Если ещё сама база в utf8 создай файл в корне .htaccess и впиши в него
HTML
AddDefaultCharset UTF-8

Да и измени за одно cp1251 на utf8 и напиши результат.

Спустя 13 минут, 3 секунды (11.09.2009 - 23:41) WhiteKnight написал(а):
заменил там на utf8 таже ерунда...

убрал вообще те три строки в файлах.

сохранил и все заново:инсталировал,добавил и в браузере

Цитата
1 Антон an214@rambler.ru
привет
2 Антон an214@rambler.ru
привет


В PMA все плохо

Осталось тогда разобраться. Почему PMA вот так грузит. Он же на всех хостингах стоит.

Спустя 6 минут, 29 секунд (11.09.2009 - 23:48) Soldier Ghost написал(а):
а ты когда базу создавал выбирал ut8_general_ci ?
Да и ещё вместо тех 3-х строчек напиши одну на их месте вот такую:
SQL
mysql_query("SET NAMES utf8");

и в файле который инклюдится ко всем файлам типа конфига в нём в самый вверх вставь
PHP
header("Content-type: text/html; charset=utf-8");

Спустя 14 минут, 16 секунд (12.09.2009 - 00:02) kirik написал(а):
Блин, все бы вам методом тыка smile.gif Кодировки такая штука что лучше один раз посидеть и разобраться, чем натыкаться каждый раз на одни грабли. Я просто обобщу и дополню то, что написали выше glock18 и Soldier Ghost.

0. кодировка файлов должна быть utf8 без BOM
1. вставляем в самое начало .htaccess
Код
AddDefaultCharset utf-8

2. вставляем в начало всех запрашиваемых php скриптов (не нужно вставлять если скрипт просто подключается include'om)
PHP
header('Content-type: text/html; charset="utf-8"');

3. в html части в самое начало head вставляем
HTML
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

4. после выбора БД делаем
PHP
$_db_link mysql_connect('server''user''password');
mysql_select_db('dbname'$_db_link);
mysql_set_charset('utf8'$_db_link);

предпочтительно, но при условии наличия php >= 5.2.3 и MySQL >= 5.0.7. Если версии старше, то делаем такой запрос:
PHP
$_db_link mysql_connect('server''user''password');
mysql_select_db('dbname'$_db_link);
mysql_query('SET NAMES UTF8'$_db_link);

5. при создании БД выбираем сравнение utf8_general_ci (для большинства сайтов)
6. при создании таблиц выбираем сравнение utf8_general_ci для регистронезависимых данных (комменты, посты) или utf8_bin для регистрозависимых (проще говоря, когда при выборки данных будет важен регистр символов).
7. заносим данные в таблицы/считываем и наслаждаемся smile.gif

Спустя 8 часов, 16 минут, 36 секунд (12.09.2009 - 08:19) Гость_hara написал(а):
а за что наехали на pma? чем он плох?

Спустя 5 минут, 38 секунд (12.09.2009 - 08:24) glock18 написал(а):
Яжговорю, выбрось phpma. Все элементарно:

1. с сайта все заносится нормально, и отображается нормально.
2. все что занес с сайта, отображается криво в phpma.
3. все что занес с phpma, отображается криво на сайте.

выводы:
1. кодировки в которых, записываются данные в базу разные.
2. данные заносимые на сайте, отображаются на нем нормально, а значит кодировка
подключения к базе на сайте правильная.

3. Я несколько утрирую бесполезность phpma, но проблема именно в нем, а точнее в том, что он выводит все или подключается к бд не в utf8.

способы решения:
1. в phpma должен быть конфиг, где можно указать кодировку соединения. ее надо поменять сам знаешь на что.
2. если нет такого, то можно тупо найти где он подключается к базе данных, и самому поставить туда запрос для, устанавливаюий кодировку. (а так же при необходимости meta тег и прочие нужности)



Спустя 6 минут, 17 секунд (12.09.2009 - 08:31) Гость_hara написал(а):
и какая разница set names или три других запроса
mysql man:
SQL
A SET NAMES 'x' statement is equivalent to these three statements:

SET character_set_client = x;
SET character_set_results = x;
SET character_set_connection = x;


PMA подключается с кодировкой базы, а если автор подлючился к базе (из скрипта add.php)
c кодировкой отличной от той в которой база, то конечно в базе кака, и pma её и показывает.
я думаю что всё же pma не при делах)
а вообще выполнить уже запрос show variables и посмотреть что то вроде этого:
SQL
character_set_client = utf8
character_set_connection = utf8
character_set_database = cp1251
character_set_results = utf8
character_set_server = cp1251
character_set_system = utf8
collation_connection = utf8_general_ci
collation_database = cp1251_general_ci
collation_server = cp1251_general_ci

Спустя 5 часов, 37 минут, 38 секунд (12.09.2009 - 14:08) WhiteKnight написал(а):
Если не писать ничего а просто файлы в utf8 без Бом
то все отлично отображается в браузере (За ПМА молчу)

а если я добавляю вот это
mysql_query('SET NAMES UTF8', $connection);

то вот такая ошибка
Ошибка при выполнении запроса
Incorrect string value: '\xD0\x90\xD0\xBD\xD1\x82...' for column 'Name' at row 1

Спустя 10 минут, 30 секунд (12.09.2009 - 14:19) Гость_hara написал(а):
ну значит база не в utf
а что гадать то а ?
почему нельзя открыть тот же pma или выполнить show variables и не посмотреть кодировку базы? о чём разговор вообще, зайди в pma и измени кодировку (сохранятся данные при этом или нет я не знаю, не пробовал) или постоянно перекодируй при выводе. всё логично никакой магии.
выше kirik написал все места где только можно указать кодировку (хотя везде и не обязательно)
вобщем разберёшься если не будешь каждый свой шаг постить на форум

Спустя 5 минут, 18 секунд (12.09.2009 - 14:24) WhiteKnight написал(а):
Все вроде норм теперь. и там и там
надо было когда БД создавал писать запрос так

PHP
$query = "CREATE DATABASE IF NOT EXISTS `gb` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci";

Спустя 4 часа, 11 минут, 57 секунд (12.09.2009 - 18:36) kirik написал(а):
Цитата (glock18 @ 12.09.2009 - 00:24)
Яжговорю, выбрось phpma. Все элементарно:

1. с сайта все заносится нормально, и отображается нормально.
2. все что занес с сайта, отображается криво в phpma.
3. все что занес с phpma, отображается криво на сайте.

Зря ты так smile.gif pma просто так криво не будет отображать, если так, то значит данные занесены неверно. Сам натыкался. Должно нормально отображаться и в pma и при выводе, иначе есть риск потерять данные..

Спустя 23 часа, 58 минут, 11 секунд (13.09.2009 - 18:34) Guest написал(а):
PHP
function сonnect()
{
$сonnect=mysql_сonnect(DB_HOSTDB_USERDB_PASS) or die("Can`t сonnect to mysql :(");
mysql_select_db(DB_NAME$сonnect) or die("Can`t select database");
mysql_query ("set character_set_client='utf8'");
mysql_query ("set character_set_results='utf8'");
mysql_query ("set collation_сonnection='utf8_general_ci'");

}

function 
row($row$assoc=0$num=0)
{
$res=@mysql_query($row);
if (
mysql_errno())
_error_log(mysql_error()." | ".$row);
if (
$assoc!=false && $num==false)
{
$return=@mysql_fetch_assoc($res);
}elseif (
$assoc!=false && $num!=false)
{
$num=@mysql_num_rows($res);
for (
$i=0;$i<$num;$i++)
$ress[]=@mysql_fetch_assoc($res);
$return=@$ress;
}
return @
$return;
}

юзать так:
$users=row("SELECT `id` FROM `users` WHERE `approve`=1"11);

Спустя 2 часа, 13 минут, 36 секунд (13.09.2009 - 20:48) HardWoman написал(а):
Ну е мое ну создавайте темы в своих разделах _ кодировки - буду наказывать
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.