6
respostas

Problema no formulário

Mesmo quando eu passo um campo sem nenhum valor para o formulário ele realiza o registro, segue o formulário:

<form class="default-form" action="registra-cliente.php" method="POST">
    <h2 class="form-title">Agendar Serviços</h2>
    <input class="form-item" type="text" name="nome" placeholder="Nome">

    <textarea class="form-item text-box" name="servico" placeholder="Serviço"></textarea>
    <div class="radio-form">
        <input class="form-item radio-input" type="radio" name="sexo" value="Masculino">
        <p>Masculino</p>
        <input class="form-item radio-input" type="radio" name="sexo" value="Feminino">    
        <p>Feminino</p>
    </div>
    <input class="form-item btn-submit" type="submit" value="Agendar">
</form>

e a função que registra no banco:

function registraCliente($conexao, $nome, $sexo, $servico){
    $query = "insert into clientes (nome, sexo, servico) values ('{$nome}','{$sexo}','{$servico}')";
    $resultado = mysqli_query($conexao, $query);
    return $resultado;
}

Pelo que notei nos testes que consegui realizar, o problema está no 'if' que verifica o formulário para redirecionar para a próxima pag, uma vez que mesmo quando o valor do input é vazio a execução da função retorna um true, validando assim o formulário, segue o código do arquivo:

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

$nome = $_POST['nome'];
#$horario = $_POST['horario'];
$sexo = $_POST['sexo'];
$servico = $_POST['servico'];

?>
<?php if(registraCliente($conexao, $nome, $sexo, $servico)): 
        header("Location: agenda.php");
?>
<?php else: 
        $msg=mysqli_error($conexao);
?>
        <h3>Não foi possível resitrar o produto</h3>
        <p>Erro:<?=$msg?></p>
<?php endif ?>

Escrevi as seguintes linhas de código só para testar:

$oi = registraCliente($conexao, $nome, $sexo, $servico); 
echo $oi;

O valor que a variável $oi retorna é 1 (true no caso)

6 respostas

Olá, Gabriel.

O que você falou está correto. Qual é a sua dúvida?

Se for o porquê de tudo funcionar com os campos vazios, é porque quando você envia um formulário sem preencher um campo, ele vai como uma string vazia. Ou seja, o valor existe. Caso você não queira que isso aconteça, você pode verificar se as variáveis que você pega do $_POST não são vazias.

Melhor ainda é utilizar o filter_input, mas não é mostrado no curso, então, 1 passo de cada vez.

Abraços e bons estudos!

Esse código é de uma atividade extra q estou fazendo para treinar um pouco mais, o projeto proposto pelo curso eu fiz, só q quando eu passo um valor vazio nele, ele me retorna um erro. Gostaria de saber o pq disso, pq o código dos dois é provavelmente igual, só os valores q mudam.

Provavelmente no projeto do curso existe uma verificação para garantir que os valores não sejam vazios, o que não ocorre no código que você enviou como exemplo.

No projeto do curso a verificação é esse "if", eu acho q é pq tds os inputs do meu formulário enviam uma string e no caso do curso alguns itens retornam um valor diferente (integer e boolean), isso pode ter alguma relação?

Coloca o código do projeto do curso aqui pra eu poder te dar uma resposta mais precisa.

;-)

O formulário HTML:

    <form class="form-padrao" action="adiciona-produto.php" method="POST">
        <h2 class="form-title">Cadastro de produto:</h2>
        <input type="text" name="nome" placeholder="Nome"><br>
        <input type="number" name="valor" placeholder="Preço"><br>
        <select class="categorias" name="categoria_id">
            <?php foreach($categorias as $categoria):?> 
                <option value="<?=$categoria['id']?>"><?=$categoria['nome']?></option>
            <?php endforeach?>
        </select>
        <textarea class="text-box" name="descricao" placeholder="Descrição"></textarea>
        <div class="checkbox">
            <input  type="checkbox" name="usado" value="true">
            <p>Usado</p>
        </div>
        <input class="form-botao" type="submit" value="Cadastrar">
    </form>
<?php include("fixo/normal-footer.php")?>

O aqruivo que adiciona produto:

<?php include("fixo/normal-header.php");
include("conecta.php");
include("banco-produto.php");

$nome = $_POST["nome"];
$valor = $_POST["valor"];
$descricao = $_POST["descricao"];
$categoria_id = $_POST['categoria_id'];
$usado = $_POST['usado'];

if(array_key_exists('usado', $_POST)){
    $usado = "true";
}else{
    $usado = "false";
    }


if(insereProduto($conexao, $nome, $valor, $descricao, $categoria_id, $usado)):
    header("Location: produto-lista.php?adicionado=true")
?>
<?php else: 
    $msg = mysqli_error($conexao)
?>
    <div class="menssagem erro">
        <h3>Não foi possível adicionar o produto "<? echo $nome?>"</h3>
        <h3>Erro: <?echo $msg?></h3>
    </div>
<?php endif ?>
<?php include("fixo/normal-footer.php")?>

E a função:

function insereProduto($conexao, $nome, $valor, $descricao, $categoria_id, $usado){
    $query = "insert into produtos (nome, preco, descricao, categoria_id, usado) values ('{$nome}', {$valor}, '{$descricao}', {$categoria_id}, {$usado})";
    return mysqli_query($conexao, $query);
}

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software