Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

Solucionado
(ver solução)
19
respostas

A tabela não foi estilizada!

<?php include("cabecalho.php");?> <?php include("conecta.php");?> <?php include "produto-banco.php"?>

<?php $produtos=ListaProdutos($conexao);?>

<?php foreach($produtos as $produto):?>

<?= $produto['nome']?><?= $produto['preco']?> <?php endforeach?><?php include("rodape.php");?>
19 respostas

Allan, talvez a inclusão do CSS não esteja correta. Posta teu arquivo cabecalho.php também (se estiver nele a referência ao arquivo .css).

Olá Allan, tudo bom?

Você poderia colocar seu código completo aqui no fórum?Por favor!

Estou aguardando

Allan, posta o código-fonte da aplicação.

Se a programação PHP está funcionando, ou seja, os produtos estão sendo impressos, mas o visual da tabela não foi aplicado, então o problema está no include do CSS (que pode estar faltando) ou no caminho do CSS que está tentando ser acessado. Outro problema poderia ser o arquivo CSS estar sendo chamado corretamente, mas a classe não estar sendo aplicada (o que não é o caso atual).

Para validar as duas primeiras situações é fácil, basta usar o console do navegador

No caso do chrome, aperte F12, depois clique na aba network(rede) e depois abra a página que está dando problema. Lá vai mostrar os arquivos que estão sendo baixados, então você vai conseguir ver se o arquivo CSS está sendo baixado ou não

insira seu código aqui
<html>
<head>
    <title>Minha loja</title>
    <meta charset="utf-8">
    <link href="css/bootstrap.css" rel="stylesheet" />
    <link href="css/loja.css" rel="stylesheet" />
</head>

<body>
    <div class="navbar navbar-inverse navbar-fixed-top">
        <div class="container">
            <div class="navbar-header">
                <a href="index.php" class="navbar-brand">Minha Loja</a>
            </div>

               <div>
                <ul class="nav navbar-nav">
                     <li><a href="produto-formulario.php">Adiciona Produto</a></li>
                     <li><a href="produto-lista.php">Produtos</a></li>
                    <li><a href="sobre.php">Sobre</a></li>
                </ul>
            </div>
        </div><!-- container acaba aqui -->
    </div>

    <div class="container">

    <div class="principal">

Aqui está meu código fonte do arquivo "cabecalho.php":

Não sei o que está acontecendo! Colo o código fonte e só aparece o resultado em html!

boa tarde Allan,

verifica si sua function ListaProdutos, esta correta.

<?php function listaProdutos($conexao) { $produtos = array(); $resultado = mysqli_query($conexao, "select p.*,c.nome as categoria_nome from produtos as p join categorias as c on c.id=p.categoria_id"); while($produto = mysqli_fetch_assoc($resultado)) { array_push($produtos, $produto); } return $produtos; }

?>

Está sim...O programa está td funcional, só a estilização que está falhando!

verifica si o cabecalho.php ta assim:

<?phperror_reporting(E_ALL ^ E_NOTICE); include("mostra-alerta.php");?>

verifica si o cabecalho.php ta assim: ''' <?phperror_reporting(E_ALL ^ E_NOTICE); include("mostra-alerta.php");?>

solução!
<?php  
error_reporting(E_ALL ^ E_NOTICE); 
include("mostra-alerta.php");?>
<html>
    <head>
        <title>Minha Loja</title>
        <meta charset="utf-8">
        <link rel="stylesheet" type="text/css" href="css/bootstrap.css">
        <link rel="stylesheet" type="text/css" href="css/loja.css">    
    </head>
    <body>

    <div class="navbar navbar-inverse navbar-fixed-top">
        <div class="container">
            <div class="navbar-header">
                <a class="navbar-brand" href="index.php">Minha Loja</a>
            </div>
            <div>
                <ul class="nav navbar-nav">
                    <li><a href="produto-formulario.php">Adiciona Produto</a></li>
                    <li><a href="produto-lista.php">Produtos</a></li>
                    <li><a href="sobre.php">Sobre</a></li>                
                </ul>
            </div>
        </div>
    </div>
        <div class="container">
            <div class="principal">

Utilizei o código acima e funcionou. No entanto, precisei alterar os "hrefs" para "href="bootstrap.css"" e href="loja.css", respectivamente. Mas, apesar de ter funcionado, apareceram dois indesejaveis warnings:

1ª- Warning: include(mostra-alerta.php): failed to open stream: No such file or directory in C:\xampp\htdocs\Loja\cabecalho.php on line 3

2º- Warning: include(): Failed opening 'mostra-alerta.php' for inclusion (include_path='.;C:\xampp\php\PEAR') in C:\xampp\htdocs\Loja\cabecalho.php on line 3

Por que será??

Allan a mensagem de erro refere-se ao seguinte trecho:

include("mostra-alerta.php");?>
`

Certifique-se de que o caminho e o nome do arquivo estão corretos.

Abraço

vou lhe passa o codigo todo:

adiciona-produto.php ``` <?php require_once("cabecalho.php"); require_once("banco-produto.php"); require_once("logica-usuario.php"); require_once("class/Produto.php"); require_once("class/Categoria.php");

verificaUsuario();

$categoria = new Categoria(); $categoria->setId($_POST['categoria_id']);

$produto = new Produto(); $produto->setNome($_POST['nome']); $produto->setPreco($_POST['preco']); $produto->setDescricao($_POST['descricao']);

if(array_key_exists('usado', $_POST)) { $produto->setUsado("true"); } else { $produto->setUsado("false"); }

$produto->setCategoria($categoria);

if(insereProduto($conexao, $produto)) { ?>

O produto <?= $produto->getNome() ?>, <?= $produto->getPreco() ?> foi adicionado.

<?php } else { $msg = mysqli_error($conexao); ?>

O produto <?= $produto->getNome() ?> não foi adicionado: <?= $msg?>

<?php } ?>

<?php include("rodape.php"); ?>

vou lhe passa o codigo todo:

adiciona-produto.php

<?php 
require_once("cabecalho.php");
require_once("banco-produto.php");
require_once("logica-usuario.php");
require_once("class/Produto.php");
require_once("class/Categoria.php");

verificaUsuario();

$categoria = new Categoria();
$categoria->setId($_POST['categoria_id']);

$produto = new Produto();
$produto->setNome($_POST['nome']);
$produto->setPreco($_POST['preco']);
$produto->setDescricao($_POST['descricao']);

if(array_key_exists('usado', $_POST)) {
    $produto->setUsado("true");
} else {
    $produto->setUsado("false");
}

$produto->setCategoria($categoria);

if(insereProduto($conexao, $produto)) { ?>
    <p class="text-success">O produto <?= $produto->getNome() ?>, <?= $produto->getPreco() ?> foi adicionado.</p>
<?php 
} else {
    $msg = mysqli_error($conexao);
?>
    <p class="text-danger">O produto <?= $produto->getNome() ?> não foi adicionado: <?= $msg?></p>
<?php
}
?>

<?php include("rodape.php"); ?>

altera-produto.php

<?php
require_once("cabecalho.php");
require_once("banco-produto.php");
require_once("class/Produto.php");
require_once("class/Categoria.php");

$categoria = new Categoria();
$categoria->setId($_POST['categoria_id']);

$produto = new Produto();
$produto->setId($_POST['id']);
$produto->setNome($_POST['nome']);
$produto->setPreco($_POST['preco']);
$produto->setDescricao($_POST['descricao']);

if(array_key_exists('usado', $_POST)) {
    $produto->setUsado("true");
} else {
    $produto->setUsado("false");
}

$produto->setCategoria($categoria);

if(alteraProduto($conexao, $produto)) { ?>
    <p class="text-success">O produto <?= $produto->getNome() ?>, <?= $produto->getPreco() ?> foi alterado.</p>
<?php 
} else {
    $msg = mysqli_error($conexao);
?>
    <p class="text-danger">O produto <?= $produto->getNome() ?> não foi alterado: <?= $msg?></p>
<?php
}
?>

<?php include("rodape.php"); ?>

banco-categoria.php

<?php
require_once("conecta.php");
require_once("class/Categoria.php");

function listaCategorias($conexao) {

    $categorias = array();
    $query = "select * from categorias";
    $resultado = mysqli_query($conexao, $query);

    while($categoria_array = mysqli_fetch_assoc($resultado)) {

        $categoria = new Categoria();
        $categoria->setId($categoria_array['id']);
        $categoria->setNome($categoria_array['nome']);

        array_push($categorias, $categoria);
    }

    return $categorias;
}

banco-produto.php

<?php
require_once("conecta.php");
require_once("class/Produto.php");
require_once("class/Categoria.php");

function listaProdutos($conexao) {

    $produtos = array();
    $resultado = mysqli_query($conexao, "select p.*,c.nome as categoria_nome 
        from produtos as p join categorias as c on c.id=p.categoria_id");

    while($produto_array = mysqli_fetch_assoc($resultado)) {

        $categoria = new Categoria();
        $categoria->setNome($produto_array['categoria_nome']);

        $produto = new Produto();
        $produto->setId($produto_array['id']);
        $produto->setNome($produto_array['nome']);
        $produto->setDescricao($produto_array['descricao']);
        $produto->setCategoria($categoria);
        $produto->setPreco($produto_array['preco']);
        $produto->setUsado($produto_array['usado']);

        array_push($produtos, $produto);
    }

    return $produtos;
}

function insereProduto($conexao, Produto $produto) {

    $query = "insert into produtos (nome, preco, descricao, categoria_id, usado) 
        values ('{$produto->getNome()}', {$produto->getPreco()}, 
            '{$produto->getDescricao()}', {$produto->getCategoria()->getId()}, 
                {$produto->isUsado()})";

    return mysqli_query($conexao, $query);
}

function alteraProduto($conexao, Produto $produto) {

    $query = "update produtos set nome = '{$produto->getNome()}', 
        preco = {$produto->getPreco()}, descricao = '{$produto->getDescricao()}', 
            categoria_id= {$produto->getCategoria()->getId()}, 
                usado = {$produto->isUsado()} where id = '{$produto->getId()}'";

    return mysqli_query($conexao, $query);
}

function buscaProduto($conexao, $id) {

    $query = "select * from produtos where id = {$id}";
    $resultado = mysqli_query($conexao, $query);
    $produto_buscado = mysqli_fetch_assoc($resultado);

    $categoria = new Categoria();
    $categoria->setId($produto_buscado['categoria_id']);

    $produto = new Produto();
    $produto->setId($produto_buscado['id']);
    $produto->setNome($produto_buscado['nome']);
    $produto->setDescricao($produto_buscado['descricao']);
    $produto->setCategoria($categoria);
    $produto->setPreco($produto_buscado['preco']);
    $produto->setUsado($produto_buscado['usado']);

    return $produto;
}

function removeProduto($conexao, $id) {

    $query = "delete from produtos where id = {$id}";

    return mysqli_query($conexao, $query);
}

banco-usuario.php

<?php
require_once("conecta.php");

function buscaUsuario($conexao, $email, $senha) {

    $senhaMd5 = md5($senha);
    $email = mysqli_real_escape_string($conexao, $email);
    $query = "select * from usuarios where email='{$email}' and senha='{$senhaMd5}'";
    $resultado = mysqli_query($conexao, $query);
    $usuario = mysqli_fetch_assoc($resultado);

    return $usuario;
}

cabecalho.php

<?php
error_reporting(E_ALL ^ E_NOTICE);
require_once("mostra-alerta.php"); ?>
<html>
<head>
    <meta charset="utf-8">
    <title>Minha Loja</title>
    <link href="css/bootstrap.css" rel="stylesheet">
    <link href="css/loja.css" rel="stylesheet">
</head>
<body>

    <div class="navbar navbar-inverse navbar-fixed-top">
        <div class="container">
            <div class="navbar-header">
                <a class="navbar-brand" href="index.php">Minha Loja</a>
            </div>
            <div>
                <ul class="nav navbar-nav">
                    <li><a href="produto-formulario.php">Adiciona Produto</a></li>
                    <li><a href="produto-lista.php">Produtos</a></li>
                    <li><a href="contato.php">Contato</a></li>
                </ul>
            </div>
        </div>
    </div>

    <div class="container">
        <div class="principal">
            <?php  mostraAlerta("success"); ?>
            <?php mostraAlerta("danger"); ?>

conecta.php

$conexao = mysqli_connect("localhost", "root", "", "loja");

contato.php

<?php require_once("cabecalho.php"); ?>

<form action="envia-contato.php" method="post">
    <table class="table">
        <tr>
            <td>Nome</td>
            <td><input type="text" name="nome" class="form-control"></td>
        </tr>
        <tr>
            <td>Email</td>
            <td><input type="email" name="email" class="form-control"></td>
        </tr>
        <tr>
            <td>Mensagem</td>
            <td><textarea class="form-control" name="mensagem"></textarea></td>
        </tr>
        <tr>
            <td><button class="btn btn-primary">Enviar</button></td>
        </tr>
    </table>

</form>

<?php require_once("rodape.php"); ?>

envia-contato.php

<?php
session_start();
$nome = $_POST["nome"];
$email = $_POST["email"];
$mensagem = $_POST["mensagem"];

require_once("PHPMailerAutoload.php");

$mail = new PHPMailer();
$mail->isSMTP();
$mail->Host = 'smtp.gmail.com';
$mail->Port = 587;
$mail->SMTPSecure = 'tls';
$mail->SMTPAuth = true;
$mail->Username = "alura.php.e.mysql@gmail.com";
$mail->Password = "123456";

$mail->setFrom("alura.php.e.mysql@gmail.com", "Alura Curso PHP e MySQL");
$mail->addAddress("alura.php.e.mysql@gmail.com");
$mail->Subject = "Email de contato da loja";
$mail->msgHTML("<html>de: {$nome}<br/>email: {$email}<br/>mensagem: {$mensagem}</html>");
$mail->AltBody = "de: {$nome}\nemail:{$email}\nmensagem: {$mensagem}";

if($mail->send()) {
    $_SESSION["success"] = "Mensagem enviada com sucesso";
    header("Location: index.php");
} else {
    $_SESSION["danger"] = "Erro ao enviar mensagem " . $mail->ErrorInfo;
    header("Location: contato.php");
}
die();

index.php

<?php
require_once("cabecalho.php");
require_once("logica-usuario.php");
?>

<h1>Bem vindo!</h1>

<?php
if(usuarioEstaLogado()) {
?>
    <p class="text-success">Você está logado como <?= usuarioLogado() ?>. <a href="logout.php">Deslogar</a></p>
<?php
} else {
?>
    <h2>Login</h2>
    <form action="login.php" method="post">
        <table class="table">
            <tr>
                <td>Email</td>
                <td><input class="form-control" type="email" name="email"></td>
            </tr>
            <tr>
                <td>Senha</td>
                <td><input class="form-control" type="password" name="senha"></td>
            </tr>
            <tr>
                <td><button class="btn btn-primary">Login</button></td>
            </tr>
        </table>
    </form>
<?php
}
?>

<?php include("rodape.php"); ?>

logica-usuario.php

<?php
session_start();

function usuarioEstaLogado() {
    return isset($_SESSION["usuario_logado"]);
}

function verificaUsuario() {
    if(!usuarioEstaLogado()) {
        $_SESSION["danger"] = "Você não tem acesso a esta funcionalidade.";
        header("Location: index.php");
        die();
    }
}

function usuarioLogado() {
    return $_SESSION["usuario_logado"];
}

function logaUsuario($email) {
    $_SESSION["usuario_logado"] = $email;
}

function logout() {
    session_destroy();
    session_start();
}

login.php

<?php 
require_once ("banco-usuario.php");
require_once("logica-usuario.php");

$usuario = buscaUsuario($conexao, $_POST["email"], $_POST["senha"]);

if($usuario == null) {
    $_SESSION["danger"] = "Usuário ou senha inválido.";
    header("Location: index.php");
} else {
    $_SESSION["success"] = "Usuário logado com sucesso.";
    logaUsuario($usuario["email"]);
    header("Location: index.php");
}
die();

logout.php

<?php
require_once("logica-usuario.php");

logout();
$_SESSION["success"] = "Deslogado com sucesso.";
header("Location: index.php");
die();

mostra-alerta.php

<?php
session_start();

function mostraAlerta($tipo) {
    if(isset($_SESSION[$tipo])) {
?>
        <p class="alert-<?= $tipo ?>"><?= $_SESSION[$tipo]?></p>
<?php
        unset($_SESSION[$tipo]);
    }
}

produto-altera-formulario.php

<?php
require_once("cabecalho.php");
require_once("banco-categoria.php");
require_once("banco-produto.php");

$id = $_GET['id'];
$produto = buscaProduto($conexao, $id);
$categorias = listaCategorias($conexao);

$selecao_usado = $produto->isUsado() ? "checked='checked'" : "";
$produto->setUsado($selecao_usado);

?>

<h1>Alterando produto</h1>
<form action="altera-produto.php" method="post">
    <input type="hidden" name="id" value="<?=$produto->getId()?>">
    <table class="table">
        <?php include("produto-formulario-base.php"); ?>
        <tr>
            <td>
                <button class="btn btn-primary" type="submit">Alterar</button>
            </td>
        </tr>
    </table>
</form>

<?php include("rodape.php"); ?>

produto-altera-base.php

<tr>
    <td>Nome</td>
    <td>
        <input class="form-control" type="text" name="nome" 
            value="<?=$produto->getNome()?>">
    </td>
</tr>
<tr>
    <td>Preço</td>
    <td>
        <input class="form-control" type="number" step="0.01" name="preco" 
            value="<?=$produto->getPreco()?>">
    </td>
</tr>
<tr>
    <td>Descrição</td>
    <td>
        <textarea class="form-control" name="descricao"><?=$produto->getDescricao()?></textarea>
    </td>
</tr>
<tr>
    <td></td>
    <td><input type="checkbox" name="usado" <?=$produto->isUsado()?> value="true"> Usado
</tr>
<tr>
    <td>Categoria</td>
    <td>
        <select name="categoria_id" class="form-control">
            <?php
            foreach($categorias as $categoria) : 
                $essaEhACategoria = $produto->getCategoria()->getId() == $categoria->getId();
                $selecao = $essaEhACategoria ? "selected='selected'" : "";
            ?>
                <option value="<?=$categoria->getId()?>" <?=$selecao?>>
                    <?=$categoria->getNome()?>
                </option>
            <?php 
            endforeach
            ?>
        </select>
    </td>
</tr>

produto-formulario.php

<?php
require_once("cabecalho.php");
require_once("banco-categoria.php");
require_once("logica-usuario.php");
require_once("class/Produto.php");
require_once("class/Categoria.php");

verificaUsuario();

$categoria = new Categoria();
$categoria->setId(1);

$produto = new Produto();
$produto->setCategoria($categoria);

$categorias = listaCategorias($conexao);

?>    

<h1>Formulário de produto</h1>
<form action="adiciona-produto.php" method="post">
    <table class="table">

        <?php include("produto-formulario-base.php"); ?>

        <tr>
            <td>
                <button class="btn btn-primary" type="submit">Cadastrar</button>
            </td>
        </tr>
    </table>
</form>

<?php include("rodape.php"); ?>

produto-lista.php

<?php
require_once("cabecalho.php");
require_once("banco-produto.php");
?>

<table class="table table-striped table-bordered">
    <?php
    $produtos = listaProdutos($conexao);
    foreach($produtos as $produto) :
    ?>
        <tr>
            <td><?= $produto->getNome() ?></td>
            <td><?= $produto->getPreco() ?></td>
            <td><?= $produto->precoComDesconto(0.1) ?></td>
            <td><?= substr($produto->getDescricao(), 0, 40) ?></td>
            <td><?= $produto->getCategoria()->getNome() ?></td>
            <td>
                <a class="btn btn-primary" 
                    href="produto-altera-formulario.php?id=<?=$produto->getId()?>">
                    alterar
                </a>
            </td>
            <td>
                <form action="remove-produto.php" method="post">
                    <input type="hidden" name="id" value="<?=$produto->getId()?>">
                    <button class="btn btn-danger">remover</button>
                </form>
            </td>
        </tr>
    <?php
    endforeach
    ?>    
</table>

<?php include("rodape.php"); ?>

remove-produto.php

<?php
require_once("cabecalho.php");
require_once("banco-produto.php"); 
require_once("logica-usuario.php");

$id = $_POST['id'];
removeProduto($conexao, $id);
$_SESSION["success"] = "Produto removido com sucesso.";
header("Location: produto-lista.php");
die();

?>

rodape.php

testeigualdade.php

<?php

require "class/Produto.php";

$produto = new Produto(); $produto->setPreco(59.9); $produto->setNome("Livro da Casa do Codigo");

$outroProduto = new Produto(); $outroProduto->setPreco(59.9); $outroProduto->setNome("Livro da Casa do Codigo");

$outroProduto = $produto;

if ($produto === $outroProduto) { echo "sao iguais"; } else { echo "sao diferentes"; }

?> ```

Olá,

Verifique se seus códigos php estão na raiz do projeto e seu "bootstrap.css" está dentro do diretório css. Se o problema é apenas na estilização das tabelas, provavelmente ou os arquivos estão em diretórios errados ou você não possui o arquivo bootstrap.css.

Fora isso, o código está correto. Caso queira mais ajuda, nos mostre como estão seus arquivos nos diretórios do projeto.