5
respostas

Insert into não funciona

Bom dia pessoal...estou fazendo um site, utilizando os mesmos princípios de código do curso...tento submeter um formulário e enviar para o banco de dados, porém não funciona

Segue código do formulário :




                <form class="formulario" action="teste.php" method="post">

                        <label for="Nome" id="Nomelabel"> Nome :</label> <br>
                            <input type="text" id="Nome" name="nome" placeholder="Digite seu nome"> </input> <br>

                        <label for="E-mail" id="E-maillabel"> E-mail :</label> <br>
                            <input type="text" id="E-mail" name="email" placeholder="Digite seu e-mail"> </input> <br>

                        <label for="Telefone" id="Telefonelabel"> Telefone : </label> <br>
                            <input type="text" name="telefone" id="Telefone" placeholder="Digite seu telefone"> </input> <br>


                        <label for="textarea" id="Recadolabel" name="mensagem">Deixe aqui sua mensagem : </label>
                        <textarea rows="10" cols="84" id="mensagem" name="mensagem" placeholder="Digite sua mensagem"></textarea>

                        <br>
                        <br>
                        <br>
                        <input type="submit" value="Enviar" id="botao">

Código do create table..base de dados 'elaine', nome da tabela 'mensagens'


Database: `elaine`
--

-- --------------------------------------------------------

--
-- Estrutura da tabela `mensagens`
--

CREATE TABLE `mensagens` (
  `id` int(11) NOT NULL,
  `nome` varchar(255) NOT NULL,
  `email` varchar(50) NOT NULL,
  `telefone` decimal(10,2) NOT NULL,
  `mensagem` varchar(1000) NOT NULL
)

Código do teste.php


<?php 


    $nome = $_POST["nome"] ;
    $telefone = $_POST["telefone"] ;
    $email = $_POST ["email"] ;
    $mensagem = $_POST["mensagem"] ;

    $conexao = mysqli_connect('localhost', 'root', '', 'elaine') ;

    $query ="insert into Mensagens (nome, email, telefone, mensagem) values('{$nome}', '{$email}',{$telefone}, '{$mensagem}')" ;

    mysqli_query ($conexao, $query) ;



    if (mysqli_query($conexao, $query)) {

    ?> <p> Sucesso </p> <?php
                                        }

    else { 

        ?> <p> Sem sucesso </p> <?php

        }




    ?>

Sendo que sempre retorna sem sucesso..não aparece mensagem de erro, porém os dados não são inseridos !

Se alguém puder ajudar, obrigado !

5 respostas

Pelo que eu vi no seu código, ao criar a tabela você chamou ela de "mensagens", mas, na query, você escreveu "Mensagens". Padronize o nome da tabela na query, deixe o nome em minúsculo. Outro ponto é o ID, faça ele autoincrement.

As variáveis estão OK no formulário e na página que vai fazer o insert.

Eu vejo um erro apenas no campo do telefone, se alguém por acidente colocar caracteres não numéricos vai dar problema, teria que de alguma forma travar o campo no formulário para aceitar somente números, ou mudar o tipo de dados no banco de dados para texto.

Fala aí Ednaldo, blz?

Notei que no conteúdo da variável $query o nome da tabela que você está inserindo está com a primeira letra em maiúscula.

$query ="insert into Mensagens (nome, email, telefone, mensagem) values('{$nome}', '{$email}',{$telefone}, '{$mensagem}')" ;

Porém na declaração que você utilizou para criar a tabela o nome da mesma está em minúsculo.

CREATE TABLE `mensagens` (
  `id` int(11) NOT NULL,
  `nome` varchar(255) NOT NULL,
  `email` varchar(50) NOT NULL,
  `telefone` decimal(10,2) NOT NULL,
  `mensagem` varchar(1000) NOT NULL
)

Tente alterar o nome da tabela para minúsculo no conteúdo da sua variável $query.

Espero ter ajudado!

Daniel e Fernando, boa tarde

Coloquei como mensagens com M minúsculo na $query também e por enquanto ainda não funcionou..continua retornando sem sucesso

Pessoal..inseri um "or die" no código e localizei o erro


Out of range value for column 'telefone' at row 1

Eu recomendaria você deixar o seu campo telefone como varchar, assim os visitantes poderão digitar o telefone assim (11) 1111-1111 ou assim 1111-1111. Se você deixar como numero e alguém tentar digitar da forma como eu te mostrei vai dar erro.