Создаем корзину на php

Making a shopping cart system with PHP 7.4 and MySQL

This code example is just a demo to show what is possible, and should not be used for actual e-commerce websites. let’s assume that you already have a product page and are displaying these products from a MySQL database, and now you want to make a cart system so a user can purchase more than one item at a time.

Product detail page and add to cart form

This page show and individual item from the products page and will contain a form to add this item to the cart of the website. This form will go to an addtocart.php file that will set the cookie for the cart. The form will look something like the below code. The ID for this form would have been grabbed from a MySQL database.

print(" $id' method='post'>  "); 

Adding to the cart

Now for the addtocart.php file. For this page, you will want to connect your MySQL server to get the items from the database to add to the cart. You will also want to make sure that you tell PHP that you want to start using sessions with the session start function.

$server = "localhost"; $username = "username"; $password = "123456789"; $database = "e-commerce"; $connection = mysqli_connect($server, $username, $password, $database); /* And just in case something goes wrong */ if(!$connection)  die("Connection Failed: " . mysqli_connect_error()); > 

Once you have connected to the server we can add the item to the session. Because of the detail page form, the URL should look something like this example.com/addtocart.php?id=1 which means we can grab the ID of the item from the current URL. Even though the detail page form has the method of post we can still use GET to grab the id because we added it to the action of the form.

$id = $_GET['id']; // Check if the add to cart button was clicked or someone just wants to load this page. This POST method `add` is from the id of the add to cart button on the detail page. if(isset($_POST['add']))  // Check if there is a session for the cart set already, if not then set one. if(!isset($_SESSION['shoppingcart']))  $_SESSION['shoppingcart'] = []; > $quantity = $_POST['quantity']; $item = [ "id" => $id, "quantity" => $quantity ]; // Now add new item to the cart array_push($_SESSION['shoppingcart'], $item); // Once added let's take the user to the cart page header("Location: cart.php"); > else  // If the add to cart button was not clicked then go back to the products page. header("Location: products.php"); > 

Cart page and checkout

This page will display all of the items in the cart, have a checkout section, and remove all of the cart items.

Cart item removal

To remove all of the items from the cart let’s start with the function that will check if the customer would like to do so and add the form that will trigger this action.

if(isset($_GET['reset']))  session_start(); unset($_SESSION['shoppingcart']); session_destroy(); > // Start the session for the rest of the page after destroying it. session_start(); 

For the form that will remove all of the items, it would look like this. This form will simply reload this file and add ?reset=RESET to the URL activating the PHP script above to remove the items.

 action="#" method="GET">  for="reset">Reset cart:  type="submit" value="RESET" name="reset" id="reset" />  

Cart items display

// First check if the session is set is(isset($_SESSION['shoppingcart']) && count($_SESSION['shoppingcart']))  $list = $_SESSION['shoppingcart']; foreach($list as $item)  $id = $item['id']; // The MySQL database query for the items in the cart. $query = "SELECT * FROM products WHERE "; // The connection variable is taken from the top of the page when we connected to the MySQL database $result = mysqli_query($connection, $query); // If only on item in the database has this id then proceed if(mysqli_num_rows($result) == 1)  $row = mysqli_fetch_array($result); $id = $row['id']; $name = $row['name']; $price = $row['price']; $quantity = $item['quantity']; // Now let's print out this item to HTML print( " 
$id'> $name

$$price CAD

Quantity: $quantity

"
); > > > else print("

You don't have any items in your shopping cart.

"
); >

Источник

Корзина для интернет магазина php

Корзина для интернет магазина php

Здравствуйте уважаемые читатели блога LifeExample, сегодня мы продолжим создавать интернет магазин с помощью PHP и реализуем еще несколько его модулей собственными руками. В прошлой части урока мы реализовали такие компоненты как каталог, карточка товара, и ЧПУ, а также сделали задел для системы наполнения каталога. Сегодня мы будем заниматься разработкой маленькой корзины для интернет магазина.

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

Еще хочу заметить, весь код, который я представляю, не претендует на 100% правильность и в ваших силах найти в нем ошибки и оптимизировать, так как вы считаете нужным. Целью данного проекта является не дать вам готовую «болванку» интернет магазина, а научить всех желающих мыслить и самостоятельно разрабатывать PHP программы. Теперь давайте перейдем к процессу разработки нашей системы.

Предлагаю сразу скачать материалы по данному уроку, для наглядности наших дальнейших действий.

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

Маленькая корзина для интернет магазина

Под термином маленькая корзина, я понимаю тот интерфейс представления отложенных для покупки товаров, который, как правило, размещается в шапке сайта.

Маленькая корзина для интернет магазина

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

С первого взгляда, кажется, что нет ничего проще, чем реализовать подобную вещь, с помощью сессии, но существует ряд подводных камней. Например, если поставить задачу: чтобы при возврате пользователя на сайт корзина была наполнена теми же товарами, что и на момент его выхода. В этом случае просто сессией не обойдешься.

Существует несколько способов решения данной задачи:

  1. Хранить содержимое корзины для каждого зарегистрированного пользователя в БД
  2. Хранить содержимое корзины любого пользователя в Cookies браузера

В большинстве случаев второй вариант подходит лучше первого, поэтому мы его и разработаем. Т.е. в итоге у нас корзина должна работать в связке session + cookies

Приступим, отрываем header.php и вставляем в верстку вывод нашей корзины:

Здесь у нас фигурирует вызов содержимого массива $smal_cart , который будет доступен в шаблоне после дальнейших действий.
Для удобного восприятия добавим в style.css стили для корзины:

#header .smalcart {
float : right ;
height : 55px ;
padding : 10px ;
padding-left : 15px ;
margin : 10px ;
border : 1px solid gray ;
border-radius : 10px ;
-moz-border-radius : 10px ;
-webkit-border-radius : 10px ;
background : #E6DEEA ;
}

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

Так как компонент маленькая корзина для интернет магазина не является отдельной страницей, то контроллера для нее мы создавать не будем, внешнее представление у нас уже есть в общем шаблоне, поэтому и отдельного views она тоже иметь не будет, а вот model все-таки придется сделать.

В папке \application\models\ создадим файл cart.php с таким содержанием:

class Application_Models_Cart
{
function addToCart ( $id , $count = 1 )
{
$_SESSION [ ‘cart’ ] [ $id ] = $_SESSION [ ‘cart’ ] [ $id ] + $count ;
return true ;
}

function delFromCart ( $id , $count = 1 ) { }

Данная модель будет обновлять информацию о содержимом корзины. Пока нам достаточно иметь только функцию добавления товаров, но на будущее создадим интерфейсы для функций удаления товаров и отчистки корзины.

Все данные о продуктах из корзины, у нас будут храниться в массиве $_SESSION в виде ассоциативного массива, ключами которого будут ID продуктов, а значением – количество этих продуктов в корзине. Такой минимализм сыграет нам на руку при передаче этой информации в куки.

Теперь у нас есть модель Application_Models_Cart, и логично предположить, что она должна, откуда-то вызываться. Вызываться модель будет из контролера каталога. Почему каталога? Потому, что ссылки ‘В корзину‘ у нас расположены на странице каталога, завязанной на файлах view-controler-model относящихся к компоненту catalog. А еще и потому, что пока переходить на страницу большой корзины мы не будем. При нажатии на данные ссылки, мы должны оставаться на странице каталога, а информация в маленькой корзине должна изменяться.

Кстати о ссылках, ‘В корзину‘ , давайте сразу изменим значение атрибута href в представлении каталога

В результате получим ссылку вида

При клике пользователя на данную ссылку, mvc-система передаст управление в application /controllers/catalog.php. Куда мы сейчас вставим нужный код обработчика данного события:

class Application_Controllers_Catalog extends Lib_BaseController
{
function index ( )
{
if ( $_REQUEST [ ‘in-cart-product-id’ ] )
{
$cart = new Application_Models_Cart ;
$cart -> addToCart ( $_REQUEST [ ‘in-cart-product-id’ ] ) ;
Lib_SmalCart :: getInstance ( ) -> setCartData ( ) ;
header ( ‘Location: /catalog’ ) ;
exit ;
}

$model = new Application_Models_Catalog ;
$Items = $model -> getList ( ) ;
$this -> Items = $Items ;
}
}

Поясню, что тут происходит. Сначала проверяется, был ли щелчок по ссылке и передался ID продукта, который нужно добавить. Если GET параметр in-cart-product-id содержит ID , то управление передается в модель, которая функцией addToCart() , добавляет в корзину нужный продукт, либо только увеличивает его количество. Строка Lib_SmalCart::getInstance()->setCartData() , требует отдельного внимания, поэму я пока ее пропущу, представим, что ее просто нет. На этом этапе у нас есть вся информация о содержимом корзины интернет магазина, и хранится она в сессии. Поэтому мы можем спокойно вернуться на страницу каталога с помощью редиректа:

Так как мы пока не знаем что такое AJAX и без перезагрузки страницы никак не сможем обойтись, мы просто возвращаемся на страницу каталога, для того чтобы увидеть изменения в корзине. (Об основах AJAX можно прочесть тут.)

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

Стоит предупредить, что далее людям, мало разбирающимся в ООП, будет сложно понять код построчно, но в рамках общего смысла не будет ничего сложного. Что же происходит в этой строке:

  1. Lib_SmalCart – интерпретируется нашей системой как создание экземпляра класса SmalCart, расположенного в \lib\smalcart.php
  2. ::— получаем доступ к функциям класса
  3. Вызов любой функции данного класса должен проходить через функцию getInstance(), в задачи которой входит отсеять все возможные повторные попытки создания экземпляра этого класса. Такой метод называется Singleton.
  4. setCartData() – сериализует данные о корзине из сессии, и записывает их в cookie.

Для более четкого представления откройте файл \lib\smalcart.php в нем я постарался подробно описать суть каждой функции, поэтому особо комментировать нечего. Единственное, что нужно сказать это то, что вызов метода getCartData() этого класса, происходит и в файле function.php , который является еще одним отделителем логики от верстки и записывает в переменную $smal_cart всю необходимую для вывода информацию.

Помните первым шагом в этой статье мы в header.php вставили код:

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

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

Всем тем, кому требуются более тщательные объяснения, советую писать вопросы в комментариях, либо мне на e-mail.

Сегодня мы добавили немало кода, который требуется обмозговать и переварить, прежде чем преступать к следующим частям магазина. Надеюсь, что у вас не возникнет трудностей с пониманием данной статьи “Корзина для интернет магазина php”. Если вы еще не подписались на e-mail или rss рассылку, не стесняйтесь — подписывайтесь. Скачать листинг данного урока можно по ссылке:

Читайте также похожие статьи:

Чтобы не пропустить публикацию следующей статьи подписывайтесь на рассылку по E-mail или RSS ленту блога.

Источник

Читайте также:  Размер между строками css
Оцените статью