• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

xploit

Update a duplicar

35 mensagens neste tópico

Boas pessoal, estou com um problema ao fazer este query em php:

$ID="teste";

       $host='localhost';
       $user='isad';
       $pass='as';
       $db='administracao';     
     
     mysql_connect ($host,$user,$pass);
     mysql_select_db($db);

     $save=mysql_query("UPDATE revendedores SET ass=ass+1 WHERE id='".$ID."' "); 
     if($save==1){echo "sucesso!";}

Agora porque raio ele soma 2 valores na tablea, em vez de somar apenas 1 valor a mais como está no query?

Na tabela o ass está configurado como BigInt(20).

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

boas

nao tenho a certeza mas acho que isso nao é correcto...

tenta fazer:

$ass++;
$save=mysql_query("UPDATE revendedores SET ass = $ass WHERE id='".$ID."' "); 

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

é correcto é tenho a certeza absoluta, o que não é correcto é ele adicionar o que está na tabela mais 2, em vez de fazer a soma de apenas mais 1 ao que está na tabela... isso é que nao percebo : \

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

também acho a sugestão do subkiller mais correcto... já testas-te?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

não é o mais correcto para o efeito desejado, mas já testei e é exactamente a mesma coisa faco um SELECT do revendedor tiro o dado "ASS" e faco o Update com esse dado +1, e acontece exactamente o mesmo..

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tens esse campo ass com auto_increment, valor default, ou algo do género?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

tem o valor default defined para 0.

mas já o pus sem valor default, ja o pus NULL e já pus em vez de big Int pus em varchar.. e mesmo assim nada.. continua a fazer a soma de 2 em vez de fazer só de um... o código não está dentro de um while nem nada nao percebo..

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

tenta fazer essa query no mysql, sem ser através do php.. e vê se funca, se não funcar é pq a query ta mal

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não me parece que esteja alguma coisa errada aí. Verifica se o código não "corre" duas vezes...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Executei este código no phpmyadmin e funciona normalmente, se executar no PHP faz a soma de +2 em vez de +1.. ja experimentei no meu server local e remoto é a mesma coisa..  :eek:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

o código está certinho, não há nada de errado é o que vos mostrei, penso nao ter erros, nao está dentro de nenhum while ou foreach, é exactamente esse código num ficheiro teste.php, abro a página, ele faz o update, so que soma +2.. será um bug no mysql? lol

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

tu dizes para ele fazer o update onde o id for igual a teste...

sera que o erro pode estar ai?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

fazes o update... e como vês que adicionou mais 2? posso te garantir que o php nao adiciona mais 2

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Executei este código no phpmyadmin e funciona normalmente, se executar no PHP faz a soma de +2 em vez de +1.. ja experimentei no meu server local e remoto é a mesma coisa..  :eek:

Btw... como o próprio nome indica PHPmyadmin é feito em PHP, alguma coisa estas a fazer mal ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Amigos eu agradeço as vossas ajudas mas vamos la perceber uma coisa...

CODIGO SQL:

-- phpMyAdmin SQL Dump
-- version 3.1.3
-- http://www.phpmyadmin.net
--
-- Máquina: localhost
-- Data de Criação: 19-Mai-2009 às 16:50
-- Versão do servidor: 5.1.32
-- versão do PHP: 5.2.9-1

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

--
-- Base de Dados: `administracao`
--

-- --------------------------------------------------------

--
-- Estrutura da tabela `revendedores`
--

CREATE TABLE IF NOT EXISTS `revendedores` (
  `id` longtext NOT NULL,
  `dados_pessoais` longtext NOT NULL,
  `username` longtext NOT NULL,
  `password` longtext NOT NULL,
  `saldo_vendas` bigint(100) NOT NULL DEFAULT '0',
  `saldo_referidos` bigint(100) NOT NULL DEFAULT '0',
  `referido` text,
  `innosite` bigint(20) NOT NULL,
  `innocard` bigint(100) NOT NULL DEFAULT '0'
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Extraindo dados da tabela `revendedores`
--

CODIGO PHP:

$ID="teste";

       $host='localhost';
       $user='isad';
       $pass='as';
       $db='administracao';     
     
     mysql_connect ($host,$user,$pass);
     mysql_select_db($db);

     $save=mysql_query("UPDATE revendedores SET innosite=innosite+1 WHERE id='".$ID."' ");
     if($save==1){echo "sucesso!";}

É exactamente assim que tenho os códigos e a estrutura da tabela REVENDEDORES..

Executo o código php e dá me uma entrada de +2 em vez de +1.. não está dentro de while nem de foreach é exactamente isto que está ai não há erros de código não a nada.. pelo menos que eu saiba.. basta verem o que ta escrito ai e verem se existe algum erro penso que não..

Mas tudo indica que está tudo bem .. apenas se eu executar o query no PHPMYADMIN/ (Executa comando(s) SQL) e escrever exactamente isto:

UPDATE revendedores SET innosite=innosite+1 WHERE id='teste'

Funciona na perfeição... se executar no PHP adiciona +2 valores em vez de adicionar +1 como faz directamente no mysql...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Executei este código no phpmyadmin e funciona normalmente, se executar no PHP faz a soma de +2 em vez de +1.. ja experimentei no meu server local e remoto é a mesma coisa..  :eek:

estás a usar firefox?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sem ofensa, mas é um problema muito curioso mesmo. A instrução SQL é válida e dá diferentes resultados...

Estás a fazer include desse ficheiro? ou de outro qualquer nesse contexto?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O "código php" tem o nome de teste.php, e estou a usar o firefox.. executo o teste.php, e faço uma visualização no phpMyadmin, e vejo lá 2 valores adicionados em vez da soma real, que é +1, depois faco a query directamente no phpMyadmin no painel SQL para executar as querys, executo vou verificar novamente e vejo que so adicionou o correcto, que é +1..

O ficheiro teste.php não tem includes classes funcoes nada é exactamente como está ai como voçês veem.. é estranho realmente mas é real, adiciona sempre +2 em vez de +1....

Há coisas inexplicaveis  ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Parece parvo, mas experimenta:

mysql_query('UPDATE revendedores SET innosite=innosite+1 WHERE id=\''.$ID.'\'');

Basicamente troquei as aspas por plicas, porque com aspas o PHP interpreta possíveis valores antes de considerar a string em si. Não deve ser por aí, mas é uma tentativa.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

ok! acho que sei qual é o teu problema.

Acabei de ter um problema como o teu. Eu sabia que o código estava a funcionar, porque foi de repente que as scripts começaram a bater mal (e garanto-te que não fiz realmente nada ao código). As queries davam certinho se as inserisse no query browser, mas através da net, por vezes inseria duas a três vezes o mesmo valor. No meu caso era a fazer INSERT.

Portanto, comecei a fazer mais testes no código PHP. Naquele caso, para inserir um registo eu tinha de atribuir o código de identificação com base no registo inserido anteriormente. Esse código era sempre calculado correctamente, o que me levou a pensar que a script fazia mais do que um reload quando eu fazia um submit.

Entretanto, na net, descobri que o conjunto (mysql + firefox + php) por vezes se passam quando existe erros no HTML. Portanto, tentei ver se tinha erro nesse sítio. Não descobri nenhuma.

No final, verifiquei que o código estava a funcionar porreiraço em opera e IE.

Logo, o problema tinha mesmo de ser do firefox.

Solucionei a questão da seguinte forma: alterei o que tinha a alterar em opera (para poder ter a informação correcta online), mal tenha um pouco de tempo vou ver se descubro o galho e prometi a mim mesma que foi o último site em php (vou migrar definitivamente para o perl).

Agora, consegues descrever-me exactamente o comportamento da tua script? Tipo, passo por passo, se é uma página com formulário ou se tens opção de edição de formulário que no final gravas/ou não a informação inserida.

Se por acaso conseguires resolver a questão, podes coloca-la no post?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

estrucida fiz o teste de experimentar no IE e não é que é funciona bem no IE e no firefox não? ao longo de 5 anos de php nunca me deparei com isto!! qual será a explicação para isto?  :eek:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Coloca aqui o código que usas para o formulário, incluindo javascript, para todos vermos o problema ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

estrucida fiz o teste de experimentar no IE e não é que é funciona bem no IE e no firefox não? ao longo de 5 anos de php nunca me deparei com isto!! qual será a explicação para isto?  :eek:

Então (na minha opinião pessoal)  É LÓGICO que não fazes qualquer verificação ao executar esse código e tens firebug ou outro plugin de firefox que faça mais que um request a essa página, um browser NUNCA influência  a execução de código server-side

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora