Ir para conteúdo
Fórum Script Brasil
  • 0

MVC PHP: projeto produtos


Frank K Hosaka

Pergunta

Usei o meu programa ScriptOut.php para publicar todos os arquivos e os respectivos conteúdos da pasta astudy aqui. Agora, sugiro você copiar todo o texto e salvar em script.txt no diretório C:/wamp64/www, e em seguida executar o programa ScriptIn.php que publiquei em outro tópico, ele vai montar o diretório astudy e todos os arquivos do projeto no seu computador.


arquivo /astudy/Controller/orçamentoController.php
<?php
session_start();
require $_SERVER['DOCUMENT_ROOT']."/astudy/Model/produto.php";
require $_SERVER['DOCUMENT_ROOT']."/astudy/Model/funções.php";
class orçamentoController {
private $produto;
public function __construct(){$this->produto=new produto();}
public function produto(){
    $produtos=$this->produto->listarTudo();
    $irPara="Controller/orçamentoController";
    require $_SERVER['DOCUMENT_ROOT']."/astudy/View/viewFiltro.php";exit;}
public function inicio(){
    $soma=0;
    $itens=[];
    $_SESSION['itens']=[];
    require $_SERVER['DOCUMENT_ROOT']."/astudy/View/viewOrçamento.php";exit;}
public function acrescentaItem($prod){
    $soma=0;
    $_SESSION['itens'][]=$prod;
    $itens=$_SESSION['itens'];
    foreach($itens as $item){$soma+=$item[1]*$item[3];}
    require $_SERVER['DOCUMENT_ROOT']."/astudy/View/viewOrçamento.php";exit;}
public function excluir($key){
    $soma=0;
    array_splice($_SESSION['itens'],$key,1);
    $itens=$_SESSION['itens'];
    foreach($itens as $item){$soma+=$item[1]*$item[3];}
    require $_SERVER['DOCUMENT_ROOT']."/astudy/View/viewOrçamento.php";exit;}
public function alterar($alterar,$chave){
    $soma=0;
    $_SESSION['itens'][$chave][1]=$alterar;
    $_SESSION['itens'][$chave][4]=$alterar*$_SESSION['itens'][$chave][3];
    $itens=$_SESSION['itens'];
    foreach($itens as $item){$soma+=$item[1]*$item[3];}
    require $_SERVER['DOCUMENT_ROOT']."/astudy/View/viewOrçamento.php";exit;}}
$get=$_GET;
$class=new orçamentoController();
if(key($get)=='produto'){$class->produto();}
if(key($get)=='inicio' || key($get)=='apagar'){$class->inicio();}
if(key($get)=='id'){
    $prod=$get['prod'];
    $un=$get['un'];
    $preço=$get['preço'];
    $total=$get['preço'];
    $class->acrescentaItem([$prod,1,$un,$preço,$total]);}
if(key($get)=='excluir'){$class->excluir($get['excluir']);}
if(key($get)=='alterar'){$class->alterar($get['alterar'],$get['chave']);}

arquivo /astudy/Controller/produtoController.php
<?php
require $_SERVER['DOCUMENT_ROOT']."/astudy/Model/produto.php";
class produtoController {
private $produto;
public function __construct(){
    $this->produto=new produto();}
public function criarTabela(){$this->produto->criarTabela();}
public function listar(){
    $produtos=$this->produto->listar();
    $contagem=count($produtos);
    $colunas=4;
    $numLinhas=intval($contagem/$colunas);
    if($contagem/$colunas>$numLinhas){$numLinhas++;}
    require $_SERVER['DOCUMENT_ROOT'].'/astudy/View/viewProduto.php';exit;}
public function filtrar($filtro){
    $produtos=$this->produto->filtrar($filtro);
    $irPara="View/viewAtualizar";
    require $_SERVER['DOCUMENT_ROOT'].'/astudy/View/viewFiltro.php';exit;}
public function atualizar($dados){
    $irPara="View/viewAtualizar";
    $produtos=$this->produto->atualizar($dados);
    require $_SERVER['DOCUMENT_ROOT'].'/astudy/View/viewFiltro.php';exit;}
public function incluir($dados){
    $produtos=$this->produto->incluir($dados);
    require $_SERVER['DOCUMENT_ROOT'].'/astudy/View/viewFiltro.php';exit;}
public function excluir($dados){
    $produtos=$this->produto->excluir($dados);}}
if(isset($_GET)){
    $get=$_GET;
    $classe=new produtoController();
    if(key($get)=="criarProdutos"){$classe->criarTabela();}
    if(key($get)=="verProdutos"){$classe->listar();}
    if(key($get)=="item"){$classe->filtrar($get['item']);}
    if(key($get)=="atualizar"){$classe->atualizar($get['atualizar']);}
    if(key($get)=="excluir"){$classe->excluir($get['excluir']);}
    if(key($get)=="incluir"){$classe->incluir($get['incluir']);}}

arquivo /astudy/Model/conexao.php
<?php
class conexao {
    private static $pdo;
    public function __construct(){}
    public static function getInstance(){
        if(!self::$pdo){
            self::$pdo=new PDO("mysql:host=localhost;dbname=laravel","root","");}
        return self::$pdo;}}

arquivo /astudy/Model/funções.php
<?php
function nf($número){return number_format($número,2,',','.');}

arquivo /astudy/Model/produto.php
<?php
require $_SERVER['DOCUMENT_ROOT']."/astudy/Model/conexao.php";
class produto {
    private $pdo;
    public function __construct(){
        $this->pdo=conexao::getInstance();}
    public function criarTabela(){
        $tabela='produto';
        $stmt=$this->pdo->prepare("SELECT COUNT(*) AS total FROM 
            information_schema.tables WHERE table_name = ?");
        $stmt->execute([$tabela]);
        $total=$stmt->fetchColumn();
        if($total>0){$this->pdo->exec("DROP TABLE $tabela");}
        $sql="CREATE TABLE $tabela (id INT NOT NULL AUTO_INCREMENT,
            prod VARCHAR(255) NOT NULL, preço FLOAT NOT NULL,
            un VARCHAR(2) NOT NULL, PRIMARY KEY (id))";
        $this->pdo->exec($sql);
        $sql="INSERT INTO produto (prod,preço,un) values (?,?,?)";
        $dados=[["Maçã Red",20,"kg"],["Macarrão Tipo Ninho",5.5,"un"],
        ["Pera Portuguesa",25,"kg"],["Picanha Fresca",50,"kg"],
        ["Pão de Forma",7,"un"],["Pão Francês",11,"kg"],["Banana Nanica",8,"kg"],
        ["Laranja Lima",5,"kg"],["Refrigerante 2L",8.50,"un"]];
        foreach($dados as $dado){
            $stmt=$this->pdo->prepare($sql);
            $stmt->execute($dado);}
        require $_SERVER['DOCUMENT_ROOT']."/astudy/View/viewBasico.html";
        echo "<h1>Tabela criada com sucesso!<br>";}
    public function listarUm($id){
        $stmt=$this->pdo->query("SELECT * from produto where id=$id");
        return $stmt->fetchALL(PDO::FETCH_ASSOC);}
    public function listarTudo(){
        $stmt=$this->pdo->query("SELECT * from produto order by prod");
        return $stmt->fetchALL(PDO::FETCH_ASSOC);}
    public function listar(){
        $stmt=$this->pdo->query("SELECT SUBSTRING_INDEX(prod,' ',1) AS grupo 
        FROM produto GROUP BY grupo ORDER BY grupo");
        return $stmt->fetchALL(PDO::FETCH_ASSOC);}
    public function filtrar($filtro){
        $stmt=$this->pdo->query("select * from produto where prod like '$filtro%'
        order by prod");
        return $stmt->fetchALL(PDO::FETCH_ASSOC);}
    public function atualizar($dados){
        $stmt=$this->pdo->prepare('UPDATE produto SET 
        prod=?,preço=?,un=?  WHERE id=?');
        $stmt->execute([$dados[1],$dados[2],$dados[3],$dados[0]]);
        $filtro=$dados[0];
        $stmt=$this->pdo->query("select * from produto where id=$filtro");
        return $stmt->fetchAll(PDO::FETCH_ASSOC);}
    public function incluir($dados){ 
        $stmt=$this->pdo->prepare('INSERT INTO produto (prod,preço,un)
            values (?,?,?)');
        $stmt->execute([$dados[0],$dados[1],$dados[2]]);
        $filtro=$this->pdo->lastInsertId();
        $stmt=$this->pdo->query("select * from produto where id=$filtro");
        return $stmt->fetchAll(PDO::FETCH_ASSOC);}
    public function excluir($dados){
        $id=$dados[1];
        $produto=$dados[0];
        $this->pdo->query("delete from produto where id=$id");
        require $_SERVER['DOCUMENT_ROOT']."/astudy/View/viewBasico.html";
        echo "<h1>o produto $produto foi excluido</h1>";}}

arquivo /astudy/View/viewAtualizar.php
<?php
require('viewBasico.html');
$id=$_GET['id'];
$prod=$_GET['prod'];
$preço=$_GET['preço'];
$un=$_GET['un'];
?>
<table class="table table-striped fs-1">
<form action='../Controller/produtoController.php'>
<tr><td>Código<td><?=$id?><input type=hidden name=atualizar[] value=<?=$id?>>
<tr><td>Produto<td><input name=atualizar[] value='<?=$prod?>'>
<tr><td>preço<td><input name=atualizar[] value=<?=$preço?>>
<tr><td>Un<td><input name=atualizar[] value='<?=$un?>'>
<tr><td><td colspan=2><input name=alterar type=submit value=Atualizar>
</form>
<tr><td><td>
<form action='../Controller/produtoController.php'>
<input type=hidden name=excluir[] value='<?=$prod?>'>
<input type=hidden name=excluir[] value=<?=$id?>>
<input type=submit value=Excluir>
</form>
</table>

arquivo /astudy/View/viewBasico.html
<!DOCTYPE html>
<meta name="viewport" content="width=device">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" 
    rel="stylesheet">
<input id=inputMenu class=fs-1 type=submit value=Menu onclick="location.replace('../View/viewMenu.php')">
<a class='fs-1 link-underline-light' id=mensagem></a>
<hr>

arquivo /astudy/View/viewFiltro.php
<?php 
include('viewBasico.html');
echo "<table class=table><th class=fs-1>Cód<th class=fs-1>Produto
    <th class=fs-1>preço<th class=fs-1>Un";
foreach($produtos as $produto){
    $id=$produto['id'];
    $prod=$produto['prod'];
    $prodURL=urlencode($prod);
    $preço=$produto['preço'];
    $un=$produto['un'];
    echo "<tr><td class='fs-1 text-end'>$id";
    echo "<td class='fs-1 text-nowrap overflow-hidden'>";
    echo "<a class='link-underline-light' href=../$irPara?id=$id&prod=$prodURL&preço=$preço&un=$un>$prod</a>";
    echo "<td class=fs-1>$preço<td class=fs-1>$un";}
?>
</table>

arquivo /astudy/View/viewIncluir.php
<?php require('viewBasico.html'); ?>
<form class="w-50 mt-5 m-auto" action='/astudy/Controller/produtoController.php'>
<table class="table table-striped fs-1">
<tr><td><td class=fs-1>Novo Produto
<tr><td>Produto<td><input name=incluir[] required>
<tr><td>Preço<td><input name=incluir[] required>
<tr><td>Un<td><input name=incluir[] required>
<tr><td><td><input type=submit value='Incluir Novo Produto'>
</form>
</table>

arquivo /astudy/View/viewMenu.php
<?php include('viewBasico.html'); ?>
<script>inputMenu.setAttribute('type','hidden')</script>
<table class='table table-striped fs-1'>
    <tr><td><a class=link-underline-light
        href="/astudy/Controller/produtoController.php?criarProdutos">
        Criar ou recriar tabela produtos</a>
    <tr><td><a class=link-underline-light
        href="/astudy/Controller/produtoController.php?verProdutos">
        Ver todos produtos</a>
    <tr><td><a class=link-underline-light href="/astudy/View/viewIncluir.php">
        Incluir novo produto</a>
    <tr><td><a class=link-underline-light 
        href="/astudy/Controller/orçamentoController.php?inicio">Orçamento</a>
</table>

arquivo /astudy/View/viewOrçamento.php
<?php include('viewBasico.html') ?>
<script>mensagem.innerHTML="Orçamento"</script>
<table class='fs-1 table table-striped'>
<th>Produto<th>Qt<th>Un<th>Preço<th>Total
<?php foreach($itens as $key=>$item): ?>
    <tr><td><a class=link-underline-light href='../Controller/orçamentoController.php?excluir=<?=$key?>'>
    <?=$item[0]?></a>
    <td><input class='border border-light bg-transparent' value=<?=$item[1]?> size=1
        onchange="location.replace
        ('../Controller/orçamentoController.php?alterar='+
        this.value+'&chave=<?=$key?>')">
    <td><?=$item[2]?><td class=text-end><?=nf($item[3])?><td class=text-end><?=nf($item[4])?>
<?php endforeach;?>
<tr><td><input type=submit value=Produto 
    onclick="location.replace
    ('../Controller/orçamentoController.php?produto')">
<input type=submit value=Apagar onclick="location.replace
    ('../Controller/orçamentoController.php?apagar')">
<td><td><th>Geral<th><?=nf($soma)?>
</table>

arquivo /astudy/View/viewProduto.php
<?php include('viewBasico.html') ?>
<p class='fs-1 text-center'><?=$contagem?> grupos de produtos
<table class=table>
<!--esse algorítimo é péssimo, ele só faz 4 colunas no máximo-->
<?php for($iLinha=0;$iLinha<$numLinhas;$iLinha++){
        for($iColuna=0;$iColuna<=$colunas;$iColuna++){
            if(($iLinha+$iColuna*$numLinhas)<$contagem){
            $item=$produtos[$iLinha+$iColuna*$numLinhas]['grupo'];
            echo "<td><a class='link-dark link-underline
                link-underline-opacity-0 fs-2' href='?item=$item'>$item</a>";}}
    echo "<tr>";}
?>
</table>

arquivo /astudy/index.php
<?php
header("location:View/viewMenu.php");

 

 

Screenshot_20231124-151407_Samsung Internet.jpg

Editado por Frank K Hosaka
Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

// histórico das atualizações no projeto produtos

18/11/23 foi criado conexao.php, tornando possível todo código se reportar a apenas uma conexão.

19/11/23 foi criado viewAtualizar.php

20/11/23 criei o código ScripIn.php para ajudar a testar o MVC projeto produtos.

21/11/23 criei o código ScripOut.php para publicar o projeto no fórum.

22/11/23 acrescentei a rotina de alteração e inclusão de produtos, bem como mudei o roteador do index.php para o controlador

23/11/23 acrescentei a rotina do orçamento

 

 

Editado por Frank K Hosaka
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...