Запис на сесия в датабаза

noxious

Registered
Здравейте!
Знам, че напоследък питам тъпи въпроси, но дори с търсене в google намирам съвсем други неща от това, което търся или написани много сложно за мен.

Това е моят код, чрез който извеждам добавените продукти в количката чрез сесия.
PHP:
<?php
	if(isset($_SESSION["products"]) && count($_SESSION["products"]) > 0) {
		$total = 0;
		$list_tax = "";
		$cart_box = "<div class=\"table-responsive\"><table class=\"table table-bordered\">
			<thead>
				<tr>
					<th>Код</th>
					<th>Име на продукта</th>
					<th>Цвят</th>
					<th>Размер</th>
					<th>Цена</th>
				</tr>
			</thead>
			<tbody>";

		foreach($_SESSION["products"] as $product) {
			$product_name = $product["name"];
			$product_price = $product["price"];
			$product_discount = $product['discount'];
			$percentage = $product_price*($product_discount/100);
			$product_price = $product_price-$percentage;
			$product_price = number_format($product_price, 2);
			$code = $product["code"];
			$sizes = $product["sizes"];
			$colors = $product["colors"];
			
			$cart_box .=  "
				<tr>
					<td>".$code."</td>
					<td>".$product_name."</td>
					<td>".$colors."</td>
					<td>".$sizes."</td>
					<td>".$product_price." ".$currency."</td>
				</tr>";
			
			$subtotal = $product_price;
			$total = ($total+$subtotal);
		}					
		$grand_total = $total;

		$cart_box .= "
				<tr>
					<td colspan=\"5\" align=\"right\">Общо: ".sprintf("%01.2f", $grand_total)." ".$currency."</td>
				</tr>
			</tbody>
		</table></div>";
		
		echo $cart_box;
?>

<form id="defaultForm" method="post" class="form-horizontal" action="order.php">
	<div class="form-group">
		<label class="col-sm-3 control-label">Име</label>
		<div class="col-sm-4">
			<input type="text" class="form-control" name="firstName" placeholder="Име" />
		</div>
		<div class="col-sm-4">
			<input type="text" class="form-control" name="lastName" placeholder="Фамилия" />
		</div>
	</div>

	<div class="form-group">
		<label class="col-lg-3 control-label">Телефон</label>
		<div class="col-lg-5">
			<input type="text" class="form-control" name="phone" />
		</div>
	</div>
	
	<div class="form-group">
		<label class="col-sm-3 control-label">E-mail адрес</label>
		<div class="col-sm-5">
			<input type="text" class="form-control" name="email" />
		</div>
	</div>

	<div class="form-group">
		<label class="col-sm-3 control-label">Начин на плащане</label>
		<div class="col-sm-6">
			<div class="radio">
				<label><input type="radio" name="payment" value="cash-of-delivery" /> Наложен платеж</label>
			</div>
		</div>
	</div>
	
	<div class="form-group">
		<label class="col-sm-3 control-label">Адрес</label>
		<div class="col-sm-5">
			<textarea type="text" class="form-control" name="address" /></textarea>
		</div>
	</div>

	<div class="form-group">
		<label class="col-lg-3 control-label">Цена за доставка</label>
		<div class="col-lg-5">
			<select class="form-control" name="price">
				<option value="">Избери</option>
				<option value="pld">3 лв. — Пловдив</option>
				<option value="province">3.50 лв. — провинция</option>
			</select>
		</div>
	</div>
	
	<div class="form-group">
		<label class="col-sm-3 control-label" id="captchaOperation"></label>
		<div class="col-sm-2">
			<input type="text" class="form-control" name="captcha" />
		</div>
	</div>

	<div class="form-group">
		<div class="col-sm-6 col-sm-offset-3">
			<div class="checkbox">
				<label>
					<input type="checkbox" name="agree" value="agree" /> Вие се съгласявате с Условията на ползване
				</label>
			</div>
		</div>
	</div>

	<div class="form-group">
		<div class="col-sm-9 col-sm-offset-3">
			<button type="submit" class="btn btn-primary" name="signup" value="ПОРЪЧАЙ">ПОРЪЧАЙ</button>
		</div>
	</div>
</form>
<?php
	} else {
		echo '<h4 align="center" style="padding-top: 10%;">Кошницата е празна.</h4><div style="padding-bottom: 20%;"></div>';
	}
?>

Целта ми е продуктите от сесията да се запишат в базата данни, било то с няколко таблици или с implode(",", ...);, без значение, просто да ги има по един или друг начин.

Като например:
[sql]CREATE TABLE IF NOT EXISTS `orders` (
`id` int(11) NOT NULL,
`firstname` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
`lastname` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
`phone` varchar(13) COLLATE utf8_unicode_ci NOT NULL,
`email` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`payment` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`address` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`price` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`products` text,
`date` varchar(255) COLLATE utf8_unicode_ci NOT NULL
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;[/sql]

в "products" да се записва като: uGbBlW Модерна тениска Черен XL 18.50 лв., данните за другия продукт, данните за 3тия, и т.н.

Благодаря предварително и се извинявам, ако това също е тъп въпрос, но не се сещам как може да стане!
 
Искаш като някой остави количката и после влезе пак да помни какви продукти е вкарал в количката си така ли :)
 
Не, тя си помни всичко от сесията, но при поръчка, освен да запаметява данните на даденото лице (Име, Фамилия, Телефон, E-mail и т.н.) да запаметява и продуктите от сесията за съответното лице.
 
Точно това се казва (cart abandonment) или изоставена количка :) , дори има начин след като остави човек количката с продуктите да му праща на емейла но само ако е регистриран а при не регистрирани си им помни за няколко дена може и за месец :) , знам че има два начина да караш неговият браузер да помни или твоят хост....

нещо такова :? :)

Код:
		if (isset($_COOKIE['Cart']))
		{
			 
			
			$cart = json_decode($_COOKIE['Cart']);	
			
		}
		else
		{
		
			$cart = array();	
			
		}
		
		 
 
		$cart[] = array($productid,$quantity);
		 
		
		$createcart = json_encode($cart);
		
		setcookie('Cart',$createcart,time()+3600);

Това е пример не съм сигурен дали ще ти помогне. http://phppot.com/php/simple-php-shopping-cart/
 
Не знам какво имаш на предвид, но не искам това.

Това е все едно site.com/viewcart.php
> Таблица с продуктите, които си добавил в кошницата
> Форма за поръчване на продуктите, съдържаща: Имена, Телефон, E-mail и т.н. на човека, който ще поръчва
> submit бутон, който трябва да запамети тези данни в една таблица с име orders.

това, което съм намислил за orders
[sql]CREATE TABLE IF NOT EXISTS `orders` (
`id` int(11) NOT NULL,
`firstName` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
`lastName` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
`phone` varchar(13) COLLATE utf8_unicode_ci NOT NULL,
`email` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`payment` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`address` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`price` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`products` text COLLATE utf8_unicode_ci NOT NULL,
`approved` varchar(2) COLLATE utf8_unicode_ci NOT NULL,
`date` varchar(255) COLLATE utf8_unicode_ci NOT NULL
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;[/sql]

в тази колона "products", трябва да се съхраняват продуктите от таблицата по-горе, които са били добавени за дадения човек

Като например "products" ще изглежда нещо подобно:

Код: qwQfpd | Хубава тениска (Цвят: Черен | Размер: L) - 13.58 лв., Код: uGbBlW | Модерна тениска (Цвят: Бял | Размер: XXL) - 18.50 лв.

отделени със запетаи.
 
Вкарване ..
PHP:
<?php
if(isset($_POST['submit_cart']))
{
	 $ime = ..; 
	 $email = ..; 
	 $email = ..; 
    $produkti = json_encode($_SESSION['products']); // tova deto go obhojdash, go pravish v JSON

    mysqli_query($DB_link, "INSERT INTO `orders` (...)(.., '$products', )");
}

и съответно при изкарване ще стане така:

PHP:
$order_q = mysqli_query($DB_link, "SELECT * FROM `orders` WHERE `id`='1'");
$order = mysqli_fetch_assoc($order_q);

$produkti = json_decode($order['products']);

foreach($produkti as $p )
{
	.... 
}

:?:
 
joTunkiq каза:
Вкарване ..
PHP:
<?php
if(isset($_POST['submit_cart']))
{
	 $ime = ..; 
	 $email = ..; 
	 $email = ..; 
    $produkti = json_encode($_SESSION['products']); // tova deto go obhojdash, go pravish v JSON

    mysqli_query($DB_link, "INSERT INTO `orders` (...)(.., '$products', )");
}

и съответно при изкарване ще стане така:

PHP:
$order_q = mysqli_query($DB_link, "SELECT * FROM `orders` WHERE `id`='1'");
$order = mysqli_fetch_assoc($order_q);

$produkti = json_decode($order['products']);

foreach($produkti as $p )
{
	.... 
}

:?:

Това няма да е полезно, ако ползва mysql < 5.7.8.
 
@Fakeheal няма да е полезно, но все пак ще работи предполагам

Иначе се прави като направиш една нова таблица, например products_orders(product_id,quantity,order_id) с PK(product_id, order_id) и после със join извеждаш коя поръчка какво има.

Предимството е, че примерно ако промениш името на даден продукт или нещо по него, ще се отрази навсякъде, докато ако е json ще трябва да направиш отделна заявка и да промениш всичко наново
 
Стана и за изкарването, само трябваше да се оправи енкодинга. За тези като мен:
PHP:
function iconvarray($products){
	foreach($products as $key => $value) {
		if(is_array($value)) {
			$products[$key] = iconvarray($value);
		} else {
			$enc = iconv_get_encoding($value);
			$products[$key] = iconv($enc, 'cp1251', $value);
		}
	}
	return $products;
}

$order_q = mysqli_query($mysqli_conn, "SELECT * FROM `orders` WHERE `id`=".$requestid."");
$order = mysqli_fetch_assoc($order_q);
$products = json_decode($order['products'], true);
$products = iconvarray($products);

foreach($products as $p) {
     $p['name'];
	 ...
}

Благодаря! +1
 

Back
Горе