Dados de formulario PHP para tabela MySQL

Iniciado por maurov, 31 de Janeiro de 2011, 09:45

tópico anterior - próximo tópico

maurov

Fiz
a) um formulário em html para alimentar um banco de dados.

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html><head><meta content="text/html; charset=ISO-8859-1" http-equiv="content-type"><title>Formulário para inserir no BD</title></head><body>
<form method="post" action="inserindo.php" name="Mural"><input name="nome"><br>
  <textarea cols="30" rows="10" name="mensagem"></textarea><br>
  <input name="Submit" value="Inserir no banco dados" type="submit"><br>
</form>
</body></html>

b) um script que conecta no DB

<?php
$hostname = 'localhost';
$username = 'root';
$senha = 'senhadomysql';
$banco = 'teste1';
$db = mysql_connect($hostname, $username, $senha);
mysql_select_db($banco, $db);
?>

c) e um script php para inserir os dados no DB

<html>
<head>
<title>Inserir no BD</title>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
</head>
<body>
<?
require("conectdb.php");
$sqlinsert = "INSERT INTO tabela1 (id_mensagem, nome, mensagem)
VALUES ('' , '$nome', '$mensagem')";
mysql_query($sqlinsert) or die ("Não foi possível inserir");
?>
</body>
</html>

Todos os 3 estão no /var/www. O problema é que só vai para o MySQL o primeiro campo, em branco, que é o ID que tem auto-increment. Os dados digitados não vão.
Alguém saberia me dizer onde está a falha? Pensei em colocar um echo em alguma parte, mas não sei bem como fazer.
[ ]s

agente100gelo

Troque:
VALUES ('' , '$nome', '$mensagem')";

Por:
VALUES ('' , '$_POST[nome]', '$_POST[mensagem]')";

Por padrão o PHP não aceita variáveis globais (e é uma boa prática isso).
Advogado e analista de sistema cearense.
Twitter: @glaydson

maurov

Caramba :)
Era isso mesmo.
Vou ver se acho pelo forum alguma literatura sobre esta "boa prática".
Valeu!

agente100gelo

Advogado e analista de sistema cearense.
Twitter: @glaydson

maurov

Precisei reinstalar a minha máquina (LAMP com phpmyadmin) e os referidos scripts não funcionam mais. Vem a mensagem do die "Não foi possível inserir".
Pelo phpmyadmin consigo inserir dados manualmente.
Para acessar, abro o navegador e digito 192.168.1.100/conectdb.php (creio que executa. Ele deixa a tela em branco), depois 192.168.1.100/form.html (ele abre a tela para inserção de dados, permite a digitação, e ao clicar no botão inserir recebo a mensagem do "die" do inserindo.php.
:'(

zekkerj

Mude seu "die" pra incluir o erro do MySQL.

Algo como:

... or die( "Não foi possível inserir" . mysql_error() );

Assim vc vai poder saber o que aconteceu.
Pesquise antes de perguntar, sua dúvida pode já ter sido respondida.
Não respondo dúvidas por MP, coloque sua dúvida no fórum onde ela pode ser pesquisada pelos seus colegas!
Não venha ao fórum apenas para perguntar. Se você sabe a resposta de um problema, porque não ajudar seu colega? ;D

maurov

Access denied for user 'www-data'@'localhost' (using password: NO)

zekkerj

Será que vc está abrindo o banco corretamente? Verifica se teu script contém o código necessário pra abrir o banco...
Pesquise antes de perguntar, sua dúvida pode já ter sido respondida.
Não respondo dúvidas por MP, coloque sua dúvida no fórum onde ela pode ser pesquisada pelos seus colegas!
Não venha ao fórum apenas para perguntar. Se você sabe a resposta de um problema, porque não ajudar seu colega? ;D

maurov

Simplesmente executo-o na janela do navegador que vai abrir a tela para inserir dados por 192.168.1.100/conectdb.php
Citar<?php
$hostname = 'localhost';
$username = 'root';
$senha = 'minhasenha';
/*Aqui eh o banco, nao a tabela*/
$banco = 'meubanco';
$db = mysql_connect($hostname, $username, $senha);
mysql_select_db($banco, $db);
?>
Depois digito a URL 192.168.1.100/form.html que tem action no form para inserindo.php
Citar<html>
<head>
<title>Inserir no BD</title>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
</head>
<body>
<?
/*Aqui tem que ser o nome exato do arquivo de conexao ao DB*/
require("conectdb.php");
/*Aqui e a tabela, nao o banco*/
$sqlinsert = "INSERT INTO tabela1 (id_mensagem, nome, mensagem)
VALUES ('' , '$_POST[nome]', '$_POST[mensagem]')";
mysql_query($sqlinsert) or die ("Não foi possível inserir". mysql_error());
?>
</body>
</html>

zekkerj

Vc conecta em um script e acessa em outro? Acho que isso não deveria funcionar... junte tudo num script só.
Pesquise antes de perguntar, sua dúvida pode já ter sido respondida.
Não respondo dúvidas por MP, coloque sua dúvida no fórum onde ela pode ser pesquisada pelos seus colegas!
Não venha ao fórum apenas para perguntar. Se você sabe a resposta de um problema, porque não ajudar seu colega? ;D

maurov

Achei que o require fazia isso, para não precisar fazer uma conexão a cada inserção.
Sei que existe um session start, que depois preciso aprender também.
Mas agora estou trancado neste erro, que com a dica do die (mysql_error()) parece estar mais perto de ser identificado.

valdineysr

Citação de: maurov online 31 de Janeiro de 2011, 09:45
Fiz
a) um formulário em html para alimentar um banco de dados.

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html><head><meta content="text/html; charset=ISO-8859-1" http-equiv="content-type"><title>Formulário para inserir no BD</title></head><body>
<form method="post" action="inserindo.php" name="Mural"><input name="nome"><br>
  <textarea cols="30" rows="10" name="mensagem"></textarea><br>
  <input name="Submit" value="Inserir no banco dados" type="submit"><br>
</form>
</body></html>

b) um script que conecta no DB

<?php
$hostname = 'localhost';
$username = 'root';
$senha = 'senhadomysql';
$banco = 'teste1';
$db = mysql_connect($hostname, $username, $senha);
mysql_select_db($banco, $db);
?>

c) e um script php para inserir os dados no DB

<html>
<head>
<title>Inserir no BD</title>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
</head>
<body>
<?
require("conectdb.php");
$sqlinsert = "INSERT INTO tabela1 (id_mensagem, nome, mensagem)
VALUES ('' , '$nome', '$mensagem')";
mysql_query($sqlinsert) or die ("Não foi possível inserir");
?>
</body>
</html>

Todos os 3 estão no /var/www. O problema é que só vai para o MySQL o primeiro campo, em branco, que é o ID que tem auto-increment. Os dados digitados não vão.
Alguém saberia me dizer onde está a falha? Pensei em colocar um echo em alguma parte, mas não sei bem como fazer.
[ ]s

joga esse teu código no bluefish que tu vai encontrar uns errinhos de sintax lá ok?
Valdiney Ribeiro
---------------------------------
Analista de Sistemas

agente100gelo

Citação de: maurov online 18 de Maio de 2011, 14:32
Access denied for user 'www-data'@'localhost' (using password: NO)

Dá uma olhada neste teu include. Não tá pegando nada das configurações do banco.
Advogado e analista de sistema cearense.
Twitter: @glaydson

maurov

Hehe, acredito!! Tentando por partes então.
Se eu abrir o navegador e digitar http://192.168.1.200/conectdb.php (esse arquivo está em /var/www)
Citar<?php
$hostname = 'localhost';
$username = 'root';
$senha = 'senhadomysql';
$banco = 'tabela1';
$db = mysql_connect($hostname, $username, $senha);
mysql_select_db($banco, $db);
?>
Tem como saber se ele "pegou" a conexão?

maurov