Ir ao conteúdo
  • Cadastre-se
Marquin Ferreira

ERRO - PHP

Recommended Posts

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.

Compartilhar este post


Link para o post
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

Compartilhar este post


Link para o post
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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

@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".

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×