Курсовые - Верстка и программирование сайта натяжных потолков «Белый Мишка»

ПРИЛОЖЕНИЕ А

(обязательное)

Листинг алгоритмов

<?php

session_start();

if( ! isset($_SESSION['cart'])){

    $_SESSION['cart'] = array();

}



include_once '../config/config.php'; //инициализация настроек

include_once '../config/db.php';     // инициализация баз данных

include_once '../library/mainFunctions.php'; //основные фцнкции



//опредеяем, с каким контролером будем работать

$controllerName = isset($_GET['controller']) ? ucfirst($_GET['controller']) : 'Index';



//опредеяем, с какой функцией будем работать

$actionName = isset($_GET['action']) ? $_GET['action'] : 'index';



if(isset($_SESSION['user'])){

    $smarty->assign('arUser', $_SESSION['user']);

}



$smarty->assign('cartCntItems', count($_SESSION['cart']));



loadPage($smarty, $mysqli, $controllerName, $actionName);

 
<?php



//константы для обращения к контроллерам

define('PathPrefix', '../controllers/');

define('PathPostfix', 'Controller.php');



//используемый графический шаблон (по умолчанию - default)

$template = 'default';

$templateAdmin = 'admin';



//определяем пути для обращения к графическим шаблонам (файлы *.tpl)

define('TemplatePrefix', "../views/{$template}/");

define('TemplateAdminPrefix', "../views/{$templateAdmin}/");

define('TemplatePostfix', '.tpl');



//путь к css-шаблонов в веб-пространстве

define('TemplateWebPath', "/templates/{$template}/");

define('TemplateAdminWebPath', "/templates/{$templateAdmin}/");



//инициализация шаблонизатора Smarty

//полный путь к Smarty.class.php

require('../library/Smarty/libs/Smarty.class.php');

$smarty = new Smarty();



$smarty->setTemplateDir(TemplatePrefix);

$smarty->setCompileDir('../tmp/smarty/templates_c');

$smarty->setCacheDir('../tmp/smarty/cache');

$smarty->setConfigDir('../library/Smarty/configs');



$smarty->assign('templateWebPath', TemplateWebPath);

 

<?php

/**

 *

 * Инициализация подключения к БД

 */



$dblocation = "127.0.0.1";

$dbname = "myshop";

$dbuser = "root";

$dbpasswd = "";



$mysqli = new mysqli($dblocation, $dbuser, $dbpasswd, $dbname);

$mysqli->set_charset('utf8');



if ($mysqli->connect_errno){

    echo "Ошибка соединения с MySQL # ". $mysqli->connect_errno . ". Описание:  " . $mysqli->connect_error;

    exit();

}
<?php



/**

 * Контроллер главной страницы

 */



include_once '../models/CategoriesModel.php';

include_once '../models/ProductsModel.php';



/**

 * Формирование главной страницы сайта

 * @param $smarty

 * @var TYPE_NAME $rsCategories

 *

 */

function indexAction($smarty, $mysqli){

    // + PAGINATION BLOCK

    $paginator = array();

    $paginator['perPage'] = 9;

    $paginator['currentPage'] = isset($_GET['page']) ? $_GET['page'] : 1;

    $paginator['offset'] = $paginator['currentPage'] * $paginator['perPage'] - $paginator['perPage'];

    $paginator['link'] = '/index/?page=';

    

    list($rsProducts, $allCount) = getLastProducts($paginator['offset'], $paginator['perPage'], $mysqli);

    $paginator['pageCnt'] = ceil($allCount / $paginator['perPage']);

    

    $smarty->assign('paginator', $paginator);

    // - PAGINATION BLOCK

    

    $rsCategories = getAllMainCatsWithChildren($mysqli);



    $smarty->assign('pageTitle', 'Главная страница');

    $smarty->assign('rsCategories', $rsCategories);

    $smarty->assign('rsProducts', $rsProducts);



    loadTemplate($smarty, 'header');

    loadTemplate($smarty, 'index');

    loadTemplate($smarty, 'footer');

}
<?php

/**

 * Контроллер функций пользователя

 */



include_once '../models/CategoriesModel.php';

include_once '../models/UsersModel.php';

include_once '../models/OrdersModel.php';

include_once '../models/PurchaseModel.php';



function isInArray($array, $key, $default=NULL){

    return isset($array[$key]) ? $array[$key] : $default;        

}



function registerAction($smarty, $mysqli){



    $email = isInArray($_REQUEST, 'email');

    $email = trim($email);

    $pwd1 = isInArray($_REQUEST, 'pwd1');

    $pwd2 = isInArray($_REQUEST, 'pwd2');

    $phone = isInArray($_REQUEST, 'phone');

    $address = isInArray($_REQUEST, 'address');

    $name = isInArray($_REQUEST, 'name');

    $name = trim($name);



    //$resData == null при отсутствии ошибок регистрации

    // или массив с индексами: [message] == код ошибки и [success] != null

    $resData = null;

    $resData = checkRegisterParams($email, $pwd1, $pwd2);



    if(!$resData && checkUserEmail($email, $mysqli)){

        $resData['success'] = null;

        $resData['message'] = "Пользователь с таким email ('{$email}') уже существует";

    }



    if(! $resData ){

        $pwdMd5 = md5($pwd1);

        $userData = registerNewUser($email, $pwdMd5, $name, $phone, $address, $mysqli);



        if ($userData['success'] == 1){

            $resData['message'] = 'Пользователь успешно зарегистрирован';

            $resData['success'] = 1;

            

            $userData = $userData[0];

            

            $resData['userName'] = $userData['name'] ? $userData['name'] : $userData['email'];

            $resData['userEmail'] = $userData['email'];



            $_SESSION['user'] = $userData;

            $_SESSION['user']['displayName'] = $userData['name'] ? $userData['name'] : $userData['email'];

        } else {

            $resData['success'] = null;

            $resData['message'] = 'Ошибка регистрации';}

    }



    echo json_encode($resData);

}



/**

 * Отлогинивание пользователя

 * Возвращаем в ajax 

 */

function logoutAction(){

    $logouted = NULL;

    if(isset($_SESSION['user'])){

        unset($_SESSION['user']);

        unset($_SESSION['cart']);

        $logouted = TRUE;

    }

    redirect();    

}



/**

 * AJAX-авторизация пользователя

 * 

 * @return json Массив данных залогиненного пользователя

 */

function loginAction($smarty, $mysqli){

    $email = trim(isInArray($_REQUEST, 'email'));

    $pwd = trim(isInArray($_REQUEST, 'pwd'));

    

    $userData = loginUser($email, $pwd, $mysqli);

    

    if($userData['success']){

        $userData = $userData[0];

        

        $_SESSION['user'] = $userData;

        $_SESSION['user']['displayName'] = $userData['name'] ? $userData['name'] : $userData['email'];

        

        $resData = $_SESSION['user'];

        $resData['success'] = 1;

        

    } else {

        $resData['success'] = null;

        $resData['message'] = 'Неверные данные авторизации';

    }

    

    echo json_encode($resData);

}



/**

 * Формирование страницы пользователя (кабинет)

 * @param type $smarty

 * @param type $mysqli

 */

function indexAction ($smarty, $mysqli){

    

    if(!isset($_SESSION['user'])){

        redirect();

    }

    

    $rsCategories = getAllMainCatsWithChildren($mysqli);    //все категории с дитями

    $rsUserOrders = getCurUserOrders($smarty, $mysqli);

      

    $smarty->assign('pageTitle', 'Главная страница');

    $smarty->assign('rsCategories', $rsCategories);

    $smarty->assign('rsUserOrders', $rsUserOrders);

    

    loadTemplate($smarty, 'header');

    loadTemplate($smarty, 'user');

    loadTemplate($smarty, 'footer');

}



function updateAction($smarty, $mysqli){

    if(!isset($_SESSION['user'])){

        redirect();

    }

    $resData = array();

    $email = $_SESSION['user']['email'];

    $curPwd = isInArray($_REQUEST, 'curPwd');

    $pwd1 = isInArray($_REQUEST, 'newPwd1');

    $pwd2 = isInArray($_REQUEST, 'newPwd2');

    $phone = isInArray($_REQUEST, 'newPhone');

    $address = isInArray($_REQUEST, 'newAddress');

    $name = isInArray($_REQUEST, 'newName');

    

    $curPwdMD5 = md5($curPwd); //хэш пароля подтверждения

    if( ! $curPwd || $_SESSION['user']['pwd'] != $curPwdMD5){

        $resData['success'] = 0;

        $resData['message'] = "Текущий пароль не верен!";

    } else{

        $resUpdate = updateUserData($email, $name, $phone, $address, $pwd1, $pwd2, $curPwdMD5, $mysqli);



        if($resUpdate){

            $resData['success'] = 1;

            $resData['message'] = 'Данные успешно сохранены';

            

            $_SESSION['user']['name'] = $name;

            $_SESSION['user']['phone'] = $phone;

            $_SESSION['user']['address'] = $address;

            $_SESSION['user']['pwd'] = $pwd1 ? md5($pwd1) : $_SESSION['user']['pwd'];

            

            $resData['userName'] = $_SESSION['user']['dislayName'] = $name ? $name : $email;

        } else {

            $resData['success'] = 0;

            $resData['message'] = "Ошибка. Проверьте вводимые данные!";

        }

    }

    echo json_encode($resData);

}
<?php

/**

 * Модель для таблицв пользователей (users)

 */



/**

 * Регистрация пользователя в базе

 * @param $email

 * @param $pwdMD5

 * @param $name

 * @param $phone

 * @param $address

 * @param $mysqli

 * @return array|bool массив с [0]=данными пользователя, [success]=флагом успеха

 */

function registerNewUser($email, $pwdMD5, $name, $phone, $address, $mysqli){

    

    $email = htmlspecialchars($mysqli->real_escape_string($email));

    $pwdMD5 = htmlspecialchars($mysqli->real_escape_string($pwdMD5));

    $name = htmlspecialchars($mysqli->real_escape_string($name));

    $phone = htmlspecialchars($mysqli->real_escape_string($phone));

    $address = htmlspecialchars($mysqli->real_escape_string($address));



    $sql = "INSERT INTO `users` (`email`, `pwd`, `name`, `phone`, `address`)

            VALUES ('$email', '$pwdMD5', '$name', '$phone', '$address')";

    $rs = $mysqli->query($sql);



    if($rs){

        $sql = "SELECT * FROM `users`

                WHERE (`email` = '{$email}' and `pwd` = '{$pwdMD5}')

                LIMIT 1";

        $rs = $mysqli->query($sql);

        $rs = createSmartyRsArray($rs, $mysqli);

        

        if(isset($rs[0])){

            $rs['success'] = 1;

        } else {$rs['success'] = 0;}

        

    }else {$rs['success'] = 0;}



    return $rs;

}



/**

 * Проверяем регистрационные данные - наличие обоих паролей и их совпадение, наличие email

 * @param $email

 * @param $pwd1

 * @param $pwd2

 * @return array Описание ошибки

 */

function checkRegisterParams($email, $pwd1, $pwd2){



    $res = array();



    if(! $email) {

        $res['success'] = null;

        $res['message'] = 'Введите e-mail';

    }

    if(! $pwd1){

        $res['success'] = null;

        $res['message'] = ' Введите пароль';

    }

    if(! $pwd2){

        $res['success'] = null;

        $res['message'] = ' Введите повтор пароля';

    }

    if($pwd1 != $pwd2){

        $res['success'] = null;

        $res['message'] = ' Пароли не совпадают';

    }



    return $res;

}



/**

 * Проверка почты до регистрации, на наличие в базе

 * @param $email

 * @param $mysqli

 * @return array|bool возвращаем id записи с существующим email или null

 */

function checkUserEmail($email, $mysqli)

{

    $email = $mysqli->real_escape_string($email);

    $sql = "SELECT id 

            FROM `users`

            WHERE `email` = '{$email}'";



    $rs = $mysqli->query($sql);

    $rs = createSmartyRsArray($rs, $mysqli);



    return $rs; 

} 



/**

 * Забираем данные пользователя из базы

 * @param type $email

 * @param type $pwd

 * @param type $mysqli

 * @return array данные пользователя и флаг об успешности выполнения запроса

 */

function loginUser($email, $pwd, $mysqli){

    $email = htmlspecialchars($mysqli->real_escape_string($email));

    $pwd = md5($pwd);

    

    $sql = "SELECT * FROM `users`

            WHERE (`email` = '{$email}' and `pwd` = '{$pwd}')

            LIMIT 1";

            

    $rs = $mysqli->query($sql);

    

    $rs = createSmartyRsArray($rs, $mysqli);

    if(isset($rs[0])){

            $rs['success'] = 1;

    } else {

        $rs['success'] = NULL;

    }

    return $rs;

}



/**

 * 

 * @param type $email

 * @param type $name

 * @param type $phone

 * @param type $address

 * @param type $pwd1

 * @param type $pwd2

 * @param type $curPwd

 * @param type $mysqli

 * @return type

 */

function updateUserData($email, $name, $phone, $address, $pwd1, $pwd2, $curPwd, $mysqli){

    //отсеили ещё раз нулевой email и неравные пароли

    if( ! $email || $pwd1 != $pwd2 ){

        return NULL;

    }

    $sql = "UPDATE `users` SET 

           `name`='{$name}', `phone`='{$phone}', `address`='{$address}'";



    if($pwd1){

        $pwdMD5 = md5($pwd1);

        $sql.=", `pwd`='{$pwdMD5}'";

    }

    

    $sql.= "WHERE `email`='{$email}' AND `pwd`='{$curPwd}'

            LIMIT 1";

    $rs = $mysqli->query($sql);

    

    return $rs;

}



function getCurUserOrders($smarty, $mysqli){

    $userId = isset($_SESSION['user']['id']) ? $_SESSION['user']['id'] : 0;

    $rs = getOrdersWithProductsByUser($smarty, $userId, $mysqli);

    return $rs;
{*Страница кабинета авторизованного пользователя*}

<h1>регистрационные данные</h1>



<div id="userDataBox">

<table border="0">

    <tr>

        <td>Логин (e-mail)</td>

        <td>{$arUser['email']}</td>

    </tr>

    <tr>

        <td>Имя</td>

        <td><input type="text" id="newName" name="newName" value="{$arUser['name']}"/></td>

    </tr>

    <tr>

        <td>Тел.</td>

        <td><input type="text" id="newPhone" name="newPhone" value="{$arUser['phone']}"/></td>

    </tr>

    <tr>

        <td>Адрес</td>

        <td><textarea id="newAddress" name="newAddress">{$arUser['address']}</textarea></td>

    </tr>

    <tr>

        <td>Новый пароль</td>

        <td><input type="password" id="newPwd1" name="newPwd1" value=""/></td>

    </tr>

     <tr>

        <td>Повтор пароля</td>

        <td><input type="password" id="newPwd2" name="newPwd2" value=""/></td>

    </tr>

    <tr>

        <td>Старый пароль для подтверждения изменений</td>

        <td><input type="password" id="curPwd" name="curPwd" value=""/></td>

    </tr>

    <tr>

        <td>&nbsp;</td>

        <td><input type="button" onclick="updateUserData();" value="Сохранить изменения"/></td>

    </tr>

</table>    

    <h2>Orders:</h2>

    {if ! $rsUserOrders}

        NO ORDERS!

        {else}

            <table border = "1">

                <tr>

                    <th>#</th>

                    <th>Action</th>

                    <th>Order ID</th>

                    <th>Status</th>

                    <th>Order Date</th>

                    <th>Payment Transaction</th>

                    <th>Info</th>

                </tr>

                {foreach $rsUserOrders as $item name=orders}

                    <tr>

                        <td>{$smarty.foreach.orders.iteration}</td>

                        <td><a href="#" onclick="showProducts({$item['id']}); return false;">Show products in order</a></td>

                        <td>{$item['id']}</td>

                        <td>{if {$item['status']} == 1} Payed

                                {else} Not payed {/if}</td>

                        <td>{$item['date_created']}</td>

                        <td>{$item['date_payment']}&nbsp;</td>

                        <td>{$item['comment']}</td>

                    </tr>

                    <tr class="hideme" id="purchasesForOrderId_{$item['id']}">

                        <td colspan = "7">

                            {if $item['children']}

                                <table border="1" cellpadding="1" cellspacing="1" width="100%">

                                    <tr>

                                        <th>#</th>

                                        <th>ID</th>

                                        <th>Name</th>

                                        <th>Price</th>

                                        <th>Amount</th>

                                    </tr>

                                    {foreach $item['children'] as $itemChild name=products}

                                        <tr>

                                            <td>{$smarty.foreach.products.iteration}</td>

                                            <td>{$itemChild['product_id']}</td>

                                            <td><a href="/product/{$itemChild['product_id']}/">{$itemChild['name']}</a></td>

                                            <td>{$itemChild['price']}</td>

                                            <td>{$itemChild['amount']}</td>

                                        </tr>

                                    {/foreach}

                                </table>

                            {/if}

                        </td>

                    </tr>

                {/foreach}

            </table>

    {/if}

</div>
{*Левый столбец*}

<div id="leftColumn">

    <div id="leftMenu">

        <div class="menuCaption">Меню:</div>

        {foreach $rsCategories as $item}

            <a href="/category/{$item['id']}/">{$item['name']}</a><br />



            {if isset($item['children'])}

                {foreach $item['children'] as $child}

                    --<a href="/category/{$child['id']}/">{$child['name']}</a><br />

                {/foreach}

            {/if}

        {/foreach}

    </div>

        

    {if isset($arUser)}

        <div id="userBox">

        <a href="/user/" id="userLink">{$arUser['displayName']}</a><br />

        <a href="/user/logout/" onclick="logout();">Выход</a>

    </div>

        

    {else}

    <div id="userBox" class="hideme">

        <a href="#" id="userLink"></a><br />

        <a href="#" onclick="logout();">Выход</a>

    </div>

    

        {if ! isset($hideLoginBox)}

            <div id="loginBox">

                <div class="menuCaption">Авторизация </div>

                <input type="text" id="loginEmail" name="loginEmail" value=""><br />

                <input type="password" id="loginPwd" name="loginPwd" value=""><br />

                <input type="button" onclick="login();" value="Войти"><br />

            </div>



            <div id="registerBox">

                <div class="menuCaption" onclick="showRegisterBox();" value=""><a href="#">Регистрация</a></div>

                <div id="registerBoxHidden" class="hideme">

                    e-mail: <br />

                    <input type="text" id="email" name="email" value=""/><br />

                    пароль: <br />

                    <input type="password" id="pwd1" name="pwd1" value=""/><br />

                    повторить пароль: <br />

                    <input type="password" id="pwd2" name="pwd2" value=""/><br />

                    <input type="button" onclick="registerNewUser();" value="Зарегистрироваться"/><br />

                </div>

            </div>

        {/if}

    {/if}

    

    <div class="menuCaption">Корзина</div>

    <a href="/cart/" title="Перейти в корзину">В корзине</a>

    <span id="cartCntItems">

        {if $cartCntItems > 0}

            {$cartCntItems}

            {else} Пусто

        {/if}

    </span>

</div>

 

Количество комментариев: 0

Для того, чтобы оставить коментарий необходимо зарегистрироваться
Дата Выполнено, %
2020-05-28 17:34:28 10
2020-05-28 14:34:25 100
Открытая Для скрытия необходимо уменьшить величину статуса выполнения.