Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
 
Фильтр авторов:    показать 
  скрыть
  Закрытая темаСоздание новой темыСоздание опроса

> В чем ошибка при импорте из csv?, если перед русским словом нет символа он не сохраняется...
Strannik  
 ۩  [x]    Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 806
Пользователь №: 17108
На форуме: 8 лет, 4 месяца, 13 дней
Карма: 1




Добрый день не могу понять.
Код:
function conn()
{
$link = mysql_connect('.....','.....','.....') or die (mysql_error());
mysql_select_db('.....', $link);
mysql_query ("SET NAMES utf8");
mysql_query ("set character_set_client='utf8'");
mysql_query ("set character_set_results='utf8'");
mysql_query ("set collation_connection='utf8_general_ci'");
};
conn();
$filename="abase/work/base_csv.csv";
$handle = fopen("$filename", "r");
while (($data = fgetcsv($handle, 1000000, ";")) !== FALSE)
{
$sql="SELECT * FROM `user_info` WHERE `account` = '$data[2]'";
$res=mysql_query($sql);
if(!$res||mysql_num_rows($res)<1)
{$import_user_info="INSERT INTO `user_info`(`fio`, `account`, `living_space`, `occupancy`, `adress`, `telefone`, `mobile`, `email`, `icq`, `password`, `password_temp`, `status`) VALUES ('".mysql_real_escape_string($data[3])."', '$data[2]', '', '', '$data[4]', '', '', '', '', '', '', 'user')";}
else{$import_user_info="UPDATE `user_info` SET `fio` = '$data[3]', `account` = '$data[2]', `adress` = '$data[4]'";}
$res4=mysql_query($import_user_info);
}
}
fclose($handle);
echo'<br>Импорт завершен...';


$data[2] - это ФИО человека по - русски(например Иванов Иван Иванович).
Почему то если не идет импорт именно этого параметра, однако заметил, что если перед ФИО поставить символ(например 2Иванов Иван Иванович), то импорт базу данных проходит нормально и ФИО импортируется...

Подскажите почему так?



Спустя 33 минуты, 10 секунд (22.06.2012 - 22:44) sergeiss написал(а):
Что такое "импорт" - fgetcsv? Покажи целиком строку, которую импортируешь.

И кстати, при апдейте надо обязательно указать условие WHERE, иначе ты установишь все строки в таблице, сделаешь их одинаковыми smile.gif

Спустя 1 час, 41 минута, 18 секунд (23.06.2012 - 00:25) Strannik написал(а):
это первые 2 строчки из csv
01.05.2012 0:00;31.05.2012 23:59;1000540047;Ф И О;г Москва, ул КУЗНЕЦОВА, д.;0;0;0;0;0;0;;;;;
01.05.2012 0:00;31.05.2012 23:59;1004301248;Юрьева Марина Николаевна;432030, Московская обл, г Москва, б-р Архитекторов, дом № 5, кв.20;0;0;0;0;0;0;;;;;

Спустя 15 часов, 49 минут, 57 секунд (23.06.2012 - 16:15) Guest написал(а):
никто не знает???

Спустя 3 минуты, 40 секунд (23.06.2012 - 16:19) m4a1fox написал(а):
ИМХО! Кажется это пустота приходит.

Спустя 5 часов, 39 минут, 46 секунд (23.06.2012 - 21:58) sergeiss написал(а):
Попробуй вот такой код запустить, чтобы просто получить набор команд:

Свернутый текст
$handle = fopen( $filename, "r");
while (($data = fgetcsv($handle, 1000000, ";")) !==false)
{
$insert_user_info="INSERT INTO `user_info`(`fio`, `account`, `living_space`, `occupancy`, `adress`, `telefone`, `mobile`, `email`, `icq`, `password`, `password_temp`, `status`) VALUES ('".mysql_real_escape_string($data[3])."', '$data[2]', '', '', '$data[4]', '', '', '', '', '', '', 'user')";
$update_user_info="UPDATE `user_info` SET `fio` = '$data[3]', `account` = '$data[2]', `adress` = '$data[4]' WHERE какое_то_условие_для_выбора_нужной_строки";

echo "insert: $insert_user_info<br>update: $update_user_info<br>";
}



Попробуй эти команды, что получишь, вручную позапускать. И посмотри, какая из них не пойдет. Её и давай сюда, будем смотреть.

И обрати внимание - $filename не надо заключать в двойные кавычки!!! Так тоже будет работать, но это неправильно.

И еще!!!!! Для апдейта обязательно пиши условие. Иначе "обновишь" все строки в таблице. Сколько бы их ни было, но все станут одинаковые :) Затрёшь всё, что было.

Спустя 18 часов, 31 минута, 48 секунд (24.06.2012 - 16:30) Strannik написал(а):
Получаю такой результат :

insert: INSERT INTO `user_info`(`fio`, `account`, `living_space`, `occupancy`, `adress`, `telefone`, `mobile`, `email`, `icq`, `password`, `password_temp`, `status`) VALUES ('', '1000000001', '', '', ', ул КУЗНЕЦОВА, д.5А', '', '', '', '', '', '', 'user')
update: UPDATE `user_info` SET `fio` = '', `account` = '1000000001', `adress` = ', ул КУЗНЕЦОВА, д.5А' WHERE какое_то_условие_для_выбора_нужной_строки


такое ощущение, что он не читает $data[2]...

Спустя 4 часа, 22 минуты, 13 секунд (24.06.2012 - 20:52) sergeiss написал(а):
ОК. Тогда упрости цикл до такого:

while (($data = fgetcsv($handle, 1000000, ";")) !==false)
{
echo '<pre>'.print_r( $data, true).'</pre>';
}


и ты увидишь, что же у тебя читается в какие поля.

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

Спустя 14 часов, 33 минуты, 59 секунд (25.06.2012 - 11:26) Strannik написал(а):
sergeiss
спасибо за подсказки, я недавно вспомнил об одном случае: делал сайт и почему то дамп тоже не шел, система была на вордпресс. Я тогда дня 3 убил, потом нашел статейку про возможные ошибки.
Если в кратце - если сервер сам собираешь или сервак забугорный нужно смотреть(установить), чтобы там стояла локаль(locale) ru.RU_CP1251(может кому и пригодится).

В этом и оказалась причина.
Более подробно можно прочитать здесь

P.S.: sergeiss
признателен за подсказки)
PMICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темы Закрытая темаСоздание новой темыСоздание опроса