|
|
|
| Здравствуте!
Начинаю осваивать 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($ver, 0);
//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;
?>
|
| |
|
|
|
|
|
|
|
для: alek_chita
(10.01.2007 в 14:42)
| | 1)В какой кодировке у вас таблица????
2) Вы уверенны что в базе текст не ‘ҐаЈҐ©? | |
|
|
|
|
|
|
|
для: 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 что вы скажите? | |
|
|
|
|
|
|
|
для: alek_chita
(10.01.2007 в 14:42)
| | >Все в MySQL Command Line Client
Лучше запускайте mysql в командной строке, предварительно меняя кодировку с cp866 на cp1251 при помощи команды
| |
|
|
|
|
|
|
|
для: cheops
(10.01.2007 в 16:49)
| | Когда набираю в ком строке chcp 1251 она ругается, что такой команды не знает. :-( | |
|
|
|
|
|
|
|
для: alek_chita
(12.01.2007 в 16:27)
| | При запросе пользуйтесь функцией mysql_query(" SET NAMES 'cp1251' ");
Попробуйте, если не поможет - есть ещё способ... (Trianon подсказал), но это средставми php | |
|
|
|
|
|
|
|
для: Burn-89
(12.01.2007 в 16:49)
| | Функцией mysql_query('SET NAMES 'cp1251'') я воспользовался (см. выше файл conf.php).
А что за второй способ, позвольте полюбопытствовать? | |
|
|
|
|
|
|
|
для: 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:07)
| | Если не понятно, напишите название базы данных и таблицы, хотите могу файлы вам залить, останется просто создать БД с такими таблицами... | |
|
|
|
|
|
|
|
для: Burn-89
(12.01.2007 в 17:11)
| | База данных test, таблица authors. | |
|
|
|
|
|
|
|
для: 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 - первичный ключ, его в БД тоже надо создать... | |
|
|
|
|
|
|
|
для: Burn-89
(12.01.2007 в 17:28)
| | Спасибо за совет, обязательно попробую. Не могли ли вы мне вкратце обьяснить что делает функция convert_cyr_string() остальное мне понятно. | |
|
|
|
|
|
|
|
для: alek_chita
(12.01.2007 в 17:37)
| | Она массив $authors переводит в кодировку windows-1251, чтобы русскоязычный текст нормально отображался, у меня что-то типа было.... (Удачи ;-)) ) | |
|
|
|
|
|
|
|
для: alek_chita
(12.01.2007 в 16:27)
| | >Когда набираю в ком строке chcp 1251 она ругается, что такой команды не знает. :-(
команду chcp 1251 следует набирать не в диалголовом режиме консольного клиента mysql, а перед его запуском. После того как консольный клиент запущен, следует настроить кодировку соединения при помощи запроса
| |
|
|
|
|
|
|
|
для: cheops
(12.01.2007 в 17:24)
| | Ответьте, что получилось :-) | |
|
|
|
|
|
|
|
для: Burn-89
(12.01.2007 в 17:35)
| | Хорошо сейчас. Придется отключиться от инета на время.. Так что не теряйте. | |
|
|
|
|
|
|
|
для: Burn-89
(12.01.2007 в 17:35)
| | Пытаюсь запустить файл form.php все ок. А при заполнении формы вместо русских букв абракатабра. DDDKKK:::666 | |
|
|
|
|
|
|
|
для: cheops
(12.01.2007 в 17:24)
| | >>Когда набираю в ком строке chcp 1251 она ругается, что такой команды не знает. :-(
>команду chcp 1251 следует набирать не в диалголовом режиме консольного клиента mysql, а перед его запуском.
С ком строкой разобрался, вы были правы. Спасибо.
У нас 00,30 Иду спать.
Теперь осталось разобраться почему не получается ввод русских символов в формы?
cheops вы тут корифей на вас и на деемся.. :-) | |
|
|
|
|
|
|
|
для: alek_chita
(12.01.2007 в 18:24)
| | Сразу после установки соединения при помощи функции mysql_connect() выполняйте запрос
mysql_query("SET NAMES 'cp1251'");
|
| |
|
|
|
|
|
|
|
для: 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>
|
Когда я в браузере пытаюсь вводить данные они не коректно отбражаются...
Я базу данных даже еще не трогаю. | |
|
|
|
|
|
|
|
для: alek_chita
(13.01.2007 в 08:38)
| | А файл с формой в формате каком? Надо, чтобы в name.php | |
|
|
|
|
|
|
|
для: Burn-89
(13.01.2007 в 09:33)
| | Именно в таком. :-( | |
|
|
|
|
|
|
|
для: alek_chita
(13.01.2007 в 08:38)
| | А русский текст в этом файле (Имя, Пароль, Добавить) в какой кодировке в cp1251? | |
|
|
|
|
|
|
|
для: 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>
|
Кстати, в БД у вас из второго поля, что именно извлекается и совпадает ли со столбцом таблицы? | |
|
|
|
|
|
|
|
для: Burn-89
(13.01.2007 в 17:24)
| | Все что вы говорите я делал, результатов ноль. Н на днях установил Apache+PHP+MySQL на другую операционнку (у меня два винта) и все заработало. В чем проблема осталось загадкой. Настройки скрипты одни и теже.. | |
|
|
|