Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: PHP MySQL кодировки...
 
 автор: alek_chita   (10.01.2007 в 14:42)   письмо автору
 
 

Здравствуте!

Начинаю осваивать PHP+MySQL. Создал базу, таблицу, поместил значение(Все в
MySQL Command Line Client). При запуске сценария:


<?php
    
include "config.php";
    
$ath mysql_query("select name from authors");
    if (
$ath) echo mysql_result($ath,0,'name');
    else exit(
mysql_error());
?>


Выдает значение в виде: ‘ҐаЈҐ©. Понятно что проблемы с кодировкой. А как бороться?
Подскажите пожалуйста.

P.S. файл conf.php:



<?php
  
// Адерс сервера MySQL
  
$dblocation "localhost";
  
// Имя базы данных, на хостинге или локальной машине
  
$dbname "test";
  
// Имя пользователя базы данных
  
$dbuser "root";
  
// и его пароль
  
$dbpasswd "";

  
// Устанавливаем соединение с базой данных
  
$dbcnx = @mysql_connect($dblocation$dbuser$dbpasswd);
  if (!
$dbcnx) {
   exit( 
"<P>В настоящий момент сервер базы данных не доступен,
             поэтому корректное отображение страницы невозможно.</P>" 
);
  }
  echo 
"К серверу подключились";
  
// Выбираем базу данных
  
if (! mysql_select_db($dbname$dbcnx) ) {
    exit( 
"<P>В настоящий момент база данных не доступна,
              поэтому корректное отображение страницы невозможно.</P>" 
);
  }
  echo 
"<P>К базе подключились.</P>";
  
// Определяем версию сервера
  
$query "SELECT VERSION()";
  
$ver mysql_query($query);
  if(!
$ver) exit("Ошибка при определении версии MySQL-сервера");
  
$version mysql_result($ver0);
  
//echo "<P>Version = ".$version."</P>";
  
list($major$minor) = explode("."$version);
  
// Если версия выше 4.1 сообщаем серверу, что будем работать с
  // кодировкой cp1251
  
$ver $major.".".$minor;
  if((float)
$ver >= 4.1)
  {
    
mysql_query("SET NAMES 'cp1251'");
  }
  
//echo $ver;
?>

   
 
 автор: Poison   (10.01.2007 в 15:14)   письмо автору
 
   для: alek_chita   (10.01.2007 в 14:42)
 

1)В какой кодировке у вас таблица????
2) Вы уверенны что в базе текст не ‘ҐаЈҐ©?

   
 
 автор: alek_chita   (12.01.2007 в 16:37)   письмо автору
 
   для: Poison   (10.01.2007 в 15:14)
 

1. Если не ошибаюсь cp1251 general_ci
2. Если смотреть из консоли MySQL то точно все Ок.

Кстати, что интерестно если я вношу данные в таблицу через ПХП скрипт в редакторе Aditor Pro

<form method=post>
    <br>Имя: <input type=text name=name>
    <br>Пароль<input type=text name=passw >
    <br><input type=submit value="Отправить!"></form>
<?php


    
include "config.php";

    if(empty(
$_POST['name'])) exit("ПОСТ пустой");
    
$query = ("insert into authors (name, passw)
                    values ('
$_POST[name]', '$_POST[passw]')");
    if (
mysql_query($query))
    {
        echo 
"<html><head>
                <meta http-equiv='refresh' content='0'; url='
$_SERVER[PHP_SELF]'>
                </head></html>"
;
    }
    else exit(
mysql_error());
?>


, то в консоли абракатабра, а скриптами все выводится отлично.

А вот при попытке ввести данные и при запуске скрипта созданного в PHP Expert Editore:

<form method=post>
    <textarea name="small_news" cols="30" rows="5"></textarea>
    <br><input type=submit value="Отправить!">
</form>
<?php


    
include "config.php";

    if(empty(
$_POST['name'])) exit("ПОСТ пустой");
    
$query = ("insert into authors (name, passw)
                    values ('
$_POST[name]', '$_POST[passw]')");
    if (
mysql_query($query))
    {
        echo 
"<html><head>
                <meta http-equiv='refresh' content='0'; url='
$_SERVER[PHP_SELF]'>
                </head></html>"
;
    }
    else exit(
mysql_error());
?>

в поле textarea вводится абракотабра. :-(


И еще проблема: в PhpMyAdmine данные внесенные через скрипт отображаются правильно, а редактировать я не могу, т.к. в textarea вводится абракатабра - , очевидно, проблемы с кодировкой. :-(

cheops что вы скажите?

   
 
 автор: cheops   (10.01.2007 в 16:49)   письмо автору
 
   для: alek_chita   (10.01.2007 в 14:42)
 

>Все в MySQL Command Line Client
Лучше запускайте mysql в командной строке, предварительно меняя кодировку с cp866 на cp1251 при помощи команды
chcp 1251

   
 
 автор: alek_chita   (12.01.2007 в 16:27)   письмо автору
 
   для: cheops   (10.01.2007 в 16:49)
 

Когда набираю в ком строке chcp 1251 она ругается, что такой команды не знает. :-(

   
 
 автор: Burn-89   (12.01.2007 в 16:49)   письмо автору
 
   для: alek_chita   (12.01.2007 в 16:27)
 

При запросе пользуйтесь функцией mysql_query(" SET NAMES 'cp1251' ");
Попробуйте, если не поможет - есть ещё способ... (Trianon подсказал), но это средставми php

   
 
 автор: alek_chita   (12.01.2007 в 17:00)   письмо автору
 
   для: Burn-89   (12.01.2007 в 16:49)
 

Функцией mysql_query('SET NAMES 'cp1251'') я воспользовался (см. выше файл conf.php).

А что за второй способ, позвольте полюбопытствовать?

   
 
 автор: Burn-89   (12.01.2007 в 17:07)   письмо автору
 
   для: alek_chita   (12.01.2007 в 17:00)
 

Но это из базы данных в броузер, но можно из форм переводить в опр.кодировку и записывать в БД, попробуйте из формы занести какие-то данные, а потом в цикле выполнить как показано в скрипте...

while($authors = mysql_fetch_array($query, MYSQL_ASSOC))

{

$key = convert_cyr_string($authors['id_name'], "a", "w"); /Если не получается (поменять "a" -> "u")
$name = convert_cyr_string($authors['name'], "a", "w");
$family = convert_cyr_string($authors['family'], "a", "w");

echo("$key<br>$name<br>$family<br>");

}
////////// $query - строка с запросом, $authors - массив куда помещаются значения БД из таблицы, ['name'] - название столбцов.
Попробуйте, может быть, то что нужно...

   
 
 автор: Burn-89   (12.01.2007 в 17:11)   письмо автору
 
   для: Burn-89   (12.01.2007 в 17:07)
 

Если не понятно, напишите название базы данных и таблицы, хотите могу файлы вам залить, останется просто создать БД с такими таблицами...

   
 
 автор: alek_chita   (12.01.2007 в 17:21)   письмо автору
 
   для: Burn-89   (12.01.2007 в 17:11)
 

База данных test, таблица authors.

   
 
 автор: Burn-89   (12.01.2007 в 17:28)   письмо автору
 
   для: alek_chita   (12.01.2007 в 17:21)
 

А в authors названия столбцов? Допустим, что name & family (имя пользователя и фамилия), тогда:

<?php
$location = "localhost";
$username = "root";
$passwd = "";
$dbname = "test";

$connect = @mysql_connect($location, $username, $passwd);
if(!$connect) {echo("Error");}

$select = mysql_select_db($dbname, $connect);
if(!$select) {echo("Ошибка в выборе базы данных!");}

$query = mysql_query("insert into authors values(0,'$name','$lastname');");
if($query)
{
echo("Данные успешно внесены в базу данных!!!");
}
else
{
echo("Извините, произошла ошибка");
}
?>
////////// Это файл MySQL.php
/////////Дальше form.php

<form action=MySQL.php method=post>
Имя: <input type=text name=name><br>
Фамилия: <input type=text name=lastname><br>
<input type=submit name=add value=Добавить>
</form>

Запускайте form.php и пробуйте...

После создайте файл Query.php
залейте в него скрипт:

<?php
$location = "localhost";
$username = "root";
$passwd = "";
$dbname = "forum";

$connect = @mysql_connect($location, $username, $passwd);
if(!$connect) { echo("Невозможно подключить базу данных"); }

$select = mysql_select_db($dbname, $connect);
if(!$select) { echo("База данных не выбрана"); }

$query = mysql_query("select * from authors;");
if(!$query) { echo("Запрос не выполнен");}



while($authors = mysql_fetch_array($query, MYSQL_ASSOC))

{

$key = convert_cyr_string($authors['id_name'], "a", "w");
$name = convert_cyr_string($authors['name'], "a", "w");
$family = convert_cyr_string($authors['family'], "a", "w");

echo("$key<br>$name<br>$family<br>");

}

?>
//// id_name - первичный ключ, его в БД тоже надо создать...

   
 
 автор: alek_chita   (12.01.2007 в 17:37)   письмо автору
 
   для: Burn-89   (12.01.2007 в 17:28)
 

Спасибо за совет, обязательно попробую. Не могли ли вы мне вкратце обьяснить что делает функция convert_cyr_string() остальное мне понятно.

   
 
 автор: Burn-89   (12.01.2007 в 17:39)   письмо автору
 
   для: alek_chita   (12.01.2007 в 17:37)
 

Она массив $authors переводит в кодировку windows-1251, чтобы русскоязычный текст нормально отображался, у меня что-то типа было.... (Удачи ;-)) )

   
 
 автор: cheops   (12.01.2007 в 17:24)   письмо автору
 
   для: alek_chita   (12.01.2007 в 16:27)
 

>Когда набираю в ком строке chcp 1251 она ругается, что такой команды не знает. :-(
команду chcp 1251 следует набирать не в диалголовом режиме консольного клиента mysql, а перед его запуском. После того как консольный клиент запущен, следует настроить кодировку соединения при помощи запроса
SET NAMES 'cp1251'

   
 
 автор: Burn-89   (12.01.2007 в 17:35)   письмо автору
 
   для: cheops   (12.01.2007 в 17:24)
 

Ответьте, что получилось :-)

   
 
 автор: alek_chita   (12.01.2007 в 17:43)   письмо автору
 
   для: Burn-89   (12.01.2007 в 17:35)
 

Хорошо сейчас. Придется отключиться от инета на время.. Так что не теряйте.

   
 
 автор: alek_chita   (12.01.2007 в 18:20)   письмо автору
 
   для: Burn-89   (12.01.2007 в 17:35)
 

Пытаюсь запустить файл form.php все ок. А при заполнении формы вместо русских букв абракатабра. DDDKKK:::666

   
 
 автор: alek_chita   (12.01.2007 в 18:24)   письмо автору
 
   для: cheops   (12.01.2007 в 17:24)
 

>>Когда набираю в ком строке chcp 1251 она ругается, что такой команды не знает. :-(
>команду chcp 1251 следует набирать не в диалголовом режиме консольного клиента mysql, а перед его запуском.
С ком строкой разобрался, вы были правы. Спасибо.

У нас 00,30 Иду спать.

Теперь осталось разобраться почему не получается ввод русских символов в формы?

cheops вы тут корифей на вас и на деемся.. :-)

   
 
 автор: cheops   (12.01.2007 в 19:44)   письмо автору
 
   для: alek_chita   (12.01.2007 в 18:24)
 

Сразу после установки соединения при помощи функции mysql_connect() выполняйте запрос
mysql_query("SET NAMES 'cp1251'");

   
 
 автор: alek_chita   (13.01.2007 в 08:38)   письмо автору
 
   для: cheops   (12.01.2007 в 19:44)
 

Я вас наверно запутал. Тут вопрос уже не в mysql. Мне наверно надо в другой пост открывать..
Вот код:


<!DOCTYPE HTML PUBLIC -//W3C//DTD HTML 4.01 Transitional//ru
    <html><head>
    <title> ::Форма ::</title>

<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
</head>

<body>

<form action=mysql.php method=post>
Имя: <input type=text name=name><br>
Пароль: <input type=text name=passw>
 <br>
<input type=submit name=add value=Добавить>
</form>
</head>
</html>


Когда я в браузере пытаюсь вводить данные они не коректно отбражаются...
Я базу данных даже еще не трогаю.

   
 
 автор: Burn-89   (13.01.2007 в 09:33)   письмо автору
 
   для: alek_chita   (13.01.2007 в 08:38)
 

А файл с формой в формате каком? Надо, чтобы в name.php

   
 
 автор: alek_chita   (13.01.2007 в 13:10)   письмо автору
 
   для: Burn-89   (13.01.2007 в 09:33)
 

Именно в таком. :-(

   
 
 автор: cheops   (13.01.2007 в 13:20)   письмо автору
 
   для: alek_chita   (13.01.2007 в 08:38)
 

А русский текст в этом файле (Имя, Пароль, Добавить) в какой кодировке в cp1251?

   
 
 автор: Burn-89   (13.01.2007 в 17:24)   письмо автору
 
   для: cheops   (13.01.2007 в 13:20)
 

Попробуйте без доктайпа и отправки заголовка, без тегов-просто "голый" скрипт, вот так

<form action=mysql.php method=post> 
Имя: <input type=text name=name><br> 
Фамилия: <input type=text name=family> <br> 
<input type=submit name=add value=Добавить> 
</form> 

Кстати, в БД у вас из второго поля, что именно извлекается и совпадает ли со столбцом таблицы?

   
 
 автор: alek_chita   (18.01.2007 в 13:04)   письмо автору
 
   для: Burn-89   (13.01.2007 в 17:24)
 

Все что вы говорите я делал, результатов ноль. Н на днях установил Apache+PHP+MySQL на другую операционнку (у меня два винта) и все заработало. В чем проблема осталось загадкой. Настройки скрипты одни и теже..

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования