Jump to content


Photo

Minha Enquete Soma 2 Ao Inves De Somar 1


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

#1 michelmfreitas

michelmfreitas

    ...

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

Posted 20/02/2008, 10:19

Olá pessoal, estou fazendo uma enquete e ao inserir o voto no DB ela insere 2 ao contrário de inserir 1 voto. Ela repete o processo, vi isso quando mandei imprimir a variavel do sql. Mas não fiz nenhuma repetição nem loop. Me ajudem a achar esse disgramado rsss... obrigado galera!


Essa é a parte do código pra votar:
[codebox]if($eacao == 'votar'){

session_start();

extract($_POST);

$id = $_SESSION['id'];

$sqla = "SELECT * FROM votos WHERE id = '$id'";

$result = $conn->Execute($sqla);

$dados = $result->FetchRow();

echo $enquete;

if($enquete == 'opcao1'){

echo $dados['opcao1'];
echo "<br/>";
echo $opcao1 = $dados['opcao1'] + 1;
//echo "<h1 style='font-family:40px; left:300px;'>$opcao1</h1>";
$sqlb = "UPDATE votos SET opcao1 = '$opcao1' WHERE id = '$id'";

}else if($enquete == 'opcao2'){

echo $opcao2 = $dados['opcao2'] + 1;
$sqlb = "UPDATE votos SET opcao2 = '$opcao2' WHERE id = '$id'";


}else if($enquete == 'opcao3'){

$opcao3 = $dados['opcao3'] + 1;
$sqlb = "UPDATE votos SET opcao3 = '$opcao3' WHERE id = '$id'";

}else if($enquete == 'opcao4'){

$opcao4 = $dados['opcao4'] + 1;
$sqlb = "UPDATE votos SET opcao4 = '$opcao4' WHERE id = '$id'";

}else if($enquete == 'opcao5'){

$opcao5 = $dados['opcao5'] + 1;
$sqlb = "UPDATE votos SET opcao5 = '$opcao5' WHERE id = '$id'";

}

echo $sqlb;
$conn->Execute($sqlb);



//$conn->Execute($sqlb);

?>

<script language="javascript">
alert('Voto computado com sucesso.');
//window.location.href='index.php?pagina=principal';
</script>
<? }?>[/codebox]

Edição feita por: savior, 20/02/2008, 10:40.
Utilize tags [codebox] para trechos longos de código.

Michel Martins

#2 Guilherme Luiz

Guilherme Luiz

    Normal

  • Usuários
  • 78 posts
  • Sexo:Masculino
  • Localidade:São Paulo

Posted 20/02/2008, 13:34

talvez seja pq o valor do value que já eh 1 você está somando +1 tipo isso aqui...

$opcao5 = $dados['opcao5'] + 1;
$sqlb = "UPDATE votos SET opcao5 = '$opcao5' WHERE id = '$id'";

porque vc não cria outra variavel com a soma da nota atual com o +1 ?! tipo assim

$opcao5 = $dados['opcao5'];
$soma5  = $opcao5+1;
$sqlb = "UPDATE votos SET opcao5 = '$soma5' WHERE id = '$id'";

não sei se tem haver mas falo pra fazer isso pois é assim que faço no caso de enquete... deixar em outra variavel o valor da soma da nota atual + 1, mas tem como fazer isso tudo direto pela query sql, só não me recordo qual é mas procura aqui no forum sobre enquete que você vai achar um montão de respostas !

flw espero ter ajudado
just its a lie when the truth is found !

#3 Nicholas Pufal

Nicholas Pufal

    Impossível: só existe até alguém duvidar e provar o contrário.

  • Usuários
  • 1655 posts
  • Sexo:Masculino
  • Localidade:Porto Alegre

Posted 20/02/2008, 14:02

talvez seja pq o valor do value que já eh 1 você está somando +1 tipo isso aqui...

$opcao5 = $dados['opcao5'] + 1;
$sqlb = "UPDATE votos SET opcao5 = '$opcao5' WHERE id = '$id'";

porque vc não cria outra variavel com a soma da nota atual com o +1 ?! tipo assim

$opcao5 = $dados['opcao5'];
$soma5  = $opcao5+1;
$sqlb = "UPDATE votos SET opcao5 = '$soma5' WHERE id = '$id'";

não sei se tem haver mas falo pra fazer isso pois é assim que faço no caso de enquete... deixar em outra variavel o valor da soma da nota atual + 1, mas tem como fazer isso tudo direto pela query sql, só não me recordo qual é mas procura aqui no forum sobre enquete que você vai achar um montão de respostas !

flw espero ter ajudado


Hmm mas ele já não está fazendo assim?


Repara:

$sqla = "SELECT * FROM votos WHERE id = '$id'";

$result = $conn->Execute($sqla);

$dados = $result->FetchRow();

E aqui:

echo $opcao1 = $dados['opcao1'] + 1;

O valor atual já é pego do DB ;)

Precisa usar tantos IFs assim? :blink: Não daria para resgatar o nome do form (deixa os campos do form com o mesmo value do campo do DB) e deixar essa consulta de UPDATE dinâmica, com uma linha só?

Colocar o valor do campo é igual a ele mesmo + 1 no DB? Aí nem precisa do Select. Basta algo assim:

Update tabela SET campo = campo + 1 WHERE blabla...

Fica até mais fácil de debugar.

Edição feita por: Firehalk, 20/02/2008, 14:14.

BLOG Touché Criação - Vamos trocar idéias? -> http://blog.touchecriacao.com.br/
// Links úteis: Busca || Regras
// Não respondo dúvidas via mensagem privada. Use o fórum para buscar ou perguntar.

#4 michelmfreitas

michelmfreitas

    ...

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

Posted 20/02/2008, 15:25

fala pessoal!

Guilherme, como o próprio Firehalk disse, eu já estou fazendo isso... A enquete eu não quis pegar de outros tópicos para justamente aprender a fazer... o que tá acontecendo é que ela está fazendo a soma 2 vezes... sempre soma 2... e se vc ver o codigo to somando 1... isso que não estou entendendo.

Firehalk, eu usei um bocado de IF sim, eu tinha feito com SWITCH, mas como dava o mesmo erro, achei que poderia ser naquela estrutura e mudei, mas sem efeito...

Eu acho que do jeito que to fazendo ta tranquilo, até pra entender... eu puxo o valor do DB e somo mais 1 na escolha do usuário, depois gravo de novo no DB. Simples assim. O que não entendo é onde ele arruma outro pra somar... já usei ECHO em todas as partes do código, trecho por trecho... quando mando dar um echo no $sqlb ele imprime ele 2 vezes, mas não achei nem entendo o por quê.
Michel Martins

#5 Crab

Crab

    Da paz, mas preparado para Guerra

  • Ex-Admins
  • 2521 posts
  • Sexo:Masculino
  • Localidade:Florianópolis - SC
  • Interesses:Desenvolvimento Gráfico e Web.

Posted 20/02/2008, 16:04

Cara o lance é não complicar e a forma correta de fazer é como o Firehalk falou...incrementa direto na query
Outra forma é perda de tempo.
Não efetue soma antes ... apenas pegue a escolha do usuário e atualize no bd e some na query.
Como ele exemplificou ali no final do post dele.

Outra forma é dar murro em ponta de faca.
Não tem como somar 2 se vc está somando 1 :wacko: hehehehe

Só vai acontecer isso se vc somar antes da query e depois somar na query tbm ...
OU se estiver fazendo duas vezes o UPDATE

(y) Até mais

#6 michelmfreitas

michelmfreitas

    ...

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

Posted 20/02/2008, 19:15

Tudo blz Crab, eu não sabia que poderia ser feito daquela maneira, queria apenas seguir meu raciocínio...

mas sem problemas...

implementei como voces ensinaram, mas quando peço pra imprimir o comando sql ele nao faz a soma...

fica assim:

if($eacao == 'votar'){	 	session_start();		extract($_POST);		$id = $_SESSION['id'];		$sqla = "SELECT * FROM votos WHERE id = '$id'";		$result = $conn->Execute($sqla);		$dados = $result->FetchRow();		echo $sqlb = "UPDATE votos SET $enquete = $dados[$enquete] + 1 WHERE id = '$id'";	$conn->Execute($sqlb);        ?>		<script language="javascript">		alert('Voto computado com sucesso.');		//window.location.href='index.php?pagina=principal';	</script>                 <? }?>

Ele repete o ALERT, está fazendo duas vezes...

Veja a tela: tela
Michel Martins

#7 Nicholas Pufal

Nicholas Pufal

    Impossível: só existe até alguém duvidar e provar o contrário.

  • Usuários
  • 1655 posts
  • Sexo:Masculino
  • Localidade:Porto Alegre

Posted 20/02/2008, 19:19

Que tipo de conteúdo vem na var $enquete?

A forma que a gente comentou é sem aquele Select.

Ou seja, você vai apenas se utilizar do próprio campo da tabela para fazer a soma por 1. Dessa forma não precisa fazer Select, pois ele já vai pegar o valor atual que está no campo ;)
BLOG Touché Criação - Vamos trocar idéias? -> http://blog.touchecriacao.com.br/
// Links úteis: Busca || Regras
// Não respondo dúvidas via mensagem privada. Use o fórum para buscar ou perguntar.

#8 michelmfreitas

michelmfreitas

    ...

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

Posted 20/02/2008, 20:11

na enquete vem o 'opcao1', 'opcao2' .... o nome do campo.

retirei o select, e ele ainda nao somou... retornou o sql completo...

if($eacao == 'votar'){		session_start();		extract($_POST);		$id = $_SESSION['id'];		echo $sqlb = "UPDATE votos SET $enquete = $enquete + 1 WHERE id = '$id'";	$conn->Execute($sqlb);		?>		<script language="javascript">		alert('Voto computado com sucesso.');		//window.location.href='index.php?pagina=principal';	</script><? }?>

se peço pra imprimir ele:

UPDATE votos SET opcao2 = opcao2 + 1 WHERE id = '10'


Michel Martins

#9 Nicholas Pufal

Nicholas Pufal

    Impossível: só existe até alguém duvidar e provar o contrário.

  • Usuários
  • 1655 posts
  • Sexo:Masculino
  • Localidade:Porto Alegre

Posted 20/02/2008, 20:31

O meu pouco nível de experiência (ainda mais em php) tá chegando no limite :P

Mas só pra dar uma força, e tentar ajudar:

- O que acontece com essa operação? Retorna erro ou nada acontece?

- Já tentou fazer a mesma operação diretamente no teu banco? Eu testei aqui no phpMyAdmin e de fato deveria funcionar.

- Os campos de voto estão como INT, certo?

Abraços
BLOG Touché Criação - Vamos trocar idéias? -> http://blog.touchecriacao.com.br/
// Links úteis: Busca || Regras
// Não respondo dúvidas via mensagem privada. Use o fórum para buscar ou perguntar.

#10 Crab

Crab

    Da paz, mas preparado para Guerra

  • Ex-Admins
  • 2521 posts
  • Sexo:Masculino
  • Localidade:Florianópolis - SC
  • Interesses:Desenvolvimento Gráfico e Web.

Posted 20/02/2008, 23:28

Primeira coisa... aquele teu session_start() ali tá de bobeira... não se coloca session_start() ali...

Segundo... vc não precisa consultar nada... apenas pegar o que vem de post e incrementar direto na query o valor do campo refernte ao que veio do formulário.

simples... a Linguagem não é complicada... e sim nós que complicamos as coisas.

Bom agora em terceiro...

Ali no SET vc tem que colocar o CAMPO do bd que receberá a atualização

O valor atribuído a este campo é o mesmo que já está lá+1 ...

Exatamente como o Firehalk falou.

Exemplo...

Digamos que não tivesse usando EXTRACT()

$sqlb = "UPDATE votos SET $_POST['opcao'] = $_POST['opcao']+1 WHERE id = ".$id."";

sacou ??

Agora o echo que vc está usando é pra que ?? quer imprimir a query??

Para imprimir o campo do bd atualizado precisará fazer uma nova selecção no bd após a atualização e dar saída para ele.

Ou pegar o campo que venho do form e somar +1 e dar saída com echo ( a modo de exibir uma visualização de como ficou o valor... apenas )
Onde essa saída deve ocorrer depois da instrução de UPDATE no bd.

Sei lá... acho que tá complicando, mas tenta aí

ahh e em 4º... tira essa foto sua daí... pelo amor ... se não ninguém mais vai ajudar mais kkkkkkkkkkkkkkkkkkkkkkk zuera...

(y)Até mais

#11 michelmfreitas

michelmfreitas

    ...

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

Posted 25/02/2008, 14:08

Fala galera! Valeu pela ajuda! Mas ainda não consegui resolver...

Crab, o session_start() está ali para abrir a sessão pra pegar o id... veja:

session_start();
	
$campo = $_POST['enquete']; 
	
$id = $_SESSION['id']; <----------------------

Eu tô incrementando direto na query como o grande FIREHALK disse, mas ele não soma. O echo ali antes do $sqlb é pra verificar se a string do sql está indo corretamente. Apenas debugando...

Eu entendi o raciocínio e fiz como me ensinaram, mas ainda não deu certo...

Se ainda estiverem na dúvida, vejam o arquivo todo: arquivo enquete.php

Ele exibe a msg VOTO COMPUTADO COM SUCESSO 2 x, mas não mandei imprimir isso 2x. Isso que está me tirando o sono... Cérebro incompetente!!!

E por último: Minha foto atrai visitas no site! kkkkkkkk

Mas valeu, se ainda puderem me ajudar e solucionar, fico grato. Valeu a todos.
Michel Martins

#12 Crab

Crab

    Da paz, mas preparado para Guerra

  • Ex-Admins
  • 2521 posts
  • Sexo:Masculino
  • Localidade:Florianópolis - SC
  • Interesses:Desenvolvimento Gráfico e Web.

Posted 25/02/2008, 15:08

... eu sei que session_start() é para iniciar a seção mas ali não é o lugar...

Vou ver o arquivo e se puder ajudar eu ajudarei.

(y)

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

EDITADO

Cara peguei teu file que diga-se de passagem tá uma confusão... e dei uma arrumada... não testei e não sei se vai funcionar mas baseado na tua própria lógica fiz como no cod abaixo... testa aí ou pelo menos tenta entender a história...

[codebox]<?php

session_start();

if(isset($_POST['votar'])){

$campo = $_POST['enquete'];
$id = $_SESSION['id'];
$sqlb = "UPDATE votos SET $campo = $campo+1 WHERE id = ".$id."";

$conn->Execute($sqlb);

echo "<script language=\"javascript\">alert('Voto computado com sucesso.');</script>";

}
else{

$sql = "SELECT * FROM perg ORDER BY id DESC LIMIT 0,1";

$result = $conn->Execute($sql);

$enquete = $result->FetchRow();

$pergunta = utf8_decode($enquete['pergunta']);

$_SESSION['id'] = $enquete['id'];

echo "<form action=\"\" method=\"post\">";
echo "<input type=\"radio\" name=\"enquete\" value=\"opcao1\" /><span>".utf8_encode($enquete['opcao1'])."</span><br />";
echo "<input type=\"radio\" name=\"enquete\" value=\"opcao2\" /><span>".utf8_encode($enquete['opcao2'])."</span><br />";

if($enquete['opcao3'] != ''){

echo "<input type=\"radio\" name=\"enquete\" value=\"opcao3\" /><span>".utf8_encode($enquete['opcao3'])."</span><br />";

}

if($enquete['opcao4'] != ''){

echo "<input type=\"radio\" name=\"enquete\" value=\"opcao4\" /><span>".utf8_encode($enquete['opcao4'])."</span><br />";

}

if($enquete['opcao5'] != ''){

echo "<input type=\"radio\" name=\"enquete\" value=\"opcao5\" /><span>".utf8_encode($enquete['opcao5'])."</span><br />";

}

echo "<br />";
echo "<input type=\"submit\" name=\"votar\" value=\"Votar!\" style=\"color:#000000;\" />";

echo "</form>";

}

?>[/codebox]

(y) Até mais

#13 michelmfreitas

michelmfreitas

    ...

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

Posted 25/02/2008, 16:17

Graaaande Crab, deu certo chefe...

mas esclarecendo... pois o negócio é aprender...

a lógica que eu estava fazendo achei estar correta, mesmo aplicando o $campo+1 ele não funcionou.

vou analisar friamente seu codigo aqui e depois lhe digo uma conclusão... "Brigadaço!!!!!!!"
Michel Martins

#14 LarPhozyHah

LarPhozyHah

    Super Veterano

  • Usuários
  • 14515 posts
  • Sexo:Masculino
  • Localidade:San Miguel de Tucuman

Posted 29/10/2017, 08:47

Pedidos De Viagra viagra Einnahme Levitra Priligy Dapoxetina Ricetta Achat De Duretique
Dutasteride Overseas Free Shipping Santa Ana Comprar Cialis En Tarragona cialis online Chewable Viagra Soft Tabs Para Q Es El Medicamento Cephalexin Viagra Pfizer Beipackzettel




0 user(s) are reading this topic

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

IPB Skin By Virteq