erro na inserção no banco de dados

1. erro na inserção no banco de dados

Reginaldo de Matias
saitam

(usa Slackware)

Enviado em 25/03/2008 - 17:17h

Sou iniciante em PHP, e já tentei de tudo para consertar esse erro de inserção no banco do presente script.
<html>
<head>
<title> Cadastro </title>
</head>
<body>
<center>
<form action="cadastro.php" method="POST">
<p> Nome: <input type="text" name="nome" size="20"> <br><br>

E-mail: <input type="text" name="email" size="20"> <br><br>

Fone: <input type="text" name="fone"> <br><br>
</p>
<p> <input type="submit" value="Cadastrar" name="enviar">
<input type="reset" value="Limpar"> </p>

</form>
</center>
<?php
include "mysqlconecta.php";
$nome = $_POST["nome"];
$email = $_POST["email"];
$fone = $_POST["fone"];

if(empty($_POST["nome"]) OR empty($_POST["email"]) OR empty($_POST["fone"]))
{
echo "Erro! Existe campos em branco, que devem ser preenchidos.";
exit;
}

$sql = "INSERT INTO pessoa VALUES";
$sql .= "('$nome', '$email', '$fone')";
$resultado = mysql_query($sql);
if(! $resultado)
{
die("Invalid query: '. mysql_error());
}
else
echo "Pessoa cadastro com sucesso!";
mysql_close($conexao);
?>
</body>
</html>

A tabela é:
CREATE TABLE pessoa(
codigo int NOT NULL AUTO_INCREMENT,
nome varchar(80) NOT NULL,
email varchar(30) NOT NULL,
fone varchar(11) NOT NULL,
primary key (codigo)
);

ERRO: Parse error: parse error, unexpected T_STRING

Aproveitando veja também esse script de busca por nome.
<html>
<head>
<title> Pesquisa </title>
</head>
<body>
<center>
<form action="consulta.php" method="POST">
<p> Digite um nome para pesquisa: <input type="text" name="pesqnome" size="20"> <br><br>

<p> <input type="submit" value="Pesquisar" name="enviar">
</form>
</center>
<?php
include "mysqlconecta.php";
$pesqnome = $_POST["pesqnome"];
$sql = "SELECT * FROM pessoa WHER nome = $pesqnome";
$resultado = mysql_query($sql);
$nome = mysql_result($resultado, "nome");
$email = mysql_result($resultado, "email");
$fone = mysql_result($resultado, "fone");
mysql_close($conexao);
if(! $resultado)
{
echo "Erro!!! Nome não encontrado!";
exit;
}
else
{
echo "Nome: $nome";
echo "E-mail: $email";
echo "Fone: $fone";
exit;
}
?>

Grato pela atenção
Reginaldo


  


2. tenta mudar

João Marcos Menezes
stremer

(usa Arch Linux)

Enviado em 25/03/2008 - 18:22h

sql = "INSERT INTO pessoa VALUES";
para:
$sql = "INSERT INTO pessoa(nome, email, fone) VALUES";

Isso pq vc possui chave na tabela se especificar values direto sem o nome dos campos ele não sabe onde você quer colocar os valores e pela ordem falta uma coluna. Porém para este caso o erro deveria ser outro.

Foi a unica coisa errada que achei, mas não rodei seu script para ver se tem outro problema.


3. Re: erro na inserção no banco de dados

Reginaldo de Matias
saitam

(usa Slackware)

Enviado em 26/03/2008 - 11:45h

Outro caso agora
<html>
<head>
<title> Pesquisa </title>
</head>
<body>
<center>
<form action="consulta.php" method="POST">
<p> Digite um nome para pesquisa: <input type="text" name="pesqnome" size="20"> <br><br>

<p> <input type="submit" value="Pesquisar" name="enviar">
</form>
</center>
<?php
include "mysqlconecta.php";
$pesqnome = $_POST["pesqnome"];
$sql = "SELECT * FROM pessoa WHER nome = $pesqnome";
$resultado = mysql_query($sql) or die(mysql_error());
$nome = mysql_result($resultado, "nome");
$email = mysql_result($resultado, "email");
$fone = mysql_result($resultado, "fone");
mysql_close($conexao);
if(! $resultado)
{
echo "Erro!!! Nome não encontrado!";
exit;
}
else
{
echo "Nome: $nome";
echo "E-mail: $email";
echo "Fone: $fone";
exit;
}
?>


executando o comando $resultado = mysql_query($sql) or die(mysql_error());
mostra que a sintaxe do SQL esta errada.
$sql = "SELECT * FROM pessoa WHERE nome = $pesqnome";
Sendo que a lógica é verificar se o campo nome é igual o o nome digitado na pesquisa.

Qual seria então a sintaxe correta para esse caso?

Grato pela atenção
Reginaldo


4. Re: erro na inserção no banco de dados

Edvaldo Silva de Almeida Júnior
EdDeAlmeida

(usa Debian)

Enviado em 26/03/2008 - 11:56h

Tenta colocar o argumento da consulta entre aspas simples: nome='$variavel'



5. exatamente isso

João Marcos Menezes
stremer

(usa Arch Linux)

Enviado em 26/03/2008 - 12:21h

pensei que a parte de consulta estivesse funcionando e nem prestei atenção.
Só colocar o conteúdo entre aspa simples e pronto.
Só tome cuidado com 2 coisas neste caso:
1) Se você digitar aspa simples no text box vai "DAR PAU", você precisaria tratar antes a aspa simples e toda aspa simples do texto ser trocada por 2 aspas simples.
2) Você esta abrindo portas para SQL INJECTION onde pode possibilitar alguem de extrair outras informações da base de dados através desta consulta.


6. Re: erro na inserção no banco de dados

Reginaldo de Matias
saitam

(usa Slackware)

Enviado em 26/03/2008 - 13:04h

poderia me explicar com mais detalhes, e mostrar o script corrigido, e sobre a segurança principalmente, como ficaria o script em php com mysql seguro?



7. Re: erro na inserção no banco de dados

João Marcos Menezes
stremer

(usa Arch Linux)

Enviado em 26/03/2008 - 14:39h

Ficaria assim:

$sql = sprintf("SELECT * FROM pessoa WHER nome = '%s'", mysql_real_escape_string($nome));
$resultado = mysql_query($sql);

É o recomendado inclusive pela documentação do php, pois ao utilizar mysql_real_escape_string, você evita ter de lidar com as aspas e evita o injection por este meio, que no caso da string poderia basicamente ser ' or '' = '. Sendo que da muito para exmplorar a partir disso, principalmente se tiver algum acesso ao código fonte.

Existem outros métodos tbem, mas para você que é iniciante pode começar por este. No caso das funções do oracle não lembro exatamente, mas tem um jeito de colocar ? nos parâmetros e depois substituir, como é no java. Estou meio enferrujado em programação PHP pois parei de trabalhar com PHP ja vão fazer 2 anos logo mais.



8. opa

João Marcos Menezes
stremer

(usa Arch Linux)

Enviado em 26/03/2008 - 14:40h

sql = sprintf("SELECT * FROM pessoa WHER nome = '%s'", mysql_real_escape_string($pesqnome));
$resultado = mysql_query($sql);

um pequeno errinho ($nome é na verdade $pesqnome) no seu código. Como faz falta ler os posts na mesma página ao se postar alguma coisa aqui.


9. Re: erro na inserção no banco de dados

Reginaldo de Matias
saitam

(usa Slackware)

Enviado em 03/04/2008 - 09:25h

Ok, to querendo fazer uma pequena alteração no script de cadastro (inserção no bd)
Veja se a lógica que estou fazendo esta correta:
Após a verificação dos dados de entrada, faço uma consulta no bd para verificar se o campo digitado já existe no bd, em caso afirmativo mostra a msg NOME JÁ EXISTE!!! caso contrário insere os dados no bd!

Existe outro jeito melhor mais eficiente de fazer, pois essa minha lógica acho que deve consumir muito processamento no servidor, concorda? Imagina 500 registros...
Por isso peço se essa lógica esta correta, ou se tem outro jeito mais eficiente para fazer a mesma coisa.
Lembrando que o objetivo é não permitir inserir o mesmo nome no bd.
Caso exista outro jeito melhor e mais eficiente, favor explicar no script.

Grato pela atenção.


10. então

João Marcos Menezes
stremer

(usa Arch Linux)

Enviado em 03/04/2008 - 10:34h

não é errado usar o nome como chave, caso a regra do seu programa seja "não permitir 2 nomes iguais". E isto não é problema para o banco de dados. Oque você tem de observar é que dependendo do número de registros pode precisar criar um indice na tabela pessoa no campo nome. Consulte a documentação do mysql sobre indices para maiores detalhes.
OBS: Nem sempre o indice é necessário. Em tabelas pequenas um FTS (Full table scan que percorre todos os registros) as vezes é mais rapido do que utilizar um indice. Se sua previsão é de 500 registros acredito que o indice não faça diferença nenhuma agora se vai passar de 1000 registros pode ser que ja comece a fazer. Somente fazendo testes de performance para saber o momento exato que o indice melhora ou piora.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts