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)
12
respostas

Informações perdida no formulário

Amigos, Preciso de ajuda 1) Ao clicar no botão alterar o browser apresenta o seguinte erro:

( ! ) Parse error: syntax error, unexpected end of file in C:\wamp64\www\loja\altera-produto.php on line 24

Este é o meu código da página "altera-produto.php"

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

$id = $_POST['id'];
$nome = $_POST['nome'];
$preco = $_POST['preco'];
$descricao = $_POST['descricao'];
$categoria_id = $_POST['categoria_id'];
if(array_key_exists('usado',$_POST)){
    $usado = "true";
} else {
    $usado = "false";
}

if(alteraProduto($conexao,$id,$nome,$preco,$descricao,$categoria_id,$usado)) {?>
    <p class="text-success">Produto <?= $nome?>, <?= $preco?> alterado com sucesso!</p>
<?php } else {
    $msg = mysqli_error($conexao);
?>
    <p class="text-danger">Produto <?= $nome?>, <?= $preco?> não alterado: <?= $msg?></p>
<?php}?>

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

2) Não está apresentando a mensagem de erro quando o usuário e a senha é inválida, segue o código:

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

verificaUsuario();

$nome = $_POST['nome'];
$preco = $_POST['preco'];
$descricao = $_POST['descricao'];
$categoria_id = $_POST['categoria_id'];
if(array_key_exists('usado',$_POST)){
    $usado = "true";
} else {
    $usado = "false";
}

if(insereProduto($conexao,$nome,$preco,$descricao,$categoria_id,$usado)) {?>
    <p class="text-success">Produto <?= $nome?>, <?= $preco?> adicionado com sucesso!</p>
<?php } else {
    $msg = mysqli_error($conexao);
?>
    <p class="text-danger">Produto <?= $nome?>, <?= $preco?> não adicionado: <?= $msg?></p>
<?php
}
?>

<?php include("rodape.php") ?>
12 respostas

Olá Chadu,

provavelmente tá faltando um espaço no treço: <?php}?>

Desgruda um pouco ai.

Att,

O erro continua...

a linha 24 é a última

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

e ele realmente está colado.. você pode até tirar o ?> completamente do arquivo que não vai dar erro.

ah sim.. acho que o problema é mais pela falta do ; do que por estar colado.. bota o ; que vai.

Maravilha! Estou conseguindo alterar o produto....

Quanto a dúvida "2" ainda não está apresentando a mensagem quando o usuário ou senha é inválida!

Help me please!

Oi, chadu. Parece que vocẽ postou uma outra versão do código responsável por efetuar o login e o da página de login que você quer mostrar a mensagem?

Perdão. quis dizer que você postou uma segunda versão do código de cadastrar produto no lugar do de efetuar login.

Segue o código: 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álida.";
    header("Location: index.php");
} else {
    $_SESSION["success"] = "Usuário logado com sucesso.";
    logaUsuario($usuario["email"]);
    header("Location: index.php");
}
die();

Esse parece ok. E o código da página que você exibe a mensagem?

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 require_once("rodape.php"); ?>
solução!

Então, aí não tem nenhum comando para mostrar o alerta mesmo. Criei uma função mostra alerta (acho que no tutorial ele vai falar para fazer isso também, mas o importante é ter essa lógica em algum lugar), e coloquei no cabeçalho.: esse é o mostra-alerta.php:

<?php

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

e nas útimas linhas do meu cabeçalho tem a chamada para essa função:

<!DOCTYPE HTML>
<?php
error_reporting(E_ALL ^ E_NOTICE);
include("logica-usuario.php");
include("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-collapse active 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">
                        <?php
                        if (!verifica_login()) {
                            ?>
                            <li><a href="user-form.php">Cadastrar Usuário</a></li>
                            <?php
                        }

                        if (verifica_login()) {
                            ?>
                            <li> <a href="logout.php">Logout</a></li>
                            <li><a href = "insert-form.php">Adiciona produto</a></li>
                        <?php } ?>
                        <li><a href = "list.php">Lista de produtos</a></li>
                        <li><a href = "contato.php">Contato</a></li>
                    </ul>
                </div>
            </div>
        </div>
        <div class="container">
            <div class="principal"><?php
                mostra_alerta("danger");
                mostra_alerta("success");

e em todas as ações que podem dar algum problema adiciono uma mensagem de "danger" ou "sucess".

Perfect!!!