Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 27.04.2015, 00:08   #41
SaDiSST
Пользователь
 
Регистрация: 14.07.2011
Сообщений: 32
По умолчанию

Полный путь - в смысле, в формате 'C:\---\---\---\---.csv'? Просто по аналогии с HTML я рассчитывал, что скрипт словит файл в одной с ним директории...
SaDiSST вне форума
Старый 27.04.2015, 00:14   #42
Stanislav
Квадрокоптерист
Участник клуба Подтвердите свой е-майл
 
Регистрация: 29.09.2007
Сообщений: 1,824
По умолчанию

Цитата:
Сообщение от SaDiSST Посмотреть сообщение
Полный путь - в смысле, в формате 'C:\---\---\---\---.csv'? Просто по аналогии с HTML я рассчитывал, что скрипт словит файл в одной с ним директории...
Вы не поверите ловит:


Код:
	public function get_file()
	{
	
		$file_content = file ('products.csv');
		
		for ($i = $this->strStart; $i <= count($file_content); $i++) {
			if(isset($file_content[$i]))
			{
				$val = explode(';',$file_content[$i]);
				$this->mas_content[$val[0]] = $val;	
			}
		}
		
		echo '<pre>';
		print_r($this->mas_content);
		
	}
Код:
Array
(
    [1] => Array
        (
            [0] => 1
            [1] => Книга
            [2] => kniga
            [3] => 5.50
            [4] => Отличная книга. Содержит много интересной информации.
            [5] => Книги - один из основных источников знаний. Используется человечеством с незапамятных времен и может нести в себе абсолютно любую информацию
            [6] => 

        )

    [2] => Array
        (
            [0] => 2
            [1] => Ящик
            [2] => yashik
            [3] => 3.70
            [4] => Просто ящик. Нет, серьёзно.
            [5] => Служит для хранения и транспортировки чего угодно.
            [6] => 

        )

    [3] => Array
        (
            [0] => 3
            [1] => Жираф
            [2] => jiraf
            [3] => 18.50
            [4] => 
            [5] => Плюшевый жираф. Ничего особенного, если бы не его масштаб 1:2 от реального.
            [6] => 

        )

    [4] => Array
        (
            [0] => 4
            [1] => Снег
            [2] => sneg
            [3] => 0.99
            [4] => Привет, зима!
            [5] => Настоящий, пушистый и колючий снег, как из детства. Абсолютно бесполезен в странах Африканского континента.
            [6] => 

        )

    [5] => Array
        (
            [0] => 5
            [1] => Колбаса сырокопчёная
            [2] => kolbasa
            [3] => 1.20
            [4] => 
            [5] => Колбаса - бесспорно, одно из лучших изобретений человеческого гения. Уступает только двум вещам в своей полезности: колесу и сну.
            [6] => 

        )

)
Я часть той силы, что вечно хочет зла, но вечно совершает благо..
Stanislav вне форума
Старый 27.04.2015, 00:30   #43
SaDiSST
Пользователь
 
Регистрация: 14.07.2011
Сообщений: 32
По умолчанию

Цитата:
Сообщение от Stanislav Посмотреть сообщение
Вы не поверите ловит
Вы тоже мне не поверите, но... А, впрочем, посмотрите сами (скриншот в нормальном размере)

Но вот выводится почему-то с [3] позиции. И почему-то в панели управления БД не внесены добавленные из файла позиции...

Цитата:
Сообщение от SaDiSST Посмотреть сообщение
Но вот выводится почему-то с [3] позиции.
Этот вопрос решил - я убрал 1ю строку из .csv-файла и перенес содержимое на её место. Заменил
Код:
public $strStart = 2;
на
Код:
public $strStart = 0;
Но что не так с чтением кодировки файла?

Вопрос с кодировкой решен, всё оказалось довольно банально.
Изображения
Тип файла: jpg png.jpg (10.0 Кб, 119 просмотров)

Последний раз редактировалось Stilet; 05.05.2015 в 14:14.
SaDiSST вне форума
Старый 27.04.2015, 08:07   #44
Stanislav
Квадрокоптерист
Участник клуба Подтвердите свой е-майл
 
Регистрация: 29.09.2007
Сообщений: 1,824
По умолчанию

отлично можете дальше двигаться
Я часть той силы, что вечно хочет зла, но вечно совершает благо..
Stanislav вне форума
Старый 30.04.2015, 11:55   #45
xen
Пользователь
 
Регистрация: 13.03.2007
Сообщений: 45
По умолчанию

Посмотрел что в итоге получилось и вот какие замечания:
- в конструкторе класса Parser идет подключение к БД. Лучше передавать объект класса в конструктор, парсер не должен знать ничего о подключении к БД
- метод get_file. Можно конечно и так читать файл, но в php есть для этого готовые функции(fgetcsv)
- метод set_data.
1) update таблицы: Обновлять надо не только записи с текущим именем пользователя, но и с пустым этим полем(если не так - то что тогда делать с записями без пользователя?), при обновлении надо делать поле userID=<текущий пользователь>
2) insert: Вставка не всегда может завершиться успехом, т.к. после выборки всех записей(get_data) другой пользователь может вставить свою запись. Надо обрабатывать результат вставки.
После обработки всех записей(или в другое время) надо снять блокировки со всех строк БД, т.е. удалить пользователя. Это насколько я понял задачу. Потому что, если один пользователь добавил запись - то что теперь другой её не сможет изменить никогда?
В обоих методах не должно быть "or die".
xen вне форума
Старый 30.04.2015, 14:49   #46
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,160
По умолчанию

fgetcsv- "криво" работает с кирилицей ....
ADSoft вне форума
Старый 30.04.2015, 19:33   #47
Stanislav
Квадрокоптерист
Участник клуба Подтвердите свой е-майл
 
Регистрация: 29.09.2007
Сообщений: 1,824
По умолчанию

Цитата:
Сообщение от xen Посмотреть сообщение
Посмотрел что в итоге получилось и вот какие замечания:
- в конструкторе класса Parser идет подключение к БД. Лучше передавать объект класса в конструктор, парсер не должен знать ничего о подключении к БД
- метод get_file. Можно конечно и так читать файл, но в php есть для этого готовые функции(fgetcsv)
- метод set_data.
1) update таблицы: Обновлять надо не только записи с текущим именем пользователя, но и с пустым этим полем(если не так - то что тогда делать с записями без пользователя?), при обновлении надо делать поле userID=<текущий пользователь>
2) insert: Вставка не всегда может завершиться успехом, т.к. после выборки всех записей(get_data) другой пользователь может вставить свою запись. Надо обрабатывать результат вставки.
После обработки всех записей(или в другое время) надо снять блокировки со всех строк БД, т.е. удалить пользователя. Это насколько я понял задачу. Потому что, если один пользователь добавил запись - то что теперь другой её не сможет изменить никогда?
В обоих методах не должно быть "or die".
по классу можно еще кучу всяких плюшек сделать, и еще бла-бла-бла, цель была помочь автору код писался в слепую, хотите пишите свою версию автору будет полезно.

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

по второму пункту полный бред

Цитата:
В обоих методах не должно быть "or die".
Какая чушь. Если пишите, тогда давайте обоснование, мы просто прервали работу скрипта, автор захочет пусть обрабатывает исключения наводит марафет и т.д

вы похоже суть не улавливаете между помощью и написать готовое рабочее решение, не?
Я часть той силы, что вечно хочет зла, но вечно совершает благо..

Последний раз редактировалось Stanislav; 30.04.2015 в 22:24.
Stanislav вне форума
Старый 02.05.2015, 13:03   #48
xen
Пользователь
 
Регистрация: 13.03.2007
Сообщений: 45
По умолчанию

По поводу die автор вроде ясно написал что надо потом вывести результат работы. По второму пункту хотелось бы услышать обоснование.
xen вне форума
Старый 05.05.2015, 08:35   #49
Stanislav
Квадрокоптерист
Участник клуба Подтвердите свой е-майл
 
Регистрация: 29.09.2007
Сообщений: 1,824
По умолчанию

Цитата:
Сообщение от xen Посмотреть сообщение
По поводу die автор вроде ясно написал что надо потом вывести результат работы. По второму пункту хотелось бы услышать обоснование.
Для начала прежде чем лезть с советами или критиковать подучите мат-часть потом приходите ..

читать умеете?

Цитата:
$result = mysqli_query($sql) or DIE('Update was unsuccessful: ' . mysqli_error());
так для чего нужен or Die? а главное каким боком он связан с выдачей результатов (дальнейшие действие автора?)

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

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

Цитата:
т.к. после выборки всех записей(get_data) другой пользователь может вставить свою запись
ээээ ....

Цитата:
После обработки всех записей(или в другое время) надо снять блокировки со всех строк БД
все блокировки снимаются автоматически, дальше хуже....

Цитата:
, т.е. удалить пользователя.
психопатия?

Цитата:
Потому что, если один пользователь добавил запись - то что теперь другой её не сможет изменить никогда?
лучше больше не пишите, идите почитайте книг умных, ок?
Я часть той силы, что вечно хочет зла, но вечно совершает благо..

Последний раз редактировалось Stanislav; 05.05.2015 в 08:45.
Stanislav вне форума
Старый 05.05.2015, 13:55   #50
xen
Пользователь
 
Регистрация: 13.03.2007
Сообщений: 45
По умолчанию

Stanislav, либо я очень плохо объясняю, либо вы совершенно не понимаешь о чем речь.
Цитата:
так для чего нужен or Die? а главное каким боком он связан с выдачей результатов (дальнейшие действие автора?)
Просто бесит когда люди пишут die после возможно не успешного sql-запроса, т.к. ошибочный запрос это не всегда прерывание работы скрипта. Если нет соединения с БД - то можно сделать die. В данном же случае лучше собрать в массив результаты удачных и не удачных запросов и в конце работы скрипта вывести, например, 10 записей обновилось, 5 добавилось, 3 ошибки
Цитата:
insert: Вставка не всегда может завершиться успехом,
не только потому что была ошибка в запросе. Делать SELECT для проверки существования записи, а потом UPDATE по результатам работы SELECT неверно даже для одной записи(уже писал почему), а вы предлагаете вообще выбрать все записи.
Цитата:
все блокировки снимаются автоматически, дальше хуже....
А зачем по вашему в задаче нужно поле пользователь?
Вообще, сразу видно что у вас совершенно нет понимания того что доступ к БД может быть получен из нескольких PHP процессов одновременно и это вам следует изучить матчасть.

Stanislav, неужели до вас никак не дойдет что данный алгоритм будет нормально работать только если скрипт запускает один пользователь, если пользователей больше(о чем собственно автор и написал в задании) - то результат может быть не всегда правильным, т.к. нельзя исключать вероятность запуска скипта одновременно несколькими пользователями.

Последний раз редактировалось Stilet; 05.05.2015 в 14:13.
xen вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
csv 2 MySQL utf8 avduevsky PHP 2 30.04.2012 02:24
Конвертация CSV в MySQL -MagicAlex- SQL, базы данных 4 08.03.2011 20:54
Робота CSV с PHP Angel-ll PHP 0 10.09.2010 16:58
импорт csv в базу mysql andrey_94 PHP 3 26.08.2009 14:14
импорт csv в базу mysql andrey_94 Помощь студентам 3 26.08.2009 13:25