Jump to content


Photo

Problemas Com $_post (valor Numérico)!


  • Faça o login para participar
36 replies to this topic

#1 GmEnDeS

GmEnDeS

    Turista

  • Usuários
  • 50 posts
  • Sexo:Não informado

Posted 05/11/2009, 17:44

Boa noite pessoal.

Por gentileza, só falta isso para finalizar meu sistema, e estou tendo problemas.

Somente para complementar, estou editando para informar aos caros colegas o erro que recebo:

Parse error: syntax error, unexpected T_LNUMBER, expecting T_VARIABLE or '$' in /home/neptune/public_html/recebeForm.ben10 on line 22


Solicito à página recebeForm.php que recolha as informações de form.php, como mostra o código abaixo:
line 22 - $01 = $_POST['01'];
line 23 - $02 = $_POST['02'];

Fui informado pelo nobre Paulo Ricardo que não se pode utilizar este tipo de consulta com valor numérico, portanto, renomeá-las seria complicado pois possuo outras 498 tabelas com a mesma inicialização numérica.

Um problema semelhante, na consulta do banco de dados, resolvi com mysql_fetch_assoc:
while ($row = mysql_fetch_assoc($sql)) {
echo $row["02"];
}

Algum nobre poderia me dar uma solução de outra variáve que tenha a mesma função $_POST, porém, recolha meus valores?
Obrigado!

Edição feita por: GmEnDeS, 05/11/2009, 17:47.


#2 Paulo Freitas

Paulo Freitas

    ××××××× LRU #456504 ××××××× ××××××× LRM #364686 ×××××××

  • Ex-Admins
  • 5612 posts
  • Sexo:Masculino
  • Localidade:Campinas - SP

Posted 05/11/2009, 18:43

Hmm... porque não usar as variáveis diretamente do $_POST? :ponder:

[]’s Até mais

#3 '' sem.Ponto

'' sem.Ponto

    Super Veterano

  • Ex-Admins
  • 2098 posts
  • Sexo:Masculino
  • Localidade:Belo Horizonte

Posted 05/11/2009, 19:29

Como diz o manual, "um nome de variável válido se inicia com uma letra ou sublinhado"... ;)

Ou você pega os valores diretamente como o PR sugeriu, ou declara as variáveis assim:

$_01 = $_POST['01'];
$_02 = $_POST['02'];

* pode ser uma letra também no lugar do sublinhado.

:D
att,
Muller Dias
ex-administrador Fórum WMO

#4 GmEnDeS

GmEnDeS

    Turista

  • Usuários
  • 50 posts
  • Sexo:Não informado

Posted 05/11/2009, 19:39

Perdão, mas não entendi.

O recebeForm.php declara os valores recebidos de Form.php, que seria preenchido pelo formulário com o name '01' e submetidos à página seguinte para serem inseridos no banco de dados.

Exemplo:
$01 = $_POST['01'];
$sql = mysql_query("update db set 01 = '$01'")

Podem me ajudar de maneira mais prática?
Muito obrigado pela ajuda dos dois.

#5 Paulo Freitas

Paulo Freitas

    ××××××× LRU #456504 ××××××× ××××××× LRM #364686 ×××××××

  • Ex-Admins
  • 5612 posts
  • Sexo:Masculino
  • Localidade:Campinas - SP

Posted 05/11/2009, 20:03

Exemplo:

$01 = $_POST['01'];
$sql = mysql_query("update db set 01 = '$01'")

Podem me ajudar de maneira mais prática?
Muito obrigado pela ajuda dos dois.

O que eu quis dizer é que $_POST['01'] já é uma variável. Você pode usar assim:

$sql = mysql_query("update db set 01 = '{$_POST['01']}'"); // neste caso, {} (chaves) sempre!

Edição

Mas este é um código totalmente inseguro. Para torná-lo seguro, siga o exemplo:

$sql = mysql_query(sprintf("update db set 01 = '%s'", mysql_real_escape_string($_POST['01'])));
[]’sAté mais

#6 GmEnDeS

GmEnDeS

    Turista

  • Usuários
  • 50 posts
  • Sexo:Não informado

Posted 05/11/2009, 20:06

Iria funcionar corretamente assim?

Muito obrigado, Paulão! hehe

#7 Paulo Freitas

Paulo Freitas

    ××××××× LRU #456504 ××××××× ××××××× LRM #364686 ×××××××

  • Ex-Admins
  • 5612 posts
  • Sexo:Masculino
  • Localidade:Campinas - SP

Posted 05/11/2009, 20:08

Iria funcionar corretamente assim?

Muito obrigado, Paulão! hehe

Yeah, normalzão! :)

Mas dá uma relida no meu comentário anterior, eu editei ele. :D

[]’sAté mais

#8 GmEnDeS

GmEnDeS

    Turista

  • Usuários
  • 50 posts
  • Sexo:Não informado

Posted 05/11/2009, 20:13

Iria funcionar corretamente assim?

Muito obrigado, Paulão! hehe

Yeah, normalzão! :)

Mas dá uma relida no meu comentário anterior, eu editei ele. :D

[]’s


Obrigado novamente. Só por questão de organização e para facilitar meu trabalho, eu posso fazer várias chamadas dessa?
Do tipo:
$sql = mysql_query(sprintf("update db set 01 = '%s'", mysql_real_escape_string($_POST['01'])));
$sql = mysql_query(sprintf("update db set 02 = '%s'", mysql_real_escape_string($_POST['02'])));
$sql = mysql_query(sprintf("update db set 03 = '%s'", mysql_real_escape_string($_POST['03'])));
$sql = mysql_query(sprintf("update db set 04 = '%s'", mysql_real_escape_string($_POST['04'])));

Ou teria problemas?
Para mim, ficaria muito confuso fazer 500 tabelas assim. :S

#9 '' sem.Ponto

'' sem.Ponto

    Super Veterano

  • Ex-Admins
  • 2098 posts
  • Sexo:Masculino
  • Localidade:Belo Horizonte

Posted 05/11/2009, 22:15

O que eu quis dizer é que você não pode começar a variável com número, por isso deu erro. A variável $01 está começando com um número, isso não pode, o correto é começar com letra ou underline.

$4526 // errado
$2gmg // errado
$m588 // certo
$_450 // certo

Sobre as consultas, quanto menos melhor, senão fica lento. Se você pode atualizar com apenas uma única query, então faça isso. ;)
att,
Muller Dias
ex-administrador Fórum WMO

#10 GmEnDeS

GmEnDeS

    Turista

  • Usuários
  • 50 posts
  • Sexo:Não informado

Posted 06/11/2009, 14:28

Muito obrigado aos nobres colegas Paulo Ricardo e '' sem.Ponto.
Aprendi muito com a ajuda de vocês, para solucionar tudo, estou tendo somente um problema:
$sql = mysql_query(sprintf("update db set 01 = '%s'", mysql_real_escape_string($_POST['01'])));

Como e onde devo utilizar a função 'where' para restringir há alguns registros no banco de dados?

Exemplo:
$codigo = $_GET['codigo']; // recebe o código do registro X que está editando

... where ID = '".$codigo."' // faz a atualização somente no registro X

Alguém pode fazer essa adaptação no código do Paulo Ricardo para que eu possa ter uma base?
Obrigado!

Desculpem o duplo post, os senhores saberiam alguma função ou código para que eu possa estudar e aprofundar os conhecimentos de como solucionar o problema acima?
Procurei o Google inteiro e não achei nada referente à acrescentar a função where no código do nobre Paulo Ricardo.

#11 vi7o

vi7o

    Novato no fórum

  • Usuários
  • 7 posts
  • Sexo:Masculino
  • Localidade:Campinas - SP

Posted 06/11/2009, 15:18

Ve se é isso que você estava querendo:
$codigo = $_GET['codigo'];

$sql = mysql_query(sprintf("update db set 01 = '%s' where ID = '%d'", mysql_real_escape_string($_POST['01']), $codigo));

@edit: Eu coloquei %d supondo que o código seja um valor inteiro.

Edição feita por: vi7o, 06/11/2009, 15:20.


#12 GmEnDeS

GmEnDeS

    Turista

  • Usuários
  • 50 posts
  • Sexo:Não informado

Posted 06/11/2009, 16:06

Ve se é isso que você estava querendo:

$codigo = $_GET['codigo'];

$sql = mysql_query(sprintf("update db set 01 = '%s' where ID = '%d'", mysql_real_escape_string($_POST['01']), $codigo));

@edit: Eu coloquei %d supondo que o código seja um valor inteiro.


Não funciona! :(

$codigo = $_GET['codigo'];

$consulta = mysql_query(sprintf("update a_campo set Senha = '%s' where ID = '%d'", mysql_real_escape_string($_POST['senha']), $codigo));
$consulta = mysql_query("update a_campo set Visualizacao = 'Nao' where ID = '".$codigo."'");

... (e outras consultas semelhantes ao do campo Senha)

if($consulta) {
		echo "<script type=\"text/javascript\">
window.alert(\"Os dados cadastrais foram alterados com sucesso.\");
location.href = \"index.php\"; 
</script>";
	exit;
} else {
	echo "Não foi possível efetuar seu cadastro.<br />Contate-nos caso esta mensagem seja exibida.";
	exit;
}

Ele aparece a mensagem de atualização com sucesso porém não há nenhuam alteração no banco de dados. O.O
E agora?

@Edit O estranho é que, nem a consulta do campo "Visualização" o script executa.

Tentei assim também:

$codigo = $_GET['codigo'];
$visualizacao = "Nao";

$consulta = mysql_query(sprintf("update a_campo set Senha = '%s' where ID = '%d'", mysql_real_escape_string($_POST['senha']), mysql_real_escape_string($_GET['codigo'])));
$consulta = mysql_query(sprintf("update a_campo set Visualizacao = '%s' where ID = '%d'", mysql_real_escape_string($_POST['visualizacao']), mysql_real_escape_string($_GET['codigo'])));

... (e outras consultas semelhantes ao do campo Senha)

if($consulta) {
		echo "<script type=\"text/javascript\">
window.alert(\"Os dados cadastrais foram alterados com sucesso.\");
location.href = \"index.php\"; 
</script>";
	exit;
} else {
	echo "Não foi possível efetuar seu cadastro.<br />Contate-nos caso esta mensagem seja exibida.";
	exit;
}

E mesmo ainda não foi. Alguém poderia me dar alguma luz? :S

Edição feita por: GmEnDeS, 06/11/2009, 16:12.


#13 Paulo Freitas

Paulo Freitas

    ××××××× LRU #456504 ××××××× ××××××× LRM #364686 ×××××××

  • Ex-Admins
  • 5612 posts
  • Sexo:Masculino
  • Localidade:Campinas - SP

Posted 07/11/2009, 02:44

$consulta = mysql_query(sprintf("update a_campo set Senha = '%s' where ID = '%d'", mysql_real_escape_string($_POST['senha']), $codigo));
$consulta = mysql_query("update a_campo set Visualizacao = 'Nao' where ID = '".$codigo."'");
Muito provavelmente o campo ID é do tipo INTEGER (ou coisa parecida). Assim sendo, você não pode usar aspas na comparação do mesmo. Outra coisa: assim como a primeira consulta, use mysql_real_escape_string() na segunda, você não pode confiar no que o usuário vai colocar na URL.

O código corrigido:

$consulta = mysql_query(sprintf("update a_campo set Senha = '%s' where ID = %d", mysql_real_escape_string($_POST['senha']), $codigo));
$consulta = mysql_query(sprintf("update a_campo set Visualizacao = 'Nao' where ID = %d", mysql_real_escape_string($_GET['codigo'])); // pode remover a variável $codigo
[]’sAté mais

#14 GmEnDeS

GmEnDeS

    Turista

  • Usuários
  • 50 posts
  • Sexo:Não informado

Posted 07/11/2009, 13:18

Muito provavelmente o campo ID é do tipo INTEGER (ou coisa parecida). Assim sendo, você não pode usar aspas na comparação do mesmo. Outra coisa: assim como a primeira consulta, use mysql_real_escape_string() na segunda, você não pode confiar no que o usuário vai colocar na URL.

O código corrigido:
...

[]’s


Código atual:
$codigo = $_GET['codigo'];
$visualizacao = "Nao";

$consulta = mysql_query(sprintf("update a_campo set Senha = '%s' where ID = %d", mysql_real_escape_string($_POST['senha']), $codigo));
$consulta = mysql_query(sprintf("update a_campo set Visualizacao = '%s' where ID = %d", mysql_real_escape_string($_POST['visualizacao']), $codigo));

// Vale ressaltar que possui muitas dessas consultas (incluindo dados cadastrais), aproximadamente umas 300, com colunas iniciadas por numeral (o início do problema se começou aí)! Exemplo:

$consulta = mysql_query(sprintf("update a_campo set 01 = '%s' where ID = %d", mysql_real_escape_string($_POST['01']), $codigo));
$consulta = mysql_query(sprintf("update a_campo set 02 = '%s' where ID = %d", mysql_real_escape_string($_POST['02']), $codigo));
$consulta = mysql_query(sprintf("update a_campo set 03 = '%s' where ID = %d", mysql_real_escape_string($_POST['03']), $codigo));

if($consulta) {
		echo "Os dados cadastrais foram alterados com sucesso.");
location.href = \"index.php\"; 
</script>";
	exit;
} else {
	echo "Não foi possível efetuar a alteração.";
	exit;
}

Ele imprime o resultado que os dados cadastrais foram alterados porém não há modificação alguma no banco de dados.
O que pode ser isso Paulo? E sim, o ID é int().

Obrigado pela ajuda e atenção de todos!

Edição feita por: GmEnDeS, 07/11/2009, 13:19.


#15 GmEnDeS

GmEnDeS

    Turista

  • Usuários
  • 50 posts
  • Sexo:Não informado

Posted 09/11/2009, 16:16

Muito provavelmente o campo ID é do tipo INTEGER (ou coisa parecida). Assim sendo, você não pode usar aspas na comparação do mesmo. Outra coisa: assim como a primeira consulta, use mysql_real_escape_string() na segunda, você não pode confiar no que o usuário vai colocar na URL.

O código corrigido:
...

[]’s


Código atual:
$codigo = $_GET['codigo'];
$visualizacao = "Nao";

$consulta = mysql_query(sprintf("update a_campo set Senha = '%s' where ID = %d", mysql_real_escape_string($_POST['senha']), $codigo));
$consulta = mysql_query(sprintf("update a_campo set Visualizacao = '%s' where ID = %d", mysql_real_escape_string($_POST['visualizacao']), $codigo));

// Vale ressaltar que possui muitas dessas consultas (incluindo dados cadastrais), aproximadamente umas 300, com colunas iniciadas por numeral (o início do problema se começou aí)! Exemplo:

$consulta = mysql_query(sprintf("update a_campo set 01 = '%s' where ID = %d", mysql_real_escape_string($_POST['01']), $codigo));
$consulta = mysql_query(sprintf("update a_campo set 02 = '%s' where ID = %d", mysql_real_escape_string($_POST['02']), $codigo));
$consulta = mysql_query(sprintf("update a_campo set 03 = '%s' where ID = %d", mysql_real_escape_string($_POST['03']), $codigo));

if($consulta) {
		echo "Os dados cadastrais foram alterados com sucesso.");
location.href = \"index.php\"; 
</script>";
	exit;
} else {
	echo "Não foi possível efetuar a alteração.";
	exit;
}

Ele imprime o resultado que os dados cadastrais foram alterados porém não há modificação alguma no banco de dados.
O que pode ser isso Paulo? E sim, o ID é int().

Obrigado pela ajuda e atenção de todos!


* Edit:
Desculpe o double post novamente, mas alguém teria alguma solução ainda?




1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq