Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

  • 0
Kerollin

Banco de dados e php

Pergunta

Gente, eu tive que criar um site para um trabalho de escola e criar um formulário cujo os dados vão para o banco de dados, eu fiz tudo certinho, o banco de dados ta conectado ao php do site, e as informações que eu coloco para preencher o formulário aparecem no bd normalmente, porém quando eu inicio a página, antes de inserir as informações, a página mostra que tem erro no código (porque os campos estão vazios), o ideal seria fazer uma condição enquanto os campos estiverem vazios né? Mas não faço a minima ideia de como, já tentei várias formas que vi por aqui..

Na página aparece assim: Notice: Undefined index: Nome in C:\xampp\htdocs\Site\PagContato.php on line 7 (junto com as outras linhas de dado, como email, ddd, telefone e etc)
                                               Erro:SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'Nome' cannot be null

 

Meu código ta assim

 

<?php
    $nome_bd ='teste';
    $usuario_bd = 'root';
    $senha_bd = '';
    $host_bd = 'localhost';

 

    $Nome = $_POST ['Nome'];
    $Email = $_POST ['Email'];
    $DDD = $_POST ['DDD'];
    $Telefone = $_POST ['Telefone'];
    $Assunto = $_POST ['Assunto'];
    $Mensagem = $_POST ['Mensagem'];
    include 'Template.php';
    include 'Conexao.php';
    $conexao = new Conexao();
    $template = new Template();
    

        try{
            $conexao = new PDO("mysql:host=$host_bd;dbname=$nome_bd", $usuario_bd,$senha_bd);
            $conexao->setAttribute (PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            $stmt = $conexao -> prepare(
                        'INSERT INTO contato(Nome, Email, DDD, Telefone, Assunto, Mensagem) VALUES (:Nome, :Email, :DDD, :Telefone, :Assunto, :Mensagem)'
                        );
            $stmt->bindValue(":Nome", $Nome);
            $stmt->bindValue(":Email", $Email);
            $stmt->bindValue(":DDD", $DDD);
            $stmt->bindValue(":Telefone", $Telefone);
            $stmt->bindValue(":Assunto", $Assunto);
            $stmt->bindValue(":Mensagem", $Mensagem);
            $stmt->execute();
            echo $stmt->rowCount()."linha(s) inseridas";
        }catch(PDOException $e){
            echo "Erro:".$e->getMessage();
        }
    
        

    echo $template->topo();
?>

 

<form method = "post" action = "PagContato.php" id = "contato" form id = "teste">
        
        <fieldset>
            <legend> Contato </legend>
                <label for = "Nome">
                    Nome: (<span> * </span>)
                </label>
                
                <input data-progression type = "text"  name = "Nome" id = "Nome" value = "" placeholder = "" />
                <label for = "Email">
                    E-mail: (<span> * </span>)
                </label>
                <input data-progression type = "text" name = "Email" id = "Email" value = "" placeholder = "" />
                <article id = "ddd-telefone">
                    <p class = "um">
                        <label for = "DDD">
                            DDD:
                        </label>
                        <input data-progression type = "text" name = "DDD" id = "DDD" value = "" placeholder = "" />
                    </p>
                    <p class = "dois">
                        <label for = "Telefone">
                            Telefone:
                        </label>
                        <input data-progression type = "text" name = "Telefone" id = "Telefone" value = "" placeholder = ""/>
                </article>
                    <label for = "Assunto">
                        Assunto: (<span> * </span>)
                    </label>
                <select name = "Assunto" id = "Assunto">
                    <option value = "">
                        Escolha um assunto
                    </option>
                    <option value = "Descrição do produto">
                        Descrição do produto
                    </option>
                    <option value = "Como funciona o produto">
                        Como funciona o produto
                    </option>
                    <option value = "Manutenção">
                        Manutenção
                    </option>
                    <option value = "Outros">
                        Outros
                    </option>
                </select>
                    <label for = "Mensagem">
                        Mensagem: (<span> * </span>)
                    </label>
                    <textarea name = "Mensagem" id = "Mensagem" cols = "" rows = ""></textarea>
                    <input data-progression type = "submit" name = "enviar" id = "enviar" value = "Enviar"/>
        </fieldset>

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

2 respostas a esta questão

Recommended Posts

O alerta é porque o está vazio ou o valor é nulo no índice da super-global $_POST

 

Então levantarei uma dúvida:

Esse é um único arquivo, ao qual você insere os dados e o mesmo registra?

Porque se form está requisitando a validação em outro arquivo PagContato.php

action = "PagContato.php" 

No caso é nesse arquivo que as informações de registro deve ficar.

 

Como você disse que era um trabalho escolar seu professor deveria ter lhe falado sobre verificar valores antes de validar-los.

Spoiler

if (!isset($_POST['Nome'])) {
    echo "Nome não foi definido";
} else if (!isset($_POST['Email'])) {
    echo "Email não foi definido";
} else if (isset($_POST['DDD'])) {
    echo "DDD não foi definido";
} else if (!isset($_POST['Telefone'])) {
    echo "Telefone não foi definido";
} else if (!isset($_POST['Assunto'])) {
    echo "Assunto não foi definido";
} else if (!isset($_POST['Mensagem'])) {
    echo "Mensagem não foi definida";
} else {
   // Execução do código dentro desse laço.....
}

 

 

Lógico isso que coloquei acima não é uma validação é apenas uma checagem se os valores realmente existem.

 

Detalhe, não use $_POST ['VALOR'] use assim: $_POST['VALOR'], sem dar espaço entre a índice da array e seu valor.

 

E se for fazer a validação do post no mesmo arquivo que contém o formulário use lógica de exitência como mostrei acima:

Spoiler

<?php
if (isset($_POST)) {
    echo "Recebido POST: {$_POST['inputTXT']}";
}
?>

<form method="POST">
    <input type="text" maxlength="30" name="inputTXT" />
    <button type="submit"> Enviar </button>
</form>

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Omar~, É um único arquivo onde eu requisito e insiro os dados, tinha feito a condição assim:

if(isset($_POST['Enviar'])){
        if(isset($_POST["submit"]) || empty($_POST['Nome']) || empty($_POST['Email']) || empty($_POST['DDD']) || empty($_POST['Telefone']) || empty($_POST['Assunto']) || empty($_POST['Mensagem'])){
            $error = true;
        }
        else{
            $Nome = $_POST['Nome'];
            $Email = $_POST['Email'];
            $DDD = $_POST['DDD'];
            $Telefone = $_POST['Telefone'];
            $Assunto = $_POST['Assunto'];
            $Mensagem = $_POST['Mensagem'];
        }
    }

Mas aí aparece o erro "Erro:SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'Nome' cannot be null"

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por landerbadi
      Boa tarde pessoal. Estou tentado fazer uma consulta no banco de dados porém estou tendo dificuldades. Tenho uma tabela chamada "itens" com os seguintes campos: id, item, ativo. Nela tem cadastrado vários itens. No campo ativo eu coloco a letra "S" para informar que este item está ativo no sistema. Por exemplo: 1, casa, S 2, mesa, S 3, cama, S 4, moto S 5, rádio O quinto registro "radio" não está ativo no sistema pois não tem um "S" no campo ativo. E outra tabela chamada "produtos" com os seguintes campos (id, item1, item2, item3) com os seguintes registros: 1, casa, mesa, moto 2, mesa, casa, cama 3, rádio, cama, mesa Eu preciso fazer uma busca na tabela produtos da seguinte maneira: Eu escolho um registro na tabela "itens", por exemplo "mesa". Preciso fazer com que o php me liste todos os registros da tabela "produtos" que contenham a palavra "mesa". Até aqui tudo bem eu consigo listar. Estou fazendo assim: <?php $item = "mesa" $sql = mysqli_query($conn, "SELECT * FROM produtos WHERE item1 LIKE '$item' OR item2 LIKE '$item' OR item3 LIKE '$item' LIMIT 10"); while($aux = mysqli_fetch_assoc($sql)) { $id = $aux["id"]; $item1 = $aux["item1"]; $item2 = $aux["item2"]; $item3 = $aux["item3"]; echo $id . " - " . $item1 . ", " . $item2 . ", " $item3 . "<br>"; } ?> O problema é que está listando todos os registros que contém o item mesa. Eu preciso que o php verifique os demais item e me liste somente os registro em que todos os registros estejam ativos no sistema. No exemplo acima ele não deveria listar o registro 3. pois nesse registro contém o item "radio" e este item não está ativo no sistema. Ou seja, o registro "radio" na tabela itens não possui um "S" na coluna "ativo". Alguém sabe como resolver isso?
    • Por ILR master
      Fala galera.
      Espero que todos estejam bem.
      Seguinte: Tenho um arquivo xml onde alguns campos estão com : (dois pontos), como o exemplo abaixo:
       
      <item>
      <title>
      d sa dsad sad sadasdas
      </title>
      <link>
      dsadas dsa sad asd as dsada
      </link>
      <pubDate>sadasdasdsa as</pubDate>
      <dc:creator>
      d sad sad sa ad as das
      </dc:creator>
      </item>
       
      Meu código:
       
      $link = "noticias.xml"; 
      $xml = simplexml_load_file($link); 
      foreach($xml -> channel as $ite) {     
           $titulo = $ite -> item->title;
           $urltitulo = $ite -> item->link;
           print $urltitulo = $ite -> item->dc:creator;
      } //fim do foreach
      ?>
       
      Esse campo dc:creator eu não consigo ler. Como faço?
       
      Agradeço quem puder me ajudar.
       
      Abs
       
       
    • Por First
      Olá a todos!
       
      Eu estou criando um sistema do zero mas estou encontnrando algumas dificuldades e não estou sabendo resolver, então vim recorrer ajuda de vocês.
      Aqui está todo o meu código: https://github.com/PauloJagata/aprendizado/
       
      Eu fiz um sistema de rotas mas só mostra o conteúdo da '/' não sei porque, quando eu tento acessar o register nada muda.
      E eu também quero que se não estiver liberado na rota mostra o erro de 404, mas quando eu tento acessar um link inválido, nada acontece.
      Alguém pode me ajudar com isso? E se tiver algumas sugestão para melhoria do código também estou aceitando.
       
       
      Desde já, obrigado.
    • Por landerbadi
      Olá pessoal, boa tarde
       
      Tenho uma tabela chamada "produtos" com os seguintes campos (id, produto) e outra tabela chamada "itens" com os seguintes campos (id, prod_01, prod_02, prod_03, prod_04).
       
      Na tabela produtos eu tenho cadastrado os seguintes produtos: laranja, maçã, uva, goiaba, arroz, feijão, macarrão, etc.
       
      Na tabela itens eu tenho cadastrado os itens da seguinte maneira:
       
      1, laranja, uva, arroz, feijão;
      2, maçã, macarrão, goiaba, uva;
      3, arroz, feijão, maçã, azeite
       
      Meu problema é o seguinte: 
      Eu escolho um produto da tabela "produtos", por exemplo "uva".  Preciso fazer uma consulta na tabela "itens" para ser listado todos os registros que contenham o produto "uva" e que todos os demais produtos estejam cadastrados na tabela "produtos".
       
      No exemplo acima seria listado apenas dois registros, pois o terceiro registro não contém o produto "uva". 
       
      Alguém pode me ajudar? Pois estou quebrando a cabeça a vários dias e não consigo achar uma solução.
    • Por landerbadi
      Boa tarde pessoal. Estou tentado fazer uma consulta no banco de dados porém estou tendo dificuldades. Tenho uma tabela chamada "itens" com os seguintes campos: id, item, plural, ativo. Nela tem cadastrado vários itens e seu respectivo plural. No campo ativo eu coloco a letra "S" para informar que esta palavra está ativa no sistema. Por exemplo: 1, casa, casas, S 2, mesa, mesas, S 3, cama, camas, S 4, moto, motos, S 5, rádio, rádios O quinto registro "radio" não está ativo no sistema pois não tem um "S" no campo ativo. E outra tabela chamada "variações" com os seguintes campos (id, item1, item2, item3) com os seguintes registros: 1, casa, camas, moto 2, mesas, casas, radio 3, rádio, cama, mesa Eu preciso fazer uma busca na tabela variações da seguinte maneira: Eu escolho um registro na tabela "itens", por exemplo "casa". Preciso fazer com que o php me liste todos os registros da tabela "variações" que contenham a palavra "casa". Porém se tiver algum registro com a palavra "casas" também tem que ser listado. Neste caso ele irá encontrar dois registros. Agora eu preciso que o php verifique os demais itens e faça a listagem apenas dos item que estão ativos (que contenham um "S" no campo ativo. Neste caso ele irá encontrar apenas um registro, pois o segundo registro contém a palavra "rádio". E "rádio" não está ativo na tabela itens. Como faço isso?
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.