'." n" ;
?>
Использовать urlencode () для $data неправильно, так как кодировать данные в urlencode () это обязанность браузера. Все популярные браузеры делают это правильно. Отметьте, что это происходит вне зависимости от метода (например, GET или POST). Однако, вы заметите это только в случае GET запроса, так как POST запросы обычно скрыты.
Данные, редактируемые пользователем
echo «
echo htmlspecialchars ($data)." n" ;
echo «» ;
?>
Данные показываются браузером как предполагается, потому что браузер будет интерпретировать экранированные HTML символы. При отправке через GET или POST данные будут закодированы (urlencoded) браузером для передачи и раскодированы (urldecoded) PHP. Поэтому вам не надо выполнять какое-либо url-кодирование/раскодирование самим, все выполняется автоматически.
В URL
echo ''." n" ;
?>
На самом деле вы представляетесь HTML GET запросом, поэтому необходимо вручную закодировать (urlencode ()) данные.
Вам надо применить htmlspecialchars () на полный URL, потому что URL появляется как значение HTML атрибута. В этом случае, браузер сначала раскодирует все значение (де-htmlspecialchars ()) и затем URL. PHP поймет URL правильно, так как вы закодировали данные сurlencode (). Вы заметите, что & в URL заменяется на &. Хотя большинство браузеров это исправляют, если вы забудете об этом, но все же это не всегда возможно. Поэтому, даже если ваш URL не динамический, вам надо закодировать его с помощью htmlspecialchars ().
Когда пользователь щелкает где-либо на картинке, серверу будет послана сопутствующая форма с двумя дополнительными переменными: foo. x и foo.y.
Так как имена foo. x и foo. y нелегальны в PHP, они автомагически превращаются в foo_x иfoo_y. То есть, точки заменяются на подчеркивания. Вы обращаетесь к этим переменным так же как и к любым другим, описанным в разделе о получении переменных извне PHP. Например,$_GET['foo_x'].
HTML тэг select с multiple позволяет пользователю выбрать несколько элементов из списка. Эти элементы затем передаются обработчику формы. Проблема в том, что они все переданы с одним и тем же именем. Например:
exit ();
}
?>
// Код соединения с базой данных
if (!@mysql_select_db ($dbname, $dbcnx))
{
echo («
В настоящий момент база данных не доступна, поэтому корректное отображение страницы невозможно.
»);exit ();
}
?>
$dblocation = «localhost» ;
$dbname = «softtime» ;
$dbuser = «root» ;
$dbpasswd = «» ;
$dbcnx = @mysql_connect ($dblocation,$dbuser,$dbpasswd);
if (!$dbcnx)
{
echo («
В настоящий момент сервер базы данных не доступен, поэтому
корректное отображение страницы невозможно.
");exit ();
}
if (!@mysql_select_db ($dbname, $dbcnx))
{
echo («
В настоящий момент база данных не доступна, поэтому корректное отображение страницы невозможно.
»);exit ();
}
?>
include «config.php» ;
$ath = mysql_query («select * from authors;»);
if ($ath)
{
$author = mysql_fetch_array ($ath);
echo «
имя = «.$author['name']. «
" ;
echo «пароль = «.$author['passw']. «
" ;
echo «e-mail = «.$author['email']. «
" ;
echo «url = «.$author['url']. «
" ;
echo «ICQ = «.$author['icq']. «
" ;
echo «about = «.$author['about']. «
" ;
echo «photo = «.$author['photo']. «
" ;
echo «time = «.$author['time'];
}
else
{
echo «
Error: «.mysql_error ().»
" ;exit ();
}
>?
1.5. Denwer
Денвер (от сокр. Д.н.w.р или ДНВР — джентльменский набор Web-разработчика) — набор дистрибутивов и программная оболочка, предназначенные для создания и отладки сайтов (веб-приложений, прочего динамического содержимого интернет-страниц) на локальном ПК (без необходимости подключения к сети Интернет) под управлением ОС Windows.
В 1999 году Дмитрий Котеров написал статью «Apache + Perl + PHP3 + MySQL для Windows 95/98: руководство по установке"[2]. Как он рассказывает в своём интервью[3]отвечая на письма читателей, он задумался над автоматизацией процесса. Так появился «джентльменский набор web-разработчика (д.н.w.р.)». Поначалу это был просто zip-архив размером около 1,5 Мбайт, с урезанными версиями Apache, Perl, PHP, MySQL и phpMyAdmin + скриптами на Perl для запуска/остановки компонентов и работы с несколькими виртуальными хостами одновременно. Все компоненты системы уже были сконфигурированы так, чтобы работать только с относительными файловыми путями, вне зависимости от каталога, куда ставится пакет. 15 марта 2002 года вышла первая официальная версия «Denwer», в котором появился простой инсталлятор, который копировал файлы в указанное место и предлагал добавить ярлыки в папку автозагрузки Windows.
Сразу после установки доступен полностью работающий веб-сервер Apache, работающий на локальном компьютере, на котором может работать неограниченное количество сайтов, что очень эффективно для разработки и отладки сценариев PHP без загрузки его файлов на удаленный сервер. Для запуска практически всех утилит «Денвера» используется приложение Run в подкаталоге /denwer (или /etc) корневого каталога установки «Денвера». При запуске создается виртуальный диск (по умолчанию Z:), где хранятся все файлы проектов.
Вы создаёте локальный сервер на своей собственной машине и можете сделать много различных сайтов, которые прекрасно будут работать, но видны будут только на вашей машине.
Преимущества системы в том, что вы создаёте сайт на своей стороне, без выхода в сеть, вы его полностью тестируете, проверяете на наличие ошибок и недоработок, а по его полной готовности просто переносите (заливаете) его по ФТП на сервер вашего хостера.
Многие (преимущественно дизайнеры) могут спросить: зачем вообще нужен локальный Web-сервер, когда страницы можно открывать и так — прямо с диска? Если это обычные (статические) HTML-страницы, то да, сервер не нужен. Однако даже для такой мелочи, как SSI (Server-side Includes — директивы в страницах, позволяющие вставлять на нужное место содержимое других файлов), уже необходим сервер. Не говоря уж о скриптах — они без сервера просто не запустятся.
Денвер отличный помощник для веб-разработчика, привыкая работать в этой системе, вы учитесь работать с домашним сервером, вникаете в суть CMS и самое главное (на мой взгляд) — вы привыкаете работать грамотно.
2.Проектирование сайта
2.1 Постановка задач и функционал сайта Задачи которые перед собой ставит сайт:
Уведомить население о своем продукте Облегчить покупку и доставку Обезопасить население от некачественного товара Сохранить важнейший ресурс человека-время Функционалважнейшая часть в разработке интеренет магазина, на которую необходимо обратить внимание. Чем оптимальнее набор функциий интернет магазина — тем более комфортно чувствуют себя клиенты.
Поиск товара — подразумевает наличие функций для поиска товара в каталоге товаров интернет магазина. Обычно подразумевает под собой наличие на всех страницах интернет магазина поисковой строки. В большинстве случаев поиск по сайту подбирает информацию по точному вхождению, то есть полному совпадению поискового запроса с найденной информацией.
Сортировка товаров — подразумевает функцию упорядовачивания товаров в каталоге исходя из таких параметров, как:
Цена (от дешевых к дорогим, и наоборот) Наименование (по алфавиту наименований) Рейтинг (при наличии функции рейтинговой оценкитоваров покупателями. От самых популярных к менее и наоборот.)
Данная функция также относится к необходимым так как для большинства покупателей лимитирующим и определяющим фактом покупки является цена, следовательно, необходимо иметь под рукой подобный функционал.
Фильтрирование и подбор товаров — подразумевает выбор из каталога товаров по нужными параметрами. Очень ччасто многие разработчики сайтов именуют подбор и фильтрование синонимами, однако это неправильно. Так как, не смотря на свою схожесть, подбор и фильтрование являются различными функциями и работают они по-разному.
Сравнение товаров. Создавая интеренет магазина нужно помнить, что сейчас есть множество товаров, которые очень похожу по своим параметрам и найти различия между ними гораздно труднее, чес сходство. А вот цена при этом может различаться на порядок. Чтобы покупателям было легче сделать выбор в пользу того или иного продукта необходимо включить в разработку интернет магазина функцию сравнения товаров.
2.2 Внешняя структура сайта Структура сайта — это система взаимного расположения его частей, т. е. это то, из каких частей он состоит и как эти части располагаются на сайте.
Внешняя структура сайта — это блок-схема сайта, это то, какие элементы (части) Вы используете на всех страницах сайта и каково их взаимное расположение. Это то, что Вы видите, заходя на любой сайт. Упрощенную модель сайта (его макет) можно представить так:
У каждого сайта есть шапка, где обычно пишется заголовок (подзаголовок) сайта, навигационное меню, где пишутся названия рубрик, меток и другая полезная информация, основная часть сайта (на рисунке — область контента), где публикуется основная информация (попросту говоря — там, где сама статья), подвал, где показана некоторая служебная информация.
Конечно, такая структура — не догма, я встречал сайты без шапки, без футера (подвала), с одной или несколькими боковыми колонками (она называются сайдбар), сайдбары могут располагаться справа, слева или с обеих сторон, но в целом такая структура оптимальна, позволяет подать всю нужную информацию. Мой блог сделан именно по такой схеме.
Ниже предоставлен рисунок структуры сайта Рисунок 1 — Внешняя структура сайта Теперь остановимся на нашем сайте который рекламируют продукцию комнапии LIQUIMOLY которая занимается распространеим продукции для автомобилей.
Рисунок 2 — Главная страница интернет-магазина Шапка сайта — это титульная верхняя часть дизайн-макета веб-страницы. Соответственно, нижняя часть страницы называется подвалом или футером сайта. Основное назначение этого элемента — дать четкое обозначение начала страницы.
Шапка сайта является важной составляющей макета и представляет собой сквозной элемент (общий для всех страниц сайта), на котором располагают такую основную информацию, как логотип, название компании, слоган, контакты, иногда, меню навигации и другой важный контент. Дизайн шапки должен отличаться от общего дизайна макета и, одновременно, гармонировать с ним, сохраняя целостность внешнего вида веб-ресурса.
Как правило, шапка — это самый красивый и заметный элемент ресурса, от привлекательности которого во многом зависит первое впечатление, которое составляют посетители, зашедшие на сайт. Поэтому разработку шапки лучше поручить профессиональному веб-дизайнеру. При желании сэкономить, можно приобрести готовые недорогие или бесплатные шаблоны, или попытаться создать шапку самостоятельно, воспользовавшись видео-уроками, пособиями и онлайн консультациями специальных сервисов.
В нашем сайте шапкой является вверхняя часть сайта.
Рисунок 3 — Шапка интернет магазина Баннер — графическое изображение рекламного характера, аналогичное рекламному модулю в прессе. Может быть как статичным изображением или даже текстом, так и содержать анимированные элементы (вплоть до видео и интерактивных объектов). Как правило, содержит гиперссылку на сайт рекламодателя или страницу с дополнительной информацией.
Рисунок 4 — Баннер интернет-магазина Меню — наиболее распространенная навигационная система, она похожа на оглавление к книге. Меню состоит из коротких текстовых активных ссылок на определенные страницы сайта. Отметим, что меню должно быть видно с любой страницы ресурса тогда пользователь сможет воспользоваться им в любой момент. Составление полного меню, благодаря которому будет осуществляться быстрый переход на искомые страницы, для больших сайтов (свыше 50 страниц) практически невыполнимая задача. Тогда на помощь приходит раскрывающееся меню, т. е. когда человек кликает на какую либо ссылку, открывается несколько дополнительных ссылок, характеризующих подразделы. Можно размещать несколько меню: одно под шапкой два других по бокам — справа и слева. В том случае, если сайт небольшой, то лучше ограничиться формированием меню в правой колонке сайта, т.к. это очень удобно и привычно для пользователя. В общем, справа лучше располагать самые важные ссылки на разделы, поскольку данная зона наиболее активна на сайте (на этот угол посетитель чаще всего смотрит, наверное, приноравливаясь нажать на крестик «закрыть» в правом верхнем углу браузера).
Помните о цветовом восприятии меню — не стоит делать так, чтобы ссылки сливались с общим фоном — они должны выделяться, но, тем не менее, гармонировать с дизайном сайта. Также выделяйте другим цветом те ссылки, по которым пользователь уже однажды совершал переход.
При формировании меню не забывайте выносить в названия разделов ключевые слова, по которым будет продвигаться ресурс, однако соблюдайте баланс, ведь за стремлением все подряд оптимизировать для роботов, можно потерять реальных посетителей — людей.
Рисунок 5 — Основное меню сайта Рисунок 6 — Меню продукции Основной блок — часть сайта где показана основная его деятельность сайта. Обычно в основном блоке показывается то, что мы хотим вывести с помощью ячейки меню. Очень важно чтобы основной блок был удобен в использовании, так как это одна из главных критериев успешности сайтов.
Рисунок 7 — Основной блок Теперь разберем каждый часть меню по отдельности. Вкладка-Главная при нажатии на эту вкладку у нас появляется окно с приветствием и логотипом компании.
Рисунок 8 — Главная вкладка Вкладка о доставке и оплате. Данная часть меню отвечает за то как клиент сможет забрать или получить свою покупку. Здесь указывается также цены за доставку. Одно из главных удобст интернет-магазина является то, что вы можете совершить покупку даже не выходя из дома.
Рисунок 9 — Доставка и оплата Далее у нас идут Контакты. Это необходимо для того чтобы связаться с магазином и совершить заказ. Также если у вас есть какие-либо претензии к качеству товара или он напросто не подходит, вы также можете связаться с магазином и потребовать возрат. В большинстве случаев магазин совершит возрат, так как многие магазины переживают за свою репутацию.
Рисунок 10 — Контакты Осталось разобрать каталог товаров. Каталог товаров состоит из трех вкладок: присадки, смазочные материалы, средства для ремонта и обслуживания. При нажатии на присадки у нас появится виды присадок Рисунок 11 — Виды присадок
Попробуем нажать на первый пункт Присадки к маслам.
Рисунок 12 — Присадки к маслам Далее при нажатии на каждую из пунктом появятся различные товары которые можно будет купить, нажав на кнопку в корзину. Следующий пункты Смазочные материалы и Средства для ремонта и обслуживания Рисунок 13 — Смазочные материалы Рисунок 14 — Средства для ремонта Остался единственный элемент который мы не разобрали — корзина. При покупки товара он сохраняется в корзине где мы можем просмотреть что мы купили и в каком количестве.
Рисунок 15 — Корзина
2.3 Внутренняя структура сайта Внутренняя структура сайта показывает структуру работа движка. Данный сайт был построен на подобии структуры которой показана ниже. (Рис 16).
Рисунок 16 — Внутренняя структура сайта
Класс для работой с БД занимается импортированием и записью данных в бд.
Асбтрактный класс для работы с таблицами
Этот класс дает возможность для ускоренной разработки интерфейса для работы с БД. Класс JTable поможет в осуществлении таких действий, как блокировка, создание или удаление содержимого таблиц базы данных. Функции, которые поддерживает класс JTable, приведены ниже:
Возможность копирования информации к JTable;
Запись данных в XML;
Полное управление записями;
Возможность сопоставить запись с набором заранее определенных правил;
Блокировка пользователя в любое время Возможность сортировки записей таблиц;
Создание активной записи;
Создание счетчика количества просмотров записи;
Для того, чтобы можно было работать с записями таблицы БД, позволяет осуществить выполнение всех основных функций при работе с таблицей — CRUD (Create Read Update Delete). Но для работы класс необходимо расширить, то есть — создать новый класс для каждой таблицы, которая будет работать в классе JTable. Если при создании подкласса строго придерживаться определенных правил, то это позволит нам вставить созданное расширение в framework Joomla. Каждое новое имя класса должно быть с префиксом table, и этот класс должен располагаться в каталоге tables, каждый в новом отдельном файле в административном разделе компонента. Работа с классом JTable показана на примере ниже.
Классы для работы с таблицами. Данный класс занимается любыми манипуляциями с таблицами.
Классы страниц генерирует HTML страницы Шаблонизатор это программное обеспечение, позволяющее использовать html-шаблоны для генерации конечных html-страниц. Основная цель использования шаблонизаторов — это отделение представления данных от исполняемого кода. Часто это необходимо для обеспечения возможности параллельной работы программиста и дизайнера-верстальщика. Использование шаблонизаторов часто улучшает читаемость кода и внесение изменений во внешний вид, когда проект целиком выполняет один человек.
Конфигурация содержит информацию о количестве страниц, паролях, логинах Вспомогательные классы представляет собой класс обслуживания. Данный класс принимает информацию от пользователя обрабатывает ее и выдает в том виде в котором хочет пользователь.
Класс управления схема использования нескольких шаблонов проектирования, с помощью которых модель приложения, пользовательский интерфейс и взаимодействие с пользователем разделены на три отдельных компонента таким образом, чтобы модификация одного из компонентов оказывала минимальное воздействие на остальные. Данная схема проектирования часто используется для построения архитектурного каркаса, когда переходят от теории к реализации в конкретной предметной области.
3. Разработка сайта
3.1 Диаграмма прецендентов
Диаграмма прецедентов (англ. use case diagram, диаграмма вариантов использования) в UML — диаграмма, отражающая отношения между актёрами и прецедентами и являющаяся составной частью модели прецедентов, позволяющей описать систему на концептуальном уровне Прецедент — возможность моделируемой системы (часть её функциональности), благодаря которой пользователь может получить конкретный, измеримый и нужный ему результат. Прецедент соответствует отдельному сервису системы, определяет один из вариантов её использования и описывает типичный способ взаимодействия пользователя с системой. Варианты использования обычно применяются для спецификации внешних требований к системе.
Основное назначение диаграммы — описание функциональности и поведения, позволяющее заказчику, конечному пользователю и разработчику совместно обсуждать проектируемую или существующую систему.
При моделировании системы с помощью диаграммы прецедентов системный аналитик стремится:
чётко отделить систему от её окружения;
определить действующих лиц (актёров), их взаимодействие с системой и ожидаемый функционал системы;
определить в глоссарии предметной области понятия, относящиеся к детальному описанию функционала системы (то есть, прецедентов).
Работа над диаграммой может начаться с текстового описания, полученного при работе с заказчиком. При этом нефункциональные требования (например, конкретный язык или система программирования) при составлении модели прецедентов опускаются (для них составляется другой документ) Рисунок 16 — Диаграмма прецендентов Анализируя этот рисунок можно сказать, что покупатель сначала выбирает область товара, далее вид товара. После того как он выбрал все необходимые покупки все помещается в корзину, откуда уже происходит доставка и оплата товаров.
3.2 ER-диаграмма Модель сущность-связь (ER-модель) (англ. entity-relationship model, ERM) — модель данных, позволяющая описывать концептуальные схемы предметной области.
ER-модель используется при высокоуровневом (концептуальном) проектировании баз данных. С её помощью можно выделить ключевые сущности и обозначить связи, которые могут устанавливаться между этими сущностями.
Во время проектирования баз данных происходит преобразование ER-модели в конкретную схему базы данных на основе выбранной модели данных (реляционной, объектной, сетевой или др.).
ER-модель представляет собой формальную конструкцию, которая сама по себе не предписывает никаких графических средств её визуализации. В качестве стандартной графической нотации, с помощью которой можно визуализировать ER-модель, была предложена диаграмма сущность-связь (ER-диаграмма).
Рисунок 17 — ER диаграмма Диаграмма наша состоит из трех таблиц, так как покупатели выбирают товар потом он проверяется на наличие в складе, если товар присутсвует то уже тогда оформляется заказ.
3.3 Руководство пользователя
интернет магазин сайт Главная Главная страница админ панели является в основе своей информативной. Здесь вы можете просмотреть динамически изменяющиеся показатели работы вашего интернет магазина, последние новости от SellBe, а также статистику посещений интернет магазина (по умолчанию, статистика посещений считается hit.ua, существует возможность подключить Google Analitics).
На графике посещаемости изображены следующие характеристики:
" Хосты" - число уникальных адресов (IP), с которых были обращения;
" Пользователи" - число уникальных идентификаторов компьютеров, с которых были обращения;
" Хиты" - общее кол-во обращений.
Товары Раздел «Товары» позволяет непосредственно управлять номенклатурой интернет магазина.
Список товаров На странице списка товаров отображаются товары в соответствии с условиями фильтрации. Фильтровать можно по категории, производителю, архивные/активные товары, и поиск по названию.
Если отметить флаг напротив товара, то можно выполнить групповые действия над отмеченными позициями:
Категоризировать — указать категорию с каталога SellBe, к которой относятся выбранные товары;
Переместить — указать категорию из дерева категорий магазина;
Редактировать — быстрое редактирование отмеченных товаров, в таком режиме доступны следующие поля: цена, старая цена, в наличии и цены для оптовых групп;
Архивировать/Разархивировать — изменить состояние товаров;
Удалить — безвозвратно удалить товары.
Добавление/Редактирование товара Для добавления товара нажмите на кнопку добавить, которая отображается на странице со списком товаров.
Для редактирования товара наведите на товар в списке и нажмите на кнопку «Редактировать» или на название товара или дважды кликните по подсветившейся строке.
Для создания дубликата товара перейдите на страницу редактирования и нажмите на кнопку «Дублировать» .
Поля товара
Название | выводится в заголовке страницы, чрезвычайно важно для поисковой оптимизации. Название у всех товаров должны быть разными, однако платформа не запрещает создавать товары с одинаковым именем |
Изображение | загруженное фото будет отображаться в списке товаров, на странице товара, а также в галерее. Загружайте изображение в хорошем качестве, платформа сохранит его в нужном размере |
Анонс | краткое описание товара, отображается в списке товаров |
Артикул | артикул товара |
Категория | категория или несколько категорий, к которым относится данный товар. Товар будет отображаться на станицах категорий, к которым он добавлен |
Производитель | также, как и категории, помогает организовать товары. Товары с указанным производителем будут отображаться на соответствующей странице |
Описание | детальное описание характеристик, особенностей и свойств товара |
Цена | стоимость единицы товара |
Старая цена | данное поле не обязательно, но если значение указано, то оно будет выводиться перечеркнутым |
Количество в наличии | количество единиц товара на складе |
Приоритет | чем больше значение, тем раньше товар появится на странице со списком товаров (по категории, производителю или коллекции) |
Не отображать на сайте (Архив) | если товар помечен данным флагом, то он не будет отображаться на сайте |
Ярлыки | ярлыки для продвижения товаров, такие как «Супер цена», «Лидер продаж», «Новинка». Список ярлыков можно редактировать |
Сопутствующие товары | список товаров, которые отображаются на странице товара. Для добавления сопутствующих товаров введите несколько символов названия товара, который вы хотите добавить, нажмите Enter и выберите найденный товар |
Каталог | выберите из списка категорий наиболее подходящую категорию из каталога, при необходимости воспользуйтесь поиском. Товар, у которого указана категория, отобразится в общем каталоге товаров всех магазинов платформы SellBe |
Импорт Импорт позволяет вам загрузить товары из файла в формате Excel.
Для импорта необходимо:
Выбрать категорию, в которую выполняется импорт товаров.
Загрузить файл формата «.XLS» с данными.
Указать соответствие данных колонкам с Excel.
Примечания к импорту отдельных колонок:
Обязательной колонкой является название товара, всем остальным колонкам можно проставить значение «Пусто». В таком случае значение поля не будет импортироваться.
Для загрузки картинки нужно указать ее адрес в интернете.
Описание товара может быть передано в виде HTML.
Если значение, которое указано в колонке производитель, уже существует, то для товара будет сохранен существующий производитель. В случае, когда имя производителя новое — будет создан новый производитель.
После выполнения импорта настройки значений колонок в админ панели будут сохранены.
Категории Дерево категорий имеет иерархическую структуру. Для добавления подкатегории кликните правой кнопкой мыши и в появившемся меню выберите «Добавить». Категории можно перемещать вниз, вверх или в другую подкатегорию, для этого выберите категорию и перетяните ее в соответствующее место или на нужную категорию.
Производители На странице «Список производителей» добавляются и редактируются производители (бренды). Так же как и категории, производители, служат для организации продукции вашего магазина Доставка Создавать и редактировать виды доставки вы можете в меню «Доставка». При этом указываете название доставки, а также комиссию, которая снимается с покупателя за доставку.
Вид доставки покупатель выбирает в выпадающем списке при оформлении заказа Настройки В меню «Настройки» редактируются настройки корзины.
Кратко об основных настройках.
Изменять количество товаров при заказе — если галочка установлена, то в случае получения заказа количество единиц в наличии уменьшится на количество заказанных.
Номер следующего заказа — номер, который присваивается при поступлении нового заказа;
Минимальная сумма заказа — сумма, начиная с которой пользователь может оформить заказ;
Email для оповещения о заказе — email, на который приходят уведомления о поступлении нового заказа;
SMS уведомления о заказе на мобильный — номер телефона, на который приходит SMS уведомление о поступлении нового заказа;
Скидочная группа по умолчанию — скидочная группа, которая будет присвоена пользователю, если он зарегистрируется на интернет магазине.
IP адреса, с которых приходят спам заказы, можно добавить в черный список.
Сейчас все больше людей, далеких от компьютерных технологий (простых пользователей), открывают для себя Сеть, все больше компьютеров появляется дома, все больше женщин активно используют интернет. А это, в свою очередь, сказывается на ассортименте продаваемых товаров. Помимо магазинов, торгующих компьютерными комплектующими, в сети появилось множество «торговых точек», предлагающих все: от автомобилей и мебели до женского кружевного белья и продуктов. Экспериментировать можно сколько угодно, однако согласно многим исследованиям наиболее популярными сетевыми товарами остаются информация, книги, аудио и видео продукция, компьютерные программы, туристические услуги. То есть такие товары, в которых содержание важнее внешнего вида. Потому оцените свой товар — если его надо пощупать, попробовать или померить, то учтите, что потенциальные покупатели будут гораздо критичнее относиться к приобретению такого товара через сеть. Даже в Америке, в которой Интернетом пользуются около 2/3 населения старше 12 лет, покупатели, как показывают исследования, до сих пор не очень-то доверяют полностью виртуальным супермаркетам и предпочитают покупать еду в сети у знакомых по офф-лайну продавцов.
Если товар необходимо доставлять быстро (пиццу или обеды в офис, например) то надо позаботиться о собственной оперативной службе доставки (кому нужен горячий обед с доставкой на дом через сутки? Кушать-то сейчас хочется). Доставка крупных, хрупких или очень дорогих товаров тоже должна производиться с учетом специфики.
Если товар подходит под категорию продаваемых через интернет, следующий этап — оценка конкурентов. Посмотрите другие сайты, предлагающие такие же или аналогичные товары, сделайте контрольные закупки, сохраните на своем жестком диске прайсы. Чем ваше предложение будет лучше? Чем Ваш сайт будет удобнее? Какие дополнительные услуги вы сможете предложить своим клиентам? Здесь есть над чем задуматься.
И главное вы должны иметь четкий план и четко представлять себе, что будет, если ваш товар не «пойдет», что будет, если он станет продаваться очень большими темпами, как вести себя, если ваш товар будет продаваться в тех количествах, когда вы не сможете отказаться от его продаж, но недостаточных, чтобы окупить проект. Потом, когда вы запустите свой магазин, вы сможете оперативно вносить изменения в свой план, в зависимости от ситуации.
Заранее просчитав большинство из вариантов развития ситуации, вы получите несомненное превосходство над конкурентами.
Список литературы
1. Акила К., Еремеевский А. Интернет-магазин с нуля. Полное пошаговое руководство; Питер — Москва, 2013. — 176 c.
2. Басыров Р. 1С-Битрикс. Строим профессиональный сайт и интернет-магазин; Книга по Требованию — Москва, 2011. — 544 c.
3. Рассел Джесси Интернет-магазин; Книга по Требованию — Москва, 2012. — 100 c.
4. Рейнолдс Мэтью Сделай сам интернет-магазин; Лори —, 2008. — 536 c.
5. Соловьев Д., Писарев А. Интернет-магазин без правил; Питер — Москва, 2013. — 670 c.
Приложение, А Класс для работы с базой данных:
require_once «config_class.php» ;
require_once «checkvalid_class.php» ;
class DataBase {
private static $db = null;
private $config;
private $mysqli;
private $valid;
public static function getDB () {
if (self:$db == null) self:$db = new DataBase ();
return self:$db;
}
private function __construct () {
$this→config = new Config ();
$this→mysqli = new mysqli ($this→config→host, $this→config→user, $this→config→password, $this→config→db);
$this→mysqli→query («SET NAMES 'UTF8'»);
$this→valid=new CheckValid ();
}
private function query ($query) {
return $this→mysqli→query ($query);
}
public function getAllonMass ($table_name,$field,$mass){
if ($mass===null) return false;
$mass=array_keys ($mass);
$mass = array_unique ($mass);
$mass = implode («,» ,$mass);
$query="SELECT «;
$field=explode (',',$field);
for ($i=0;$i if ($field[$i]≠"*" &&strpos ($field[$i],')')===false) $field[$i]='`'.addslashes ($field[$i]).'`'; } $field=implode (',',$field); $query.="$field FROM `$table_name` WHERE id IN ($mass)" ; $result_set=$this→query ($query); if (!$result_set) return false; $i=0; $data=array (); while ($r=$result_set→fetch_assoc ()){ $data[$i]=$r; $i++; } $result_set→close (); return $data; } public function select_where ($table_name,$where,$value) {if ($value=="") return false; $query="SELECT * FROM `$table_name` WHERE $where='" .addslashes ($value)." '" ; $result_set=$this→query ($query); if (!$result_set) return false; $i=0; while ($row=$result_set→fetch_assoc ()) { $data[$i]=$row; $i++; } $result_set→close (); return $data; } public function select_all ($table_name){ $query="SELECT * FROM `$table_name`" ; $result_set=$this→query ($query); if (!$result_set) return false; $i=0; while ($row=$result_set→fetch_assoc ()) { $data[$i]=$row; $i++; } $result_set→close (); return $data; } public function select_search ($table_name,$values){ $query="SELECT * FROM `$table_name` WHERE `title` LIKE '%$values%' OR `articul` LIKE '%$values%' OR `description` LIKE '%$values%'" ; $result_set=$this→query ($query); $i=0; while ($row=$result_set→fetch_assoc ()){ $data[$i]=$row; $i++; } $result_set→close (); return $data; } public function insert_product ($table_names,$columns,$new_values){ $id=$this→getLastID («ordered»); $query="INSERT INTO «.$table_names[1]. «(order_id,» ; foreach ($columns as $len){ $query.="`$len`," ; } $query=substr ($query, 0,-1); $query.=") VALUES «; foreach ($new_values as $key=>$value){ $query.="('" .$id." ','" .$key." ','" .$value." ')," ; } $query=substr ($query, 0,-1); return $this→query ($query); } public function getAllOnTypeID ($table_name,$typeID,$start,$end,$up=true){ if (!up){ $order=" ORDER BY `price` DESC «; } else { $order=" ORDER BY `price` «; } $query="SELECT * FROM `$table_name` WHERE `type_id`=$typeID" .$order." LIMIT $start,$end" ; $result=$this→query ($query); $i=0; while ($row=$result→fetch_assoc ()){ $data[$i]=$row; $i++; } $result→close (); return $data; } /*public function deleteOnID ($table_name,$id){ $query="DELETE FROM $table_name WHERE id=$id" ; return $this→query ($query); }*/ public function getRowsNumber ($table_name){ $query="SELECT COUNT (*) AS `numbers` FROM $table_name" ; $resulting→$this→query ($query); $result=$resulting→fetch_assoc (); $resulting→close (); return $result; } public function getLastRow ($table_name){ $query="SELECT LAST (*) FROM $table_name" ; $result=$this→query ($query); $result_set=$result→fetch_assoc (); $result→close (); return $result_set; } public function insert ($table_name, $new_values) { $query="INSERT INTO $table_name («; foreach ($new_values as $field => $value) $query .="`" .$field." `," ; $query=substr ($query, 0, -1); $query .= «) VALUES («; foreach ($new_values as $value) $query .="'" .addslashes ($value)." '," ; $query=substr ($query, 0, -1); $query.=")" ; return $this→query ($query); } private function select ($table_name, $fields, $where="", $order="" ,$up=true, $limit="") { for ($i=0; $i if ((strpos ($fields[$i], «(„)===false)&&($fields[$i]≠"*“)) $fields[$i]="`» .$fields[$i]. «`» ; } $fields=implode («,» ,$fields); $table_name=$this→config→db_prefix.$table_name; if (!$order) $order="ORDER BY `id`" ; else { if ($order≠"RAND ()") { $order="ORDER BY `$order`" ; if (!$up) $order .=" DESC" ; } else $order = «ORDER BY $order» ; } if ($limit) $limit="LIMIT $limit" ; if ($where) $query="SELECT $fields FROM $table_name WHERE $where $order $limit" ; else $query="SELECT $fields FROM $table_name $order $limit" ; $result_set=$this→query ($query); //if (!$result_set) return false; $i=0; while ($row=$result_set→fetch_assoc ()) { $data[$i]=$row; $i++; } $result_set→close (); return $data; } private function update ($table_name, $upd_fields, $where) { $table_name=$this→config→db_prefix.$table_name; $query="UPDATE $table_name SET «; foreach ($upd_fields as $fields => $value) $query.="`$field` = '" .addslashes ($value)." '" ; $query=substr ($query, 0, -1); if ($where) { $query.=" WHERE $where" ; return $this→query ($query); } else return false; } public function delete ($table_name, $where = «») { $table_name=$this→config→db_prefix.$table_name; if ($where) { $query="DELETE FROM $table_name WHERE $where" ; return $this→query ($query); } else return false; } public function deleteAll ($table_name) { $table_name=$this→config→db_prefix.$table_name; $query="TRUNCATE TABLE `$table_name`" ; return $this→query ($query); } public function getFields ($table_name, $field_out, $field_in, $value_in) { $data=$this →select ($table_name, array ($field_out), «`$field_in`='» .addslashes ($value_in)." '"); if (count ($data)≠1) return false; return $data[0][$field_out]; } public function getFieldOnId ($table_name,$id, $field_out) { if (!$this→existsID ($table_name, $id)) return false; return $this→getFields ($table_name, $field_out, «id», $id); } public function getAll ($table_name, $order, $up) { return $this→select ($table_name, array («*»), «», $order, $up); } public function getAllOnField ($table_name, $field, $value, $order, $up) { return $this→select ($table_name, array («*»), «`$field`='» .addslashes ($value)." '", $order, $up); } public function getLastID ($table_name) { $data=$this→select ($table_name, array («MAX (`id`)»)); return $data[0][" MAX (`id`)" ]; } public function deleteOnID ($table_name, $id) { if (!$this→existsID ($table_name, $id)) return false; return $this→delete ($table_name, «`id`='$id'»); } public function setField ($table_name, $field, $value, $field_in, $value_in) { return $this→update ($table_name, array ($field =>$value), «`$field_in` = '» .addcslashes ($value_in)." '"); } public function setFieldOnID ($table_name, $id, $field, $value) { if (!$this→existsID ($table_name, $id)) return false; return $this→setField ($table_name, $field, $value, «id», $id); } public function getElementOnID ($table_name, $id) { if (!$this→existsID ($table_name, $id)) return false; $arr=$this→select ($table_name, array («*»), «`id` = '$id'»); return $arr[0]; } public function getRandomElements ($table_name, $count) { return $this→select ($table_name, array («*»), «», «RAND ()», true, $count); } public function getCount ($table_name) { $data=$this→select ($table_name, array («COUNT (`id`)»)); return $data[0][" COUNT (`id`)" ]; } public function isExists ($table_name, $field, $value) { $data=$this→select ($table_name, array («id»), «`$field` = '» .addslashes ($value)." '"); if (count ($data)===0) return false; return true; } private function existsID ($table_name, $id) { if (!$this→valid→validID ($id)) return false; $data=$this→select ($table_name, array («id»), «`id`='» .addslashes ($id)." '"); if (count ($data)===0) return false; return true; } public function __destruct () { if ($this→mysqli) $this→mysqli→close (); } } //$db=Database:getDB (); //Print_r ($db→select_where («products» ," id" ," 1″)); //$db=Database:getDB (); //$db→insert_product (array («ordered» ," ordproducts"), array ('product_id','quantity'), array ('1'=>'5','1'=>'11')); //$db→insert_product (array («ordered» ," ordproducts"), array («product_id» ," quantity"), array («1″ =>»)" ," 1″ =>")")); ?>