XAMPP executando, criar diretório no htdocs para armazenar os arquivos. 1º execute o .sql no Phpmyadmin, após isso, utilize os códigos informados abaixo.
Neste caso, simplifiquei os códigos sql e alguns casos PHP, com o objetivo de trazer um código mais limpo e focado. Entretanto, SEMPRE utilize das boas práticas de programação: Nos casos SQL, utilize chaves primárias e estrangeiras, assim como a limitação dos tipos primitivos. A relação entre os dados e a organização do código são pontos fundamentais para a integridade do sistema!
CREATE DATABASE carrinho;
CREATE TABLE item (
id INT AUTO_INCREMENT PRIMARY KEY,
nome TEXT NOT NULL,
preco FLOAT NOT NULL
);
CREATE TABLE pedido (
id INT AUTO_INCREMENT PRIMARY KEY,
dia DATETIME NOT NULL DEFAULT NOW(),
cpf TEXT,
endereco TEXT,
precoTotal FLOAT,
finalizado BOOLEAN NOT NULL DEFAULT 0
);
CREATE TABLE item_pedido (
idPedido INT,
idItem INT,
qtd INT NOT NULL
);
INSERT INTO item(nome,preco) VALUES ("item1",29.90),("item2",90),("item3",10.65);
<?php
$db = new PDO('mysql:host=localhost;dbname=carrinho;charset=utf8','root','');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
<a href="addItem.php">Adicionar item</a>
<?php
require_once 'conect.php';
session_start();
$totPedido = 0;
// Itens do pedido
$r = $db->prepare("SELECT * FROM item_pedido WHERE idPedido=?");
$r->execute(array($_SESSION['id']));
$linhas = $r->fetchAll(PDO::FETCH_ASSOC);
foreach($linhas as $l) {
$r2 = $db->prepare("SELECT * FROM item WHERE id=?");
$r2->execute(array($l['idItem']));
$linhas2 = $r2->fetchAll(PDO::FETCH_ASSOC);
foreach($linhas2 as $l2) {
$totItem = $l['qtd']*$l2['preco'];
$totPedido += $totItem;
echo "
<br>
".$l2['nome']."- ".$l['qtd']."(R$ ".$l2['preco']."un) - R$ ".$totItem."
<a href='edItem.php?item=".$l['idItem']."'>Editar<a>
<a href='remItem.php?item=".$l['idItem']."'>Excluir<a>
";
}
$_SESSION['totPedido'] = $totPedido;
}
// Dados do pedido
$r = $db->prepare("SELECT * FROM pedido WHERE id=?");
$r->execute(array($_SESSION['id']));
$linhas = $r->fetchAll(PDO::FETCH_ASSOC);
foreach($linhas as $l) {
echo "<br><hr>Pedido ".$l['id']."<br>Data: ".$l['dia']."<br>Cpf: ".$l['cpf']."<br>Total: R$ ".$totPedido."<br>Endereço: ".$l['endereco'];
}
?>
<form action="canPedido.php" method="post">
<input type="hidden" name="can" value="1">
<input type="submit" value="Cancelar Pedido">
</form>
<form action="fimPedido.php" method="post">
<input type="hidden" name="fim" value="1">
<input type="submit" value="Confirmar Pedido">
</form>
<?php
require_once 'conect.php';
session_start();
if((!empty($_POST['item'])) and (!empty($_POST['qtd']))) {
$r = $db->prepare("INSERT INTO item_pedido(idItem,idPedido,qtd) VALUES (?,?,?)");
$r->execute(array($_POST['item'],$_SESSION['id'],$_POST['qtd']));
header("location: itensPedido.php");
}
?>
<form action="addItem.php" method="post">
Adicionar item:
<select required name="item">
<?php
$r = $db->query("SELECT * FROM item");
$linhas = $r->fetchAll(PDO::FETCH_ASSOC);
foreach($linhas as $l) {
$r = $db->prepare("SELECT * FROM item_pedido WHERE idItem=? AND idPedido=?");
$r->execute(array($l['id'],$_SESSION['id']));
if($r->rowCount()==0) {echo "<option value=".$l['id'].">".$l['nome']."</option>";}
}
?>
</select>
<input type="number" required name="qtd" min=1 max=99 placeholder="Qtd">
<a href="itensPedido.php">Cancelar</a>
<input type="submit" value="Adicionar">
</form>
<?php
require_once 'conect.php';
session_start();
$r = $db->prepare("DELETE FROM item_pedido WHERE idItem=? AND idPedido=?");
$r->execute(array($_GET['item'],$_SESSION['id']));
header("location: itensPedido.php");
<?php
require_once 'conect.php';
session_start();
if(!empty($_GET['item'])) {
$r = $db->prepare("SELECT qtd FROM item_pedido WHERE idItem=? AND idPedido=?");
$r->execute(array($_GET['item'],$_SESSION['id']));
$linhas = $r->fetchAll(PDO::FETCH_ASSOC);
foreach($linhas as $l) {$qtd = $l['qtd'];}
}
if((!empty($_GET['idNovo'])) and (!empty($_POST['qtd']))) {
$r = $db->prepare("UPDATE item_pedido SET qtd=? WHERE idItem=? AND idPedido=?");
$r->execute(array($_POST['qtd'],$_GET['idNovo'],$_SESSION['id']));
header("location: itensPedido.php");
}
$r = $db->prepare("SELECT nome FROM item WHERE id=?");
$r->execute(array($_GET['item']));
$linhas = $r->fetchAll(PDO::FETCH_ASSOC);
foreach($linhas as $l) {echo "Editar ".$l['nome'];}
?>
<form action="edItem.php?idNovo=<?=$_GET['item']?>" method="post">
<input type="number" name="qtd" placeholder="Qtd" required min=1 max=99 value=">?=$qtd?>">
<a href="itensPedido.php">Cancelar</a>
<input type="submit" value="Atualizar">
</form>
<?php
require_once 'conect.php';
session_start();
$r = $db->prepare("DELETE FROM item_pedido WHERE idPedido=?");
$r->execute(array($_SESSION['id']));
$r = $db->prepare("DELETE FROM pedido WHERE id=?");
$r->execute(array($_SESSION['id']));
unset($_SESSION['id']);
unset($_SESSION['totPedido']);
header("location: index.php");
<?php
require_once 'conect.php';
session_start();
$r = $db->prepare("SELECT count(idItem) FROM item_pedido WHERE idPedido=?");
$r->execute(array($_SESSION['id']));
$linhas = $r->fetchAll(PDO::FETCH_ASSOC);
foreach($linhas as $l) {
if($l['count(idItem)']>0) {
// Pedido com itens adicionados finaliza
$r = $db->prepare("UPDATE pedido SET dia=now(),precoTotal=?,finalizado=1 WHERE id=?");
$r->execute(array($_SESSION['totPedido'],$_SESSION['id']));
unset($_SESSION['id']);
unset($_SESSION['totPedido']);
header("location: index.php");
} else {header("location: itensPedido.php");}
}
<?php
require_once 'conect.php';
session_start();
if((!empty($_POST['cpf'])) and (!empty($_POST['endereco']))) {
$r = $db->prepare("INSERT INTO pedido(cpf,endereco) VALUES (?,?)");
$r->execute(array($_POST['cpf'],$_POST['endereco']));
$r = $db->query("SELECT id,cpf FROM pedido WHERE finalizado IS FALSE");
$linhas = $r->fetchAll(PDO::FETCH_ASSOC);
foreach($linhas as $l) {
$_SESSION['id'] = $l['id'];
$_SESSION['cpf'] = $l['cpfCliente'];
}
header("location: itensPedido.php");
}
?>
<form action="index.php" method="post">
Novo pedido
<input type="text" name="cpf" placeholder="Cpf(xxx.xxx.xxx-xx)" pattern="\d{3}\.\d{3}\.\d{3}-\d{2}">
<input type="text" name="endereco" placeholder="Endereço">
<input type="submit" value="Avançar">
</form>
<h1>Pedidos</h1>
<?php
$r = $db->query("SELECT * FROM pedido");
$linhas = $r->fetchAll(PDO::FETCH_ASSOC);
foreach($linhas as $l) {
echo "<br>--- Pedido ".$l['id']." (".$l['dia'].") ---<br>";
echo "Cpf: ".$l['cpf']." Endereço: ".$l['endereco']." Total: R$ ".$l['precoTotal']."<br>";
$r = $db->prepare("SELECT * FROM item_pedido WHERE idPedido=?");
$r->execute(array($l['id']));
$linhas2 = $r->fetchAll(PDO::FETCH_ASSOC);
foreach($linhas2 as $l2) {
$r = $db->prepare("SELECT * FROM item WHERE id=?");
$r->execute(array($l2['idItem']));
$linhas3 = $r->fetchAll(PDO::FETCH_ASSOC);
foreach($linhas3 as $l3) {
echo "Item ".$l3['nome']."- ".$l2['qtd']."(R$ ".$l3['preco'].") - R$ ".($l3['preco']*$l2['qtd'])."<br>";
}
}
}
?>
Elaborado por Mateus Schwede
ubsocial.github.io