Ir para conteúdo

POWERED BY:

Arquivado

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

MoRbId_AnGeL

Erro ao inserir dados no MySQL

Recommended Posts

Não estou conseguindo inserir corretamente os dados que quero num BD. Faz pouco tempo que estudo PHP e MySQL mas até agora todas as outras tentativas que fiz funcionaram numa boa.Só que, quando eu tento inserir os dados na tabela aparece o seguinte erro:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SET ano = 2006, mes = 'jan', ' at line 3

O código que eu estou usando é esse:
<?php	$DbCnx = @mysql_connect('localhost', 'root', '') or	  die( '<p id="erro">Ocorreu um erro ao se conectar com o banco de dados. Chame o Daniel!</p>' );	mysql_select_db('controle', $DbCnx) or	  die('<p id="erro">Erro ao acessar a tabela solicitada. Chame o Daniel!</p>');	$Ano = $_GET['ano'];	$Id = $_GET['id'];	$Tipo = $_GET['tipo'];	$Result = @mysql_query("SELECT * FROM empresas WHERE id = $Id") or	  die('<p id="erro"> Erro ao executar pedido: ' . mysql_error() . '</p>');	//--------------------------	// Obtém dados empresariais.	//--------------------------	$Row = mysql_fetch_array($Result);	//------------------------------------------	// Se o botão "Salvar Controle" foi clicado,	// salva os dados no Banco de Dados.	//------------------------------------------	if (isset($_POST['salvacontrole'])) {	  $Mes	  = 'jan';	  $Cons	 = $_POST['cons-jan'];	  $Prev	 = $_POST['prev-jan'];	  $Total	= $_POST['total-jan'];	  $Pis	  = $_POST['pis-jan'];	  $PgPis	= $_POST['pg-pis-jan'];	  $Irpj	 = $_POST['irpj-jan'];	  $PgIrpj   = $_POST['pg-irpj-jan'];	  $Irrf	 = $_POST['irrf-jan'];	  $RetIrrf  = $_POST['ret-irrf-jan'];	  $Cofins   = $_POST['cofins-jan'];	  $PgCofins = $_POST['pg-cofins-jan'];	  $Csll	 = $_POST['csll-jan'];	  $PgCsll   = $_POST['pg-csll-jan'];	  $Issqn	= $_POST['issqn-jan'];	  $PgIssqn  = $_POST['pg-issqn-jan'];	  $Inss	 = $_POST['inss-jan'];	  $PgInss   = $_POST['pg-inss-jan'];	  $TotalImp = $_POST['totalimp-jan'];	  $Sql = "INSERT INTO				$id			  SET				ano	  = $Ano,				mes	  = '$Mes',				cons	 = $Cons,				prev	 = $Prev,				total	= $Total,				pis	  = $Pis,				pgpis	= '$PgPis',				irpj	 = $Irpj,				pgirpj   = '$PgÍrpj',				irrf	 = $Irrf,				retirrf  = '$RetIrrf',				cofins   = $Cofins,				pgcofins = '$PgCofins',				csll	 = $Csll,				pgcsll   = '$PgCsll',				issqn	= $Issqn,				pgissqn  = '$PgIssqn',				inss	 = $Inss,				pginss   = '$PgInss',				totalimp = $TotalImp";	  if (@mysql_query($Sql)) {		echo('<p> Controle Salvo com sucesso. </p>');	  } else {		echo('<p id="erro"> O seguinte erro foi encontrado: ' . mysql_error() . '</p>');	  }	}
Não sei se essa é a maneira certa de se inserir dados mas vocês podem notar que em algumas variaveis eu acrescento apóstrofo e em outras não. Faço isso pq aquelas sem apóstrofo são do tipo float e aquelas com o apóstrofo, são do tipo varchar.Alguma idéia do que pode estar errado?

Compartilhar este post


Link para o post
Compartilhar em outros sites

o seu erro está aqui

 

INSERT INTO				$idSET

esse $id ai pelo seu script não tá recebendo nenhum dado por isso que ele está dando erro.. cade a tabela que ele tem que se referenciar para grava os dados?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ele está recebendo o valor empresa1, que é o nome da tabela que eu estou usando. Eu passo o valor através de outra página usando GET. Ele está recebendo o valor aqui:

$Id = $_GET['id'];

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então você está fazendo errado pois a variavel ai está $Id e não $id são diferentes.. no php ele diferencia maiusculo de minusculo por isso que eu disse que você não seto um valor para o $id mais para o $Id sim :P ve ai

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não havia percebido. Maldito Pascal case-insensitive! XDMas mesmo assim continua dando erro...

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SET ano = 2006, mes = 'jan', ' at line 3

Será que pode ter alguma coisa a ver com o tipo das colunas?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mais um problema com o MySQL. Vocês já devem estar se cansando de mim, né? :P

Seguinte: estou inserindo os dados vindos de um form numa tabela. Até aí tudo bem, só que estou encontrando problemas na hora de atualizar a tabela.

Como essa tabela possui campos que variam com o tempo, estou tentando fazer um teste para que, ao invés de criar uma nova row, o script apenas atualize a tabela se o valor que eu quero já existir.

Tentei procurar por exemplos na internet mas acabei não encontrando o que queria. Então, decidi escrever eu mesmo o script. Só que, ele não funciona da maneira que eu quero.

Ele está inserindo uma nova row toda a vez que eu dou um sobmit.

 

O codigo que eu estou usando é esse:

<?php$DbCnx = @mysql_connect('localhost', 'root', '') or  die( '<p id="erro">Ocorreu um erro ao se conectar com o banco de dados. Chame o Daniel!</p>' );mysql_select_db('controle', $DbCnx) or  die('<p id="erro">Erro ao acessar a tabela solicitada. Chame o Daniel!</p>');$Ano	= $_GET['ano'];$Id	 = $_GET['id'];$Id2	= 'empresa';$Id2	.= $Id;$Tipo   = $_GET['tipo'];//--------------------------// Obtém dados empresariais.//--------------------------$Result = @mysql_query("SELECT * FROM empresas WHERE id = $Id") or  die('<p id="erro"> Erro ao executar pedido: ' . mysql_error() . '</p>');$Row = mysql_fetch_array($Result);//-------------------------------// Obtém valores para o controle.//-------------------------------$valores = @mysql_query("SELECT * FROM $Id2") or  die('<p id="erro"> Erro ao executar pedido: ' . mysql_error() . '</p>');$Row2 = mysql_fetch_array($valores);//------------------------------------------// Se o botão "Salvar Controle" foi clicado,// salva os dados no Banco de Dados.//------------------------------------------if (isset($_POST['salvacontrole'])) {  $Teste = 0;  $Mes	  = 'jan';  $Cons	 = $_POST['cons-jan'];  $Prev	 = $_POST['prev-jan'];  $Total	= $_POST['total-jan'];  $Pis	  = $_POST['pis-jan'];  $PgPis	= $_POST['pg-pis-jan'];  $Irpj	 = $_POST['irpj-jan'];  $PgIrpj   = $_POST['pg-irpj-jan'];  $Irrf	 = $_POST['irrf-jan'];  $RetIrrf  = $_POST['ret-irrf-jan'];  $Cofins   = $_POST['cofins-jan'];  $PgCofins = $_POST['pg-cofins-jan'];  $Csll	 = $_POST['csll-jan'];  $PgCsll   = $_POST['pg-csll-jan'];  $Issqn	= $_POST['issqn-jan'];  $PgIssqn  = $_POST['pg-issqn-jan'];  $Inss	 = $_POST['inss-jan'];  $PgInss   = $_POST['pg-inss-jan'];  $TotalImp = $_POST['totalimp-jan'];  if (@mysql_query("SELECT * FROM $Id2 WHERE mes = $Mes AND ano = $Ano")) {	$Teste = 1;  }  if ($Teste == 1) {	$Sql = "UPDATE			 $Id2		   SET			 ano	  = '$Ano',			 mes	  = '$Mes',			 cons	 = '$Cons',			 prev	 = '$Prev',			 total	= '$Total',			 pis	  = '$Pis',			 pgpis	= '$PgPis',			 irpj	 = '$Irpj',			 pgirpj   = '$PgIrpj',			 irrf	 = '$Irrf',			 retirrf  = '$RetIrrf',			 cofins   = '$Cofins',			 pgcofins = '$PgCofins',			 csll	 = '$Csll',			 pgcsll   = '$PgCsll',			 issqn	= '$Issqn',			 pgissqn  = '$PgIssqn',			 inss	 = '$Inss',			 pginss   = '$PgInss',			 totalimp = '$TotalImp'		   WHERE			 mes = '$Mes'		   AND			 ano = '$Ano'";  } elseif ($Teste == 0) {  $Sql = "INSERT INTO			$Id2		  SET			ano	  = '$Ano',			mes	  = '$Mes',			cons	 = '$Cons',			prev	 = '$Prev',			total	= '$Total',			pis	  = '$Pis',			pgpis	= '$PgPis',			irpj	 = '$Irpj',			pgirpj   = '$PgIrpj',			irrf	 = '$Irrf',			retirrf  = '$RetIrrf',			cofins   = '$Cofins',			pgcofins = '$PgCofins',			csll	 = '$Csll',			pgcsll   = '$PgCsll',			issqn	= '$Issqn',			pgissqn  = '$PgIssqn',			inss	 = '$Inss',			pginss   = '$PgInss',			totalimp = '$TotalImp'";  }  if (@mysql_query($Sql)) {	echo('<p> Controle Salvo com sucesso. </p>');  } else {	echo('<p id="erro"> O seguinte erro foi encontrado: ' . mysql_error() . '</p>');  }?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mudei e mesmo assim não funciona da maneira que eu quero. Ele está inserindo corretamente os valores vindos dos forms. O problema é que eu quero que, se já houver o mesmo mês e ano inseridos numa row, ele apenas dê um UPDATE. E isso o script não está fazendo, ele está inserindo uma nova row toda a vez.

Eu quero que ele faça o seguinte:

Salve os valores do form nas variáveis e compare para ver se já existe valores iguais numa row para o mês e o ano. Se existir, dê um UPDATE na row, senão, dê um INSERT.

Para ficar mais claro, aqui vai um exemplo:

 

Tabela $Id2

|--------------------------|

|id| ano |mes|cons|...|

|--------------------------|

|1 |2006|jan |xxxx|...|

 

(Sei que ela está meio porca mas acho que vai servir de exemplo. :P )

 

Quando eu digitar os valores dos campos ano e mes o script deve verificar se esses valores de ano e mes existem na tabela e, inserí-los caso eles não existam ou atualizá-los caso já exista essa row.

Portanto, baseando-se na tabela de exemplo, ficaria assim:

 

Se (ano = 2006) e (mes = jan) o script utilizaria UPDATE.

Se (ano = 2006) e (mes = fev) o script utilizaria INSERT.

 

O meu problema é que ele está sempre utilizando INSERT, mesmo quando o mês e o ano já existem em uma row da tabela.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tenta ai mudei algumas coisas mais veja que no inserte você tem que colocar mais coisa lá ;)

 

<?php$DbCnx = @mysql_connect('localhost', 'root', '') or die( '<p id="erro">Ocorreu um erro ao se conectar com o banco de dados. Chame o Daniel!</p>' );mysql_select_db('controle', $DbCnx) or die('<p id="erro">Erro ao acessar a tabela solicitada. Chame o Daniel!</p>');$Ano	= $_GET['ano'];$Id	 = $_GET['id'];$Id2	= 'empresa';$Id2	.= $Id;$Tipo   = $_GET['tipo'];//--------------------------// Obtém dados empresariais.//--------------------------$Result = mysql_query("SELECT * FROM empresas WHERE id = $Id") or  die('<p id="erro"> Erro ao executar pedido: ' . mysql_error() . '</p>');$Row = mysql_fetch_array($Result);//-------------------------------// Obtém valores para o controle.//-------------------------------$valores = mysql_query("SELECT * FROM $Id2") or  die('<p id="erro"> Erro ao executar pedido: ' . mysql_error() . '</p>');$Row2 = mysql_fetch_array($valores);//------------------------------------------// Se o botão "Salvar Controle" foi clicado,// salva os dados no Banco de Dados.//------------------------------------------if (isset($_POST['salvacontrole'])) {  $Teste = 0;  $Mes	  = 'jan';  $Cons	 = $_POST['cons-jan'];  $Prev	 = $_POST['prev-jan'];  $Total	= $_POST['total-jan'];  $Pis	  = $_POST['pis-jan'];  $PgPis	= $_POST['pg-pis-jan'];  $Irpj	 = $_POST['irpj-jan'];  $PgIrpj   = $_POST['pg-irpj-jan'];  $Irrf	 = $_POST['irrf-jan'];  $RetIrrf  = $_POST['ret-irrf-jan'];  $Cofins   = $_POST['cofins-jan'];  $PgCofins = $_POST['pg-cofins-jan'];  $Csll	 = $_POST['csll-jan'];  $PgCsll   = $_POST['pg-csll-jan'];  $Issqn	= $_POST['issqn-jan'];  $PgIssqn  = $_POST['pg-issqn-jan'];  $Inss	 = $_POST['inss-jan'];  $PgInss   = $_POST['pg-inss-jan'];  $TotalImp = $_POST['totalimp-jan'];  $sql_verifica = mysql_query("SELECT * FROM $Id2 WHERE mes = $Mes AND ano = $Ano");	  if (mysql_fetch_array($sql_verifica) > 1) {	$Sql = "update			 $Id2		   set			 ano	  = '$Ano',			 mes	  = '$Mes',			 cons	 = '$Cons',			 prev	 = '$Prev',			 total	= '$Total',			 pis	  = '$Pis',			 pgpis	= '$PgPis',			 irpj	 = '$Irpj',			 pgirpj   = '$PgIrpj',			 irrf	 = '$Irrf',			 retirrf  = '$RetIrrf',			 cofins   = '$Cofins',			 pgcofins = '$PgCofins',			 csll	 = '$Csll',			 pgcsll   = '$PgCsll',			 issqn	= '$Issqn',			 pgissqn  = '$PgIssqn',			 inss	 = '$Inss',			 pginss   = '$PgInss',			 totalimp = '$TotalImp'		   where			 mes = '$Mes'		   and			 ano = '$Ano'";  }else{		   $Sql = "insert into $Id2 (			  ano, mes, cons, prev, total, pis, pgpis, irpj, pgirpj, irrf, retirrf, cofins, pgcofins, csll,			pgcsll, issqn, pgissqn, inss, pginss, totalimp		 ) values (			'$Ano', '$Mes', '$Cons', '$Prev', '$Total', '$Pis', '$PgPis', '$Irpj', '$PgIrpj', '$Irrf', '$RetIrrf', '$Cofins',			pgcofins = '$PgCofins', '$Csll', '$PgCsll', '$Issqn', '$PgIssqn', '$Inss', '$PgInss', '$TotalImp'		 )	";  }    if (mysql_query($Sql)) {	echo('<p> Controle Salvo com sucesso. </p>');  } else {	echo('<p id="erro"> O seguinte erro foi encontrado: ' . mysql_error() . '</p>');  }?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa! Valeu pela resposta, cara. Mas mesmo assim tá dando erro.Agora eu estou recebendo o seguinte erro:

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\wamp\www\controles\controle.php on line 65

A linha que se encontra o erro é essa aqui:

if (mysql_fetch_array($sql_verifica) > 1) {

Alguma sugestão?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Coloca isso nessa linha $sql_verifica = mysql_query("SELECT * FROM $Id2 WHERE mes = $Mes AND ano = $Ano");muda para essa $sql_verifica = mysql_query("SELECT * FROM $Id2 WHERE mes = $Mes AND ano = $Ano") or die(mysql_error());ai ele vai retorna o erro que está dando nessa consulta ai ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valeu mais uma vez só que agora aparece isso:

Unknown column 'jan' in 'where clause'

O erro deve estar nesse SELECT aí, mas não consigo ver onde.To quase desistindo. =\Mais uma vez, muito obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

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