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!

10
respostas

Botão não esta reconhecendo.

Boa noite , estava fazendo o exercício porem o Botão quando aperto não aparece nenhuma mensagem

produto - formulario

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

    <h1>Formulário de cadastro</h1>
    <form action="adiciona-produto.php">

        <table  class="table">
            <tr>
                <td>Nome</td>
                <td><input class="form-control" type="text" name="nome"></td>
            </tr>

            <tr>
                <td>Preço</td>
                <td><input class="form-control"  type="number" name="preco"><td>
            </tr>

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

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

cabecalho

<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="navbar navbar-inverse navbar-fixed-top">
        <div class="container">
            <div class="navbar-header">
                <a class="navbar-brand" href="index.php" class="navbar-brand">Minha Loja</a>
            </div>


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

    <div class="container">

    <div class="principal

adicionar-produto

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

<?php
function insereProduto($conexao, $nome , $preco){
    $query = "insert into produtos (nome, preco) values ('{$nome}', {$preco})";
    return mysqli_query($conexao, $query);
}

$nome = $_GET["nome"];
$preco = $_GET["preco"];
$conexao = mysqli_connect('localhost', 'root', '', 'loja');


if($insereProduto($conexao, $nome, $preco)) {
    ?>
    <p class="text-success">Produto <?= $nome; ?>, <?= $preco; ?> adicionado com sucesso!</p>
<?php
} else {
    ?>

<p class="text-danger">O produto <?= $nome; ?> não foi adicionado</p>
<?php
}
?>

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

Oi Jean, nessa linha do arquivo adiciona-produto.php:

if($insereProduto($conexao, $nome, $preco)) {

Você colocou o nome da função como variável, troque para:

if(insereProduto($conexao, $nome, $preco)) {

Boa tarde,

Cara fiz o que vc falou porem esta a mesma coisa.

Jean, pode ser o seguinte: você cria o formulário com action "adiciona-produto.php"

<form action="adiciona-produto.php">

No entanto, mais abaixo, você exibe o código do arquivo "adicionar-produto.php". Não seria essa falta no "r"? Talvez o seu formulário não ta conseguindo encontrar esse arquivo.

Até.

A propósito, a observação do Alex Moreno procede. Você deve efetuar a chamada sem o "$".

Oi Jean, posta aqui como ficou o seu código depois da alteração

Então verifiquei esta tudo correto , segue o codigo

Cabeçalho

<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="navbar navbar-inverse navbar-fixed-top">
        <div class="container">
            <div class="navbar-header">
                <a class="navbar-brand" href="index.php" class="navbar-brand">Minha Loja</a>
            </div>


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

    <div class="container">

    <div class="principal

Produto Formulario

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

    <h1>Formulário de cadastro</h1>
    <form action="adiciona-produto.php">

        <table  class="table">
            <tr>
                <td>Nome</td>
                <td><input class="form-control" type="text" name="nome"></td>
            </tr>

            <tr>
                <td>Preço</td>
                <td><input class="form-control"  type="number" name="preco"><td>
            </tr>

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

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

Adiciona Produto

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

<?php
function insereProduto($conexao, $nome , $preco){
    $query = "insert into produtos (nome, preco) values ('{$nome}', {$preco})";
    return mysqli_query($conexao, $query);
}

$nome = $_GET["nome"];
$preco = $_GET["preco"];
$conexao = mysqli_connect('localhost', 'root', '', 'loja');


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

<p class="text-danger">O produto <?= $nome; ?> não foi adicionado<?= $msg ?></p>
<?php
}
?>

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

E não aparece nenhuma mensagem de erro? Utilize, na primeira linha do "adiciona-produto.php" o comando:

<?php 
// Habilita a exibição de todos os erros possíveis
error_reporting(E_ALL);
ini_set("display_errors", 1);

// essa linha vc já tem
include("cabecalho.php"); 
?>

Posta o resultado pra nós ai...

Outra coisa:

seu arquivo "cabecalho.php" ta com isso no final:

<div class="principal

Você postou errado, com conteúdo faltando, ou ele realmente ta finalizando assim?

Você também não postou o arquivo "rodape.php", pode ser que o erro esteja nele também. Existe esse arquivo no seu projeto?

Realmente Alex era o erro acima , porem agora apresenta outro erro já tentei fazer de tudo , conferi o codigo com a aula , porem esta apresentando um erro estanho , todo produto que adiciono mesmo com preço o mesmo informa que produto "Tal" não esta adicionado .

Cabeçalho:

<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="navbar navbar-inverse navbar-fixed-top">
        <div class="container">
            <div class="navbar-header">
                <a class="navbar-brand" href="index.php" class="navbar-brand">Minha Loja</a>
            </div>


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

    <div class="container">

    <div class="principal">

Adicionar Produto:

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

<?php
function insereProduto($conexao, $nome , $preco){
    $query = "insert into produtos (nome, preco) values ('{$nome}', {$preco})";
        $resultadoDaInsercao = mysqli_query($conexao, $query);
        return $resultadoDaInsercao;
}

$nome = $_GET["nome"];
$preco = $_GET["preco"];
$conexao = mysqli_connect('localhost', 'root', '', 'loja');

?>
<?php
if(insereProduto($conexao, $nome, $preco)) {
    ?>
    <p class="alert-success">Produto <?= $nome; ?>, <?= $preco; ?> adicionado com sucesso!</p>
<?php
} else {
    $msg= mysqli_error($conexao);
?>

<p class="alert-danger">O produto <?= $nome; ?> não foi adicionado<?= $msg ?></p>
<?php
}
?>

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

produto-formulario:

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

    <h1>Formulário de cadastro</h1>
    <form action="adiciona-produto.php">

        <table  class="table">
            <tr>
                <td>Nome</td>
                <td><input class="form-control" type="text" name="nome"></td>
            </tr>

            <tr>
                <td>Preço</td>
                <td><input class="form-control"  type="number" name="preco"><td>
            </tr>

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

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

Rodape

        </div>
    </div>
</body>
</html>

Para entender melhor o que está acontecendo, adicione as linhas, como indicado anteriormente:

<?php 
// Habilita a exibição de todos os erros possíveis
error_reporting(E_ALL);
ini_set("display_errors", 1);

// essa linha vc já tem
include("cabecalho.php"); 
?>

Pra saber se houve erro no momento da inserção no banco, adicione o seguinte na sua função "insereProduto":

<?php 

function insereProduto($conexao, $nome , $preco){
    $query = "insert into produtos (nome, preco) values ('{$nome}', {$preco})";
        $resultadoDaInsercao = mysqli_query($conexao, $query);
        // adicionando um controle de erro basicão
        if(!$resultadoDaInsercao){
            printf("Erro ao tentar inserir: %s\n", mysqli_error($conexao));
        }
        return $resultadoDaInsercao;
}
?>

Isso fará com que erros do PHP e da consulta ao banco sejam exibidos. Poste o resultado ai...