|
|
|
| Подскажите, пожалуйста, что нужно сделать, чтобы можно было добавлять значения в базу на русском языке. Пишу следующий запрос:
<?php
require_once("config.php");
if (!get_magic_quotes_gpc()){
$_POST['Login'] = mysql_real_escape_string($_POST['Login']);
$_POST['SurName'] = mysql_real_escape_string($_POST['SurName']);
$_POST['FirstName'] = mysql_real_escape_string($_POST['FirstName']);
$_POST['Patronymic'] = mysql_real_escape_string($_POST['Patronymic']);
}
$SearchQuery = mysql_query("select * from users where Login = ".$_POST['Login'].";");
if(mysql_fetch_array($SearchQuery)){
exit("Логин ".$_POST['Login']." уже существует!");
}else{
$InsertQuery = "INSERT INTO Users
(SurName, FirstName, Patronymic, Login)
VALUES
('$_POST[SurName]','$_POST[FirstName]','$_POST[Patronymic]','$_POST[Login]')";
if(!mysql_query($InsertQuery)) exit(mysql_error());
else echo("Запись добавлена!");
}
?>
|
Выдается следующее сообщение: Data too long for column 'Surname' at row 1
Добавляю значение: Иванов, в базе размерность поля 15 символов. С английскими значениями все добавляется новмально. Подскажите как исправить. | |
|
|
|
|
|
|
|
для: 666
(07.08.2006 в 10:42)
| | Добавьте в конфигурационный файл config.php следующую строку, которая настроит кодировку соединения
<?php
@mysql_query("SET NAMES 'cp1251'");
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(07.08.2006 в 12:35)
| | Правильно ли я Вас понял? Вы имели ввиду файл config.php - для установления соединения с базой и выбор БД? Если да, то там у меня уже присутствует эта строка. Содержимое config.php:
<?php
$dblocation = "localhost";
$dbname = "MailBase";
$dbuser = "root";
$dbpasswd = "password";
$dbcnx = @mysql_connect($dblocation, $dbuser, $dbpasswd);
if (!$dbcnx){
exit("<P>В настоящий момент сервер базы данных не доступен, поэтому корректное отображение страницы невозможно.</P>");}
if(!@mysql_select_db($dbname, $dbcnx)){
exit("<P>В настоящий момент база данных не доступна, поэтому корректное отображение страницы невозможно.</P>");}
$query = "SELECT VERSION()";
$ver = mysql_query($query);
if(!$ver)
exit("Ошибка при определении версии MySQL-сервера");
$version = mysql_result($ver, 0);
list($major, $minor) = explode(".", $version);
$ver = $major.".".$minor;
if((float)$ver >= 4.1){
mysql_query("SET NAMES 'cp1251'");
}
?>
|
Кстати, выдает следующую ошибку:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in
D:\Project\RegUser.php on line 15
Data too long for column 'Surname' at row 1 | |
|
|
|
|
|
|
|
для: 666
(07.08.2006 в 16:18)
| | Поступите проще
<?php
$dblocation = "localhost";
$dbname = "MailBase";
$dbuser = "root";
$dbpasswd = "password";
$dbcnx = @mysql_connect($dblocation, $dbuser, $dbpasswd);
if (!$dbcnx){
exit("<P>В настоящий момент сервер базы данных не доступен, поэтому корректное отображение страницы невозможно.</P>");}
if(!@mysql_select_db($dbname, $dbcnx)){
exit("<P>В настоящий момент база данных не доступна, поэтому корректное отображение страницы невозможно.</P>");}
@mysql_query("SET NAMES 'cp1251'");
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(07.08.2006 в 17:28)
| | Последовал Вашему совету - результат тот же - с данными на английском все замечательно, пытаюсь ввести фамилию русскими буквами выдается все та же ошибка:
Data too long for column 'Surname' at row 1 | |
|
|
|
|
|
|
|
для: 666
(07.08.2006 в 19:19)
| | А структура таблицы Users какая? Какой тип назначен полю Surname и что туда помещается? | |
|
|
|
|
|
|
|
для: cheops
(07.08.2006 в 19:38)
| | Таблица Users имеет тип InnoDB. Поле Surname - фамилия имеет тип char(15). Вставляю я туда значения из текстового поля, но перед этим удаляю "ненужные" символы следующим образом:
$_POST['SurName'] = mysql_real_escape_string($_POST['SurName']);
|
| |
|
|
|
|
|
|
|
для: 666
(07.08.2006 в 19:52)
| | а в какой кодировке у Вас выводится html-страница с формой? | |
|
|
|
|
|
|
|
для: Trianon
(07.08.2006 в 19:57)
| | Кодировка windows-1251 | |
|
|
|
|
|
|
|
для: 666
(07.08.2006 в 19:52)
| | А какой длины вставляемое поле $_POST['SurName']? | |
|
|
|
|
|
|
|
для: cheops
(07.08.2006 в 20:44)
| | Например подобная ошибка выводится, при дабовлении строки "Иванов". | |
|
|
|
|
|
|
|
для: 666
(07.08.2006 в 21:12)
| | вот при добавлении строки Иванов - что выдает echo strlen($_POST['SurName']); ? | |
|
|
|
|
|
|
|
для: Trianon
(07.08.2006 в 21:21)
| | При добавлении строки Иванов, echo strlen($_POST['SurName']); выводит на экран строку
Иванов | |
|
|
|
|
|
|
|
для: 666
(07.08.2006 в 21:38)
| | >При добавлении строки Иванов, echo
>strlen($_POST['SurName']); выводит на экран строку
>Иванов
Это уже сюрр... echo strlen(...) должно число напечатать.
В лучшем случае (в однобайтовой кодировке) - 6
В худшем (html-unicode) - 30. | |
|
|
|
|
|
|
|
для: Trianon
(07.08.2006 в 23:27)
| | Прошу прощения, trianon, вчера поздно это все делал, и что-то с просони напутал...
Конечно же strlen() выдает число - число 6. А строку Иванов выдает $_POST['SurName']. | |
|
|
|
|
|
|
|
для: 666
(07.08.2006 в 19:52)
| | А если поменять вызовы mysql_real_escape_string на mysql_escape_string, картина остается прежней? | |
|
|
|
|
|
|
|
для: Trianon
(07.08.2006 в 20:55)
| | Абсолютно такой же результат. Уже мозги кипят... | |
|
|
|
|
|
|
|
для: 666
(07.08.2006 в 21:15)
| | Попробуй после выбора базы прописать
это чуть длинее чем та сокращенная функция, но должна работать
mysql_query ("set character_set_client='cp1251'");
mysql_query ("set character_set_results='cp1251'");
mysql_query ("set collation_connection='cp1251_general_ci'"); | |
|
|
|
|
|
|
|
для: !!!Леха
(08.08.2006 в 11:18)
| | Блин, народ выручайте, уже не знаю что делать...
!!!Леха, последовал твоему совету - не помогло.
Увеличил размерность поля в базе до 255 - не помогло.
Проверил, может русские буквы конвертируются в вид %xx - тоже вроди бы все нормально. Везде в переменных записано строка Иванов. И че с этим делать понятия не имею... Подскажите кто знает... | |
|
|
|
|
|
|
|
для: 666
(08.08.2006 в 13:12)
| | Вы бы показали дамп структуры таблицы чтоли... | |
|
|
|