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

Форум PHP

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

 

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

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

тема: Закачать прайс
 
 автор: Denandi   (08.01.2009 в 08:38)   письмо автору
 
 

Всем привет!
Народ, помогите решить задачу?
Достался древний сайт на переделку, одна из задач:
- добавление прайса (иксель) в DB
Структура прайса – 5 колонок примерно до 5000 наименований!
Не получается добавить «ПОСТРОЧНО!» т.е. первая колонка - у меня вливается «блоком», что не приемлемо!!! РЕЗУЛЬТАТ: 1БЛОК – 1ID (сортировка) : )))
Поэтому, колонка прайса состоит из, скажем 1000 строк – и имеет всего – 1 id !!! :- )А надо соответственно 1000 ……..и так упаковать все 5 колонок…

В цикле перебрать не получилось.
Есть какие нибудь предложения, сей реализации?
Спасибо!

  Ответить  
 
 автор: Denandi   (08.01.2009 в 15:01)   письмо автору
 
   для: Denandi   (08.01.2009 в 08:38)
 

Хорошо, возможно не так где выразился?
Например: есть $_POST (значение) данные формы – одной строкой «100 100 100 100 100…» около 5000!!!;
Как универсально записать «100 100 100 100 100…» в базу данных,  разложив  (один insert  = один «100» )????

  Ответить  
 
 автор: Trianon   (08.01.2009 в 15:05)   письмо автору
 
   для: Denandi   (08.01.2009 в 15:01)
 

каким символом разбиты значения?

  Ответить  
 
 автор: ols   (08.01.2009 в 15:07)   письмо автору
 
   для: Denandi   (08.01.2009 в 15:01)
 

Чтобы импортировать ы sql, сначала лучше перенвертировать xls в csv-формат.
Вы можете прикрепить кусок прайса в аттаче?

  Ответить  
 
 автор: Denandi   (08.01.2009 в 15:28)   письмо автору
21 Кб
 
   для: ols   (08.01.2009 в 15:07)
 

Суть: я с начала создал форму куда для простоты ввводил скопированные столбцы файла и отправлял...
теперь, мне кажется надо делать сохранение в txt с табуляцией - разделителями и загружать и рубить файл.. вообщем нихрена не получается, больше запутался!

буду признателен за помощь.
кусок файла прикрепил...

  Ответить  
 
 автор: ols   (08.01.2009 в 15:40)   письмо автору
 
   для: Denandi   (08.01.2009 в 15:28)
 

Данный xls-файл через MS Exel переконверитруйте в csv-формат (разделитель точка с запятой) в итоге например file.csv
Затем воспользуйтесь данным скриптом

<?php    
set_time_limit
(1000);
//конектимся к БД
include "config.php";
$handle fopen("file.csv""r");
while ((
$data fgetcsv($handle1000";")) !== FALSE
{      
$sql "INSERT INTO table VALUES ($data[0]','$data[1]','$data[2]','$data[3]')";
$qw mysql_query($sql);
if(
$qw)
    {
        echo 
'Импортировано:'.$sql.'<br />';    
    }
    else echo 
mysql_error();

}
fclose($handle);

?>

при условии что sql-таблица у вас имеет 4 поля

  Ответить  
 
 автор: Trianon   (08.01.2009 в 15:43)   письмо автору
 
   для: ols   (08.01.2009 в 15:40)
 

текстовые данные перед обрамлением кавычками следует экранировать.
Числовые данные - приводить к формату с десятичной точкой.

Рано Вам еще решать такие задачи.

  Ответить  
 
 автор: ols   (08.01.2009 в 15:48)   письмо автору
 
   для: Trianon   (08.01.2009 в 15:43)
 

>текстовые данные перед обрамлением кавычками следует экранировать.
Где имеено? Почему в апострофах нельзя?
>Числовые данные - приводить к формату с десятичной точкой.
>
>Рано Вам еще решать такие задачи.
В чем моя ошибка-то? :)

  Ответить  
 
 автор: Николай2357   (08.01.2009 в 15:56)   письмо автору
 
   для: ols   (08.01.2009 в 15:48)
 

Обидно будет, если в тексте точка с запятой встретится...

  Ответить  
 
 автор: Trianon   (08.01.2009 в 16:01)   письмо автору
 
   для: Николай2357   (08.01.2009 в 15:56)
 

Точка с запятой как раз спокойно пройдет как надо.

  Ответить  
 
 автор: Trianon   (08.01.2009 в 16:00)   письмо автору
 
   для: ols   (08.01.2009 в 15:48)
 

>>текстовые данные перед обрамлением кавычками следует экранировать.
>Где имеено? Почему в апострофах нельзя?
В данном случае неважно, кавычками или апострофами Вы обрамляете текст.
экранирование необходимо, иначе апостроф, обратный слеш (а возможно и еще несколько спецсимволов) приведут к синтаксической ошибке в запросе (в лучшем чслучае) или к SQL-инъекции ( в худшем)


>>Числовые данные - приводить к формату с десятичной точкой.

Посмотрите на третий столбик файле и в БД. Увидите.

>>Рано Вам еще решать такие задачи.
>В чем моя ошибка-то? :)

$sql = "INSERT INTO table VALUES ($data[0]','$data[1]','$data[2]','$data[3]')";

В том, что предложили готовый скрипт

  Ответить  
 
 автор: ols   (08.01.2009 в 16:42)   письмо автору
685 байт
 
   для: Trianon   (08.01.2009 в 16:00)
 

>Посмотрите на третий столбик файле и в БД. Увидите.

Я забыл в запросе апостров в $data[1] поставить

$sql = "INSERT INTO `table`
VALUES (
'$data[0]', '$data[1]', '$data[2]', '$data[3]'
)";

А в целом скрипт нормально импортировал данные - я им постоянно пользуюсь для импортирования объмных данных.
Я в аттаче прикрепил файл table.sql - результат работы скрипта. Все там правильно

  Ответить  
 
 автор: Trianon   (08.01.2009 в 17:10)   письмо автору
 
   для: ols   (08.01.2009 в 16:42)
 

Еще бы он не импортировал в tinytext и без единого спецсимвола в данных..
постоянно пользоваться Вы можете чем угодно.
Не надо только предлагать это другим в качестве универсального решения.

  Ответить  
 
 автор: ols   (08.01.2009 в 18:15)   письмо автору
 
   для: Trianon   (08.01.2009 в 17:10)
 

>Еще бы он не импортировал в tinytext и без единого спецсимвола в данных..
>постоянно пользоваться Вы можете чем угодно.
Я не зря сачала попросил структура прайса, где Вы там спецсимволы видите. Да может возникнуть проблема, если 3 столбец имеет тип поля например decimal.
Структуру таблицы человек не предоставил.

  Ответить  
 
 автор: Trianon   (08.01.2009 в 18:33)   письмо автору
 
   для: ols   (08.01.2009 в 18:15)
 

в структуре их и не будет.
А вот в данных им оказаться не помешает ничего.

  Ответить  
 
 автор: ols   (08.01.2009 в 18:42)   письмо автору
 
   для: Trianon   (08.01.2009 в 18:33)
 

>в структуре их и не будет.
>А вот в данных им оказаться не помешает ничего.

у я опять не понимаю что Вы имеете ввиду. Импортируем-то из прайса

  Ответить  
 
 автор: Trianon   (08.01.2009 в 18:49)   письмо автору
 
   для: ols   (08.01.2009 в 18:42)
 

имеемое в виду изложено (08.01.2009 в 15:43)

  Ответить  
 
 автор: Denandi   (08.01.2009 в 22:20)   письмо автору
 
   для: Trianon   (08.01.2009 в 15:43)
 

>Числовые данные - приводить к формату с десятичной точкой.

Все грузит, но цены округляет.. как правильно вырулить?
в таблице поле ставил- float по идее должно работать!
может предварительно обработать? floatval -не спасает
раньше просто float в базу ставил и все работало ..а сча нет..

  Ответить  
 
 автор: Trianon   (08.01.2009 в 22:28)   письмо автору
 
   для: Denandi   (08.01.2009 в 22:20)
 

>Все грузит, но цены округляет.. как правильно вырулить?
>в таблице поле ставил- float по идее должно работать!
>может предварительно обработать?

Ага. Дустом.

  Ответить  
 
 автор: Denandi   (08.01.2009 в 23:08)   письмо автору
 
   для: Trianon   (08.01.2009 в 22:28)
 

>Ага. Дустом.

??? поясни.

  Ответить  
 
 автор: Trianon   (08.01.2009 в 23:18)   письмо автору
 
   для: Denandi   (08.01.2009 в 23:08)
 

посмотрите текст SQL-запроса, который создается этим скриптом - всё станет ясно.

Когда я читаю вот такое "может предварительно обработать?", то совершенно уверен, что человеку наплевать как у него работает скрипт, или почему он не работает. Он не хочет вникать в детали.
Пояснять в ответ, конечно, можно... но в такой ситуации - зачем?

  Ответить  
 
 автор: Denandi   (09.01.2009 в 10:00)   письмо автору
 
   для: Trianon   (08.01.2009 в 23:18)
 

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


3 109,22
873,66
1 432,55
1 117,78
2 410,61
2 025,97
166,99
166,99
171,92


при проверки, не выводит тысячные...
например вместо 1 117,78 вставляет в DB = 1

Как сделать что бы DB приняла - "тысячные" в полном объеме? по шарил в функциях, ничего стоящего к сожалению не нашел

  Ответить  
 
 автор: Trianon   (09.01.2009 в 12:21)   письмо автору
 
   для: Denandi   (09.01.2009 в 10:00)
 

Вы не видите пробела после единицы?
Не видите запятой вместо точки?
Функция php - str_replace()
Функция MySQL - REPLACE()
Использовать можете любую.

  Ответить  
 
 автор: Denandi   (09.01.2009 в 16:26)   письмо автору
 
   для: Trianon   (09.01.2009 в 12:21)
 

>Вы не видите пробела после единицы?
+++++++++++++++++++++++++++++++++++++++++++++
Trianon - дружище!!! в упор НЕ В И Д Е Л пробел (точнее не мог представить себе его наличие!!! :-) )
Иксель то лепит по денежному формату... :))))
про урезания: все "зарезал" пробел стал роковым - невнимательность...
всех благодарю за помощь!

  Ответить  
 
 автор: ols   (08.01.2009 в 23:17)   письмо автору
 
   для: Denandi   (08.01.2009 в 22:20)
 

Понятное дело будет округлять. Обратите внимание на запятую в цене. Ее нужно заменить на точку

<?php
set_time_limit
(1000);
//конектимся к БД
include "config.php";
$handle fopen("file.csv""r");
while ((
$data fgetcsv($handle1000";")) !== FALSE)
{

 
$dt $data[2];
$dt str_replace(",",".",$dt);

$sql "INSERT INTO `table`
VALUES (null,
'
$data[0]', '$data[1]', '$dt', '$data[3]'
)"
;
$qw mysql_query($sql);
if(
$qw)
    {
        echo 
'Импортировано:'.$sql.'<br />';
    }
    else echo 
mysql_error()."<br />";

}
fclose($handle);

?>

Используйте тип данных DECIMAL для хранения цен.

  Ответить  
 
 автор: Trianon   (08.01.2009 в 15:41)   письмо автору
 
   для: Denandi   (08.01.2009 в 15:28)
 

То есть Вы еще не определились с тем, как отправлять данные на сервер.
Через .csv будет проще импортировать. Соответствующая функция в php - fgetcsv()

Не выделяйте, пожалуйста, текст как код - сообщение разъезжается так, что его приходится прокручивать по горизонтали скроллбаром.

  Ответить  
 
 автор: Denandi   (08.01.2009 в 17:26)   письмо автору
 
   для: Trianon   (08.01.2009 в 15:41)
 

Всем, огромное спасибо!
позже сяду опробую..
____________________________

>Не выделяйте, пожалуйста, текст как код - сообщение разъезжается так, что его приходится прокручивать по горизонтали скроллбаром.
:-) НЕ ЗНАЛ, БОЛЬШЕ НЕ БУДУ!!!

  Ответить  
 
 автор: ols   (08.01.2009 в 23:20)   письмо автору
 
   для: Trianon   (08.01.2009 в 15:41)
 

-

  Ответить  
 
 автор: Trianon   (08.01.2009 в 23:21)   письмо автору
 
   для: ols   (08.01.2009 в 23:20)
 

Я?! Смеетесь? :))
У меня таких возможностей нету. Да, откровенно говоря, и желания.

  Ответить  
Rambler's Top100
вверх

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