Ir ao conteúdo
  • Cadastre-se

Posts recomendados

Pessoal,

 

Estou com um problema de como resolver o erro em anexo:

 

Estou fazendo um cadastro simples de um cliente, quando clico no botão cadastrar da o erro.

 

Segue o código:

 

 

-----------------+cadastro.php+------------------------------------------------------

<!DOCTYPE html><html><head><meta charset="UTF-8" lang="PT-BR"><title>Cadastro de Cliente</title></head><body><h3>Casdastrar Cliente</h3><form name="cadastroCli" method="post" action="principal.php"><label>Nome:</label> <input id="name" name="name" required="true" type="text"/><br><label>CPF:</label> <input id="cpf" name="cpf" required="true" type="text"/><br><label>E-mail:</label> <input id="email" name="email" required="true" type="text"/><br><label>Situação:</label> <input id="sit" name="sit" required="true" type="text"/><br><label>Data de Nascimento:</label> <input id="dtNasc" name="dtNasc" required="true" type="date"/><br><label>Sexo:</label> <input id="sexo" name="sexo" required="true" type="text"/><br><br><input type="submit" value="Cadastrar"></form></body></html>
*-*-*-********-----------------------------------------------------------
 
------+principal.php+------
<!DOCTYPE html><html><head><title>Principal</title></head><body><?php  $host = 'localhost'$user = 'root'$pass = 'root'$banco = 'bco_cliente'$conexao = mysql_connect($host, $user, $pass) or die (mysql_error());mysql_select_db($banco) or die (mysql_error());?><?php $nome = $_POST['name'];$cpf = $_POST['cpf'];$email = $_POST['email'];$situacao = $_POST['sit'];$dt_nasc = $_POST['dtNasc'];$sexo = $_POST['sexo'];$sql = mysql_query("INSERT INTO clientes(nome, cpf, email, situacao, datanascimento, sexo) VALUES ('$nome', '$cpf', '$email', '$situacao', '$dt_nasc', '$sexo')")?></body></html>
-------------**-*-*-*-****-*------------------------------

post-759940-0-31569900-1432402426_thumb.

Link para o comentário
Compartilhar em outros sites

  • Moderador

@Marquin Ferreira

 

Aparentemente o erro está no arquivo principal.php... onde você não finalizou as variáveis(que recebe os dados do formulário e a consulta SQL) com o ponto e virgula " ; "   

 

Agora, recomendo você fazer o arquivo php que recebe os dados apenas com a tag do php.. sem o html.. visto que ele só é usado para processar e enviar ao banco. Além disso eu retiraria as credenciais e colocaria em um arquivo separado para não quer digitar sempre quando for fazer uma requisição ao banco. 

 

exemplo:

 

Conexao.php

<?php   $host = 'localhost';   $user = 'root';   $pass = 'root';   $banco = 'bco_cliente';   $conexao = mysql_connect($host, $user, $pass) or die (mysql_error());   mysql_select_db($banco) or die (mysql_error());

Principal.php

<?php   include 'conexao.php';$nome = $_POST['name'];$cpf = $_POST['cpf'];$email = $_POST['email'];$situacao = $_POST['sit'];$dt_nasc = $_POST['dtNasc'];$sexo = $_POST['sexo'];$sql = mysql_query("INSERT INTO clientes(nome, cpf, email, situacao, datanascimento, sexo) VALUES ('$nome', '$cpf', '$email', '$situacao', '$dt_nasc', '$sexo')");//testa se teve sucesso em cadastrarif($sql):  echo "Cadastrou!";else:  echo "Ih deu erro  ";endif; 

Algumas dicas:

Tente não ficar abrindo e fechando as tags do php dentro do mesmo arquivo;

Cogite começar a usar o mysqli, pois o mysql  já é obsoleto... além disso permite que você faça a conexao com o BD em apenas uma linha. 

exemplo:

<?php  $conexao = mysqli_connect("localhost", "usuario","senha", "nomeBancodeDados");

Então sempre que for fazer uma requisição usando o mysqli é adicionado a variável da conexao  como parâmetro da função query..

exemplo:

<?php   $consulta = mysqli_query($conexao,"SELECT....FROM tabela");

E uma última dica, que muitas pessoas costumam fazer, mas algumas consideram errado: Quando possível não feche a tag PHP.

Veja que não fechei a tag na correção do principal.php que postei.

Em um primeiro momento isso pode parecer uma prática errada e que ocasionará até mesmo erro na execução do script. Mas isso não é verdade.

Em arquivos que possuem apenas código PHP o fechamento da tag é opcional. Aliás, considero que nesses casos a TAG php não deve ser fechada, pois assim você evita a inserção acidental de uma quebra de linha na resposta PHP gerada.

 

Ou seja, no caso do arquivo principal.php que é só usada pelo php para inserir o dado no banco, é um bom caso de se não fechar.

 

agora quando você precisar mesclar o php com outras linguagens.. tipo javascript... ou incorporar no HTML.. aí você fecha as tags :)

 

Por hora é isso. Boa sorte

Link para o comentário
Compartilhar em outros sites

@Marquin Ferreira

 

Aparentemente o erro está no arquivo principal.php... onde você não finalizou as variáveis(que recebe os dados do formulário e a consulta SQL) com o ponto e virgula " ; "   

 

Agora, recomendo você fazer o arquivo php que recebe os dados apenas com a tag do php.. sem o html.. visto que ele só é usado para processar e enviar ao banco. Além disso eu retiraria as credenciais e colocaria em um arquivo separado para não quer digitar sempre quando for fazer uma requisição ao banco. 

 

exemplo:

 

Conexao.php

<?php   $host = 'localhost';   $user = 'root';   $pass = 'root';   $banco = 'bco_cliente';   $conexao = mysql_connect($host, $user, $pass) or die (mysql_error());   mysql_select_db($banco) or die (mysql_error());

Principal.php

<?php   include 'conexao.php';$nome = $_POST['name'];$cpf = $_POST['cpf'];$email = $_POST['email'];$situacao = $_POST['sit'];$dt_nasc = $_POST['dtNasc'];$sexo = $_POST['sexo'];$sql = mysql_query("INSERT INTO clientes(nome, cpf, email, situacao, datanascimento, sexo) VALUES ('$nome', '$cpf', '$email', '$situacao', '$dt_nasc', '$sexo')");//testa se teve sucesso em cadastrarif($sql):  echo "Cadastrou!";else:  echo "Ih deu erro  ";endif; 

Algumas dicas:

Tente não ficar abrindo e fechando as tags do php dentro do mesmo arquivo;

Cogite começar a usar o mysqli, pois o mysql  já é obsoleto... além disso permite que você faça a conexao com o BD em apenas uma linha. 

exemplo:

<?php  $conexao = mysqli_connect("localhost", "usuario","senha", "nomeBancodeDados");

Então sempre que for fazer uma requisição usando o mysqli é adicionado a variável da conexao  como parâmetro da função query..

exemplo:

<?php   $consulta = mysqli_query($conexao,"SELECT....FROM tabela");

E uma última dica, que muitas pessoas costumam fazer, mas algumas consideram errado: Quando possível não feche a tag PHP.

Veja que não fechei a tag na correção do principal.php que postei.

Em um primeiro momento isso pode parecer uma prática errada e que ocasionará até mesmo erro na execução do script. Mas isso não é verdade.

Em arquivos que possuem apenas código PHP o fechamento da tag é opcional. Aliás, considero que nesses casos a TAG php não deve ser fechada, pois assim você evita a inserção acidental de uma quebra de linha na resposta PHP gerada.

 

Ou seja, no caso do arquivo principal.php que é só usada pelo php para inserir o dado no banco, é um bom caso de se não fechar.

 

agora quando você precisar mesclar o php com outras linguagens.. tipo javascript... ou incorporar no HTML.. aí você fecha as tags :)

 

Por hora é isso. Boa sorte

 

@dif

 

Obrigado pelas a dicas, mas tentei usar sem fechar o php ele estava dando erro. Fechei as variáveis com o ponto e virgula, e criei a conexão separadamente.

Desculpe não tenho nenhuma familiaridade com php, estou fazendo o trabalho da faculdade, é uma coisa super simples, mas não sei fazer.. rsrs:)

 

Então o erro que apareceu agora é esse em anexo.

 

cadastro.php

 

<!DOCTYPE html><html><head><meta charset="UTF-8" lang="PT-BR"><title>Cadastro de Cliente</title></head><body><h3>Casdastrar Cliente</h3><form name="cadastroCli" method="post" action="principal.php"> <label>Nome:</label> <input id="name" name="name" required="true" type="text"/><br><label>CPF:</label> <input id="cpf" name="cpf" required="true" type="text"/><br><label>E-mail:</label> <input id="email" name="email" required="true" type="text"/><br><label>Situação:</label> <input id="sit" name="sit" required="true" type="text"/><br><label>Data de Nascimento:</label> <input id="dtNasc" name="dtNasc" required="true" type="date"/><br><label>Sexo:</label> <input id="sexo" name="sexo" required="true" type="text"/><br><br><input type="submit" value="Cadastrar"></form></body></html>
 
 
principal.php
<!DOCTYPE html><html><head><title>Principal</title></head><body><?phpinclude 'conexao.php';$nome = $_POST['name'];$cpf = $_POST['cpf'];$email = $_POST['email'];$situacao = $_POST['sit'];$dt_nasc = $_POST['dtNasc'];$sexo = $_POST['sexo'];$sql = mysql_query("INSERT INTO clientes(nome, cpf, email, situacao, datanascimento, sexo) VALUES ('$nome', '$cpf', '$email', '$situacao', '$dt_nasc', '$sexo')");if($sql):echo "Cadastrado com sucesso!";else:echo "Falha no cadastro!";endif?></body></html>
conexao.php
<?php $host = 'localhost';$user = 'root';$pass = 'root';$banco = 'bco_cliente';$conexao = mysql_connect($host, $user, $pass) or die (mysql_error());mysql_select_db($banco) or die (mysql_error());?>
Obrigado.

post-759940-0-91502800-1432412068_thumb.

Link para o comentário
Compartilhar em outros sites

  • Moderador

@Marquin Ferreira

Você alterou a senha padrão do root?

 

Geralmente o root é sem senha.

 

Recomendo que ao invés de utilizar o root, crie um usuário e uma senha.. já tive problemas com isso e resolvi desta forma.

 

Outra coisa, no bloco de IF -ELSE do principal.php

você não fechou o ponto e virgula final no "endif"

 

Uma breve explicação:

No php existe 3 meios de escrever o mesmo bloco de condicionais.

Modo normal, Modo alternativoatribuição condicional ternária ou apenas Operador ternário

 

Modo normal:

if(condição){  //faz algo }else{   //faz outra coisa}

Modo alternativo:

if(condição):   //faz algoelse:   //faz outra coisaendif;

atribuição condicional ternária:

echo $variavel = condição ? "faz algo" : "faz outra coisa";

O operador ternário é usado quando precisa-se fazer muitos blocos de condicionais em poucas linhas.

 

No caso, eu gosto de utilizar o modo alternativo.. é mais elegante, elimina o uso de delimitadores "{ }"  ótimo quando se tem uma cadeia de IF's dentro do outro... ou while dentro de outro..  facilitando a visualização.

Então podemos dizer que o ponto e virgula no final é como se fosse o delimitador chaves, mas utilizada apenas no final, ou seja,  após a palavra-chave  "endif".

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...