Добавлен: 01.04.2023
Просмотров: 1003
Скачиваний: 27
Рисунок 2.11 – Пример найденных книг по категории
Рисунок 2.12 – Навигация по жанрам
3 РАЗРАБОТКА ПРОГРАММНОЙ ЧАСТИ
3.1 Статические страницы
Статических страниц 2:
- Регистрация;
- Главная страница.
Так же на каждой странице есть шапка и подвал, в которых находятся ссылки на все страницы сайта.
Логотип содержит изображение с названием сайта - «Hermes». Панель навигации в свою очередь содержит табы с ссылками на страницы. Блок навигации, логотип и футер сохраняется, изменяется только блок контента.
Так выглядит партиал для шапки сайта, которая присутствует на всех страницах:
Листинг 3.1 – фрагмент из header.php
<div id="templatemo_menu">
<ul>
<li><a href="<?=$home_path;?>" class="current">Главная</a></li>
<?php
if($USER['ID']){?>
<li><a href="<?=$home_path;?>/basket">Корзина</a></li>
<li><a href="<?=$home_path;?>/logout">Выйти</a></li>
<?php
}else{?>
<li><a href="<?=$home_path;?>/registration">Регистрация</a></li>
<?php
}?>
</ul>
</div>
<div id="templatemo_header">
<div id="site_title">
<h1><a href="#"><img src="<?=$home_path;?>/images/ logo.png" alt="Site Title" />
<span>books store</span>
</a></h1>
</div>
<h2>Поиск</h2>
<div class="sidebar_section_content">
<form action="<?php echo $home_path.'/search'?>" method="get">
<input type="text" value="Enter a keyword..." name="q" size="25" id="searchfield" title="searchfield" onfocus="clearText(this)" onblur="clearText(this)" />
<input type="submit" name="Search" value="Поиск" alt="Search" id="searchbutton" title="Search" /></form>
<div class="cleaner"></div>
</div>
<h2>Жанры:</h2>
<div class="sidebar_section_content">
<ul class="categories_list">
<?php
foreach($categories_list as $cat){
?>
<li><a href="<?php echo $home_path.'/'.$cat['slag']?>"><?php echo $cat['name']?></a></li>
<?php
}?></ul></div></div></div>
3.2 Связь с БД
Модель используется для доступа и манипулирования данными. В большинстве случаев модель — это то, что используется для доступа к хранилищу данных (например, базе данных). Модель предоставляет интерфейс для поиска данных, их создания, модификации и удаления из хранилища.
Крайне важной чертой модели является то, что технически она не имеет никаких знаний ни о том, что происходит с данными в контроллере и представлении. Модель никогда не должна делать или ожидать каких-либо запросов в/из других компонентов паттерна.
Тем не менее, всегда помните, что модель — это не просто шлюз доступа к базе данных или другой системе, который только и занимается что передачей данных туда-сюда. Модель — это нечто вроде пропускного пункта к данным. Модель в большинстве случаев является самой сложной частью системы, отчасти из-за того, что сама по себе модель есть связующее звено для всех остальных частей [6].
Листинг 3.2 – bd.php
<?php
$db = mysql_connect ("localhost","root","") or die("Could not connect: " . mysql_error());
mysql_select_db ("mydb",$db)or die ('Can\'t use foo : ' . mysql_error());
mysql_set_charset('utf8',$db);
function query($sql)
{
$res=array();
$result=mysql_query($sql) or die ('Query error: ' . mysql_error());
if(is_resource($result)){
while ($row = mysql_fetch_assoc($result))
$res[]=$row;
mysql_free_result($result);
return $res;
}elseif($result==1){
return true;
}
}
3.3 Поиск
Для удобства, был разработано несколько способов навигации: поиск по словам и поиск по жанрам. Листинг 3.3 демонстрирует отображение результатов или их отсутствие на сайте.
Листинг 3.3– фрагмент из srch.php
<h2>Поиск "<?php echo $query?>"</h2>
<?php
if(isset($error))
echo "<p>$error</p>";
?>
</div>
<div class="content_section <?php echo $page_type;?>">
<?php
if(isset($books[0])){
foreach($books as $book){
?>
<div class="product_box">
<h2><a href="<?php echo $home_path.'/'.$book["cat_slag"].'/'.$book["slag"]?>"><?php echo $book["name"] ;?></a></h2></div>
<?php
}
}else{
?>
<div class="product_box">
<div>Поиск не дал результатов</div>
</div>
Поиск по словам:
Листинг 3.4 – функция поиска
case 'search':
$query=stripslashes($_GET['q']);
$query=htmlspecialchars($query);
$query=mysql_real_escape_string($query);
$SQL="SELECT `books`.`id`, `books`.`name`,`books`.`slag`,`books`.`author`, `books`.`short_description`,`books`.`image`,`books`.`cost`, `category`.`slag` AS 'cat_slag', `category`.`name` AS 'cat_name' FROM `books`, `category` WHERE `books`.`cat_id`=`category`.`id` AND ((`books`.`name` Like '%".$query."%') or (`books`.`author` Like '%".$query."%') or (`books`.`short_description` Like '%".$query."%'))";
$books=query($SQL);
include_once "srch.php";
break;
}
Поиск по категориям:
Листинг 3.5 – фрагмент из cat.php
<h2>Категория: <?php echo $books[0]['cat_name']?></h2>
<?php
$first=true;
foreach($books as $book){
$class="";
$cleaner="";
if($first)
$class="margin_r40";
else
$cleaner="<div class=\"cleaner\"></div>";
?>
<div class="product_box <?php echo $class?>">
<div class="image_wrapper"><a href="#"><img src="<?php echo $book["image"] ;?>" alt="<?php echo $book["name"] ;?>" /></a></div>
<h3> <?php echo $book["name"] ;?></h3>
<p><?php echo $book["short_description"] ;?></p>
<p class="price">Цена: <?php echo $book["cost"] ;?>грн</p>
<a href="<?php echo $home_path.'/'.$book["cat_slag"].'/'.$book["slag"]?>">Детально</a> | <a href="<?php echo $home_path.'/basket/add?id='.$book["id"]?>">Купить</a>
</div>
<?php echo $cleaner?>
<?php
$first=!$first;
}
Листинг 3.6 – определение категории
case 'cat':
$category_slag=mysql_real_escape_string($query[1]);
$SQL="SELECT `books`.`id`, `books`.`name`,`books`.`slag`,`books`.`author`, `books`.`short_description`,`books`.`image`,`books`.`cost`, `category`.`slag` AS 'cat_slag', `category`.`name` AS 'cat_name' FROM `books`, `category` WHERE `books`.`cat_id`=`category`.`id` AND `category`.`slag`='$category_slag'";
$books=query($SQL);
include_once "cat.php";
break;
Данный листинг показывает выборку жанра книги по его id. Функция находится в index.php.
3.4 Страница регистрации
Принцип построения простой регистрации на сайте [1]:
Рисунок 3.1 – Схема работы страницы регистрации
При регистрации, вводятся пароль и его подтверждение, в то время как в базу данных сохраняется шифр пароля:
Листинг 3.7 – reg.php
<?php
include_once "header.php";
?>
<div class="content_section <?php echo $page_type;?>">
<form action="<?php echo $home_path.'/registration'?>" method="post">
<?php
if(isset($error))
echo "<p>$error</p>";
?>
<p>Email: <input id="login" name="login" placeholder="Email" type="text"/></p>
<p>Пароль: <input id="pass" name="password" placeholder="password" type="password"/></p>
<input type="submit" name="submit" value="Регистрация"/>
<input type="submit" name="submit" value="Вход"/>
</form>
<div class="cleaner"></div>
</div>
<?php
include_once "footer.php";
?>
Листинг 3.8 – Функция регистрации. Index.php
case 'registration':
if(isset($_POST['submit'])){
$data=array_map("stripslashes", $_POST);
$data=array_map("htmlspecialchars", $data);
$data=array_map("mysql_real_escape_string", $data);
extract($data);
$users=query("SELECT * FROM `users` WHERE `login`='$login' LIMIT 1");
if(isset($users[0]['login'])){$error="Пользователь с таким логином уже существует.";
include_once "reg.php";
break;
}else{
if(ifset($login)&&ifset($password))
query("INSERT INTO `mydb`.`users` (`id`, `login`, `pass`) VALUES (NULL, '$login', MD5('$password'))");
login($_POST['login'],$_POST['password']);
header("Location: ".$home_path);exit;}}
include_once "reg.php";
break;
case 'login':
if(isset($_POST['submit'])){
login($_POST['login'],md5($_POST['password']));
header("Location: ".$home_path);
exit;}
include_once "reg.php";
break;
case 'logout':
setcookie("login", null, -1,'/');
setcookie("password", null, -1,'/');
header("Location: ".$home_path);
exit;
break;
3.5 Страница авторизации
Листинг 3.9 – user.php
<?php
$USER['ID']=false;
if(ifset($_COOKIE['login'])&&ifset($_COOKIE['password'])){
$USER['ID']=login($_COOKIE['login'],$_COOKIE['password']);
if($USER['ID'])
$USER['login']=$_COOKIE['login'];
}
Данный код при попытке открыть страницу соответствующего сайта, проверяет Cookie, и в случае их наличия пытается осуществить авторизацию.
В случае если ничего не найдено выполняется следующая часть:
Листинг 3.10 – index.php
else{
if(ifset($login)&&ifset($password))
query("INSERT INTO `mydb`.`users` (`id`, `login`, `pass`) VALUES (NULL, '$login', MD5('$password'))");
login($_POST['login'],$_POST['password']);
header("Location: ".$home_path);
exit;
}
Листинг 3.11 – функция авторизации
function login($login,$password){
$id=false;
$login=stripslashes($login);
$login=htmlspecialchars($login);
$login=mysql_real_escape_string($login);
$password=stripslashes($password);
$password=htmlspecialchars($password);
$password=mysql_real_escape_string($password);
$users=query("SELECT id FROM `users` WHERE `login`='$login' and `pass`='$password' LIMIT 1");
if(ifset($users[0]['id'])){
$id=$users[0]['id'];
//$_SESSION['login']=$login;
//$_SESSION['password']=md5($password);
setcookie("login", $login, time()+60*60*24*30,'/');
setcookie("password", $password, time()+60*60*24*30,'/');
}
return $id;
}
3.6 Корзина
Важной составляющей интернет-магазина является корзина. С её помощью пользователь просматривает покупки, их цену, реализует покупку. Также предоставлена возможность очистить корзину и вывод общей стоимости выбранных товаров.
Листинг 3.12 – baskets.php
<h2>Корзина</h2>
<?php
if(isset($error))
echo "<p>$error</p>";
?>
<?php
$total=0;
if(isset($books[0])){
foreach($books as $book){
$total+=$book["cost"];
?>
<div class="product_box">
<h2><?php echo $book["name"] ;?></h2>
<p class="price">Цена: <?php echo $book["cost"] ;?>грн</p>
</div>
<?php
}
?>
<div class="product_box">
<p class="price">Общая цена: <?php echo $total;?>грн</p> </div>
<div class="product_box">
<p class="price"><a href="<?php echo $home_path.'/basket/clear'?>">Очистить корзину</a> | <a href="<?php echo $home_path.'/basket/checkout'?>">Оформить заказ</a></p> </div>
<?php
}else{
?>
<div class="product_box">
<div>Корзина пуста</div></div>
<?php
}
?>
<div class="cleaner"></div>
</div>
В разработанном сайте, осуществление покупки возможно только для зарегистрированных посетителей. Следующий листинги продемонстрируют как происходит добавление книги в корзину, её очищение, вычисление общей стоимости.
Листинг 3.13 – Добавление продукта в корзину
case 'add_to_basket':
if(!$USER['ID']){
$error="Необходима регистрация.";
include_once "reg.php";
break;
}
$book_id=stripslashes($_GET['id']);
$book_id=htmlspecialchars($book_id);
$book_id=mysql_real_escape_string($book_id);
$user_id=$USER['ID'];
query("INSERT INTO `mydb`.`basket` (`book_id`, `user_id`) VALUES ('$book_id', '$user_id')");
header("Location: ".$home_path.'/basket');
break;
Листинг 3.14 – Очищение корзины
case 'clear_basket':
if(!$USER['ID']){
$error="Необходима регистрация.";
include_once "reg.php";
break;
}
$user=$USER['ID'];
query("DELETE FROM `mydb`.`basket` WHERE `basket`.`user_id` = '$user'");
header("Location: ".$home_path.'/basket');
break;
Листинг 3.15 – Чек
case 'checkout':
if(!$USER['ID']){
$error="Необходима регистрация.";
include_once "reg.php";
break;
}
$user=$USER['ID'];
//INSERT INTO `mydb`.`checkout` (`book_id`, `user_id`, `date`) VALUES ('1', '2', '2016-06-08 00:00:00'), ('2', '2', '2016-06-08 00:00:00');
$SQL="SELECT `book_id` FROM `basket` WHERE `basket`.`user_id`='$user'";
$basket=query($SQL);
$date=date("Y-m-d H:i:s");
$SQL="INSERT INTO `mydb`.`checkout` (`book_id`, `user_id`, `date`) VALUES ";
foreach($basket as $item){
$SQL.=" ('".$item['book_id']."', '$user', '$date'),";
}
$SQL=substr($SQL, 0, -1);
query("DELETE FROM `mydb`.`basket` WHERE `basket`.`user_id` = '$user'");
query($SQL);
include_once "check.php";
break;
После подтверждения покупки в корзине, пользователь получает сообщение, в котором указано что заявка подана и будет рассмотрена.
Заключение
Практически все организации за редким исключением имеют сегодня собственные сайты в Интернете. А объяснить этот очень просто: сайт визитка на просторах глобальной паутины имеет множество преимуществ перед другими альтернативными средствами рекламы. Большинство организаций давно открыли для себя Интернет в качестве средства рекламы. Ничего удивительного: к глобальной паутине ежедневно приобщаются новые и новые пользователи, которые вполне при данном стечении обстоятельств могут стать потенциальными потребителями товара. В целом Интернет - рекламное средство, за которым будущее.
Сайт в Интернете - это большое число потенциальных покупателей представленных Вами услуг или товаров. Также сайт- структура динамичная. Это значит, что не сложно его видоизменять в случае такой необходимости, а она появляется регулярно. Любая компания стремится к развитию, расширению ассортимента выпускаемой продукции и увеличению штата работников, то есть информация о ней постоянно претерпевает изменения, что должно тотчас же отображаться на сайте в Интернете.
В ходе выполнения курсовой работы, были закреплены теоретические знания, полученные при изучении интернет технологий на практике, при разработке собственного сайта, предназначенного для продажи книг.
Научилась создавать динамические страницы, работать с БД, создавать пользовательский интерфейс.
Были выполнены построенные задачи, а также осуществлены все необходимые функции для работы примитивного сайта.
ПЕРЕЧЕНЬ ССЫЛОК
- Вайнман Л., Динамический HTML: руководство разработчика Web-сайтов;
- Дригалкин В.В. HTML в примерах. Как создать свой Web-сайт. Самоучитель. Диалектика, 2003.
- Електронний посібник з WEB-технологій: режим доступу: http://www.intuit.ru/studies/courses/485/341/info
- Електронний посібник з HTML та CSS: режим доступу: http://www.intuit.ru/studies/courses/1005/276/info
- Интернет-университет информационных технологий www.intuit.ru
- Савельева Н.В. Основы программирования на PHP. Интернет-университет информационных технологий - ИНТУИТ.ру, 2005.
- Петюшкин А.В. HTML. Экспресс-курс.- СПб: БХВ-Петербург, 2003.- 256с.
- Храмцов П.Б., Брик С.А., Русак А.М., Сурин А.И. Основы web-технологий. Интернет-университет информационных технологий - ИНТУИТ.ру, 2003.