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

SLIFE

Somatorio de valores dependente de resposta

12 mensagens neste tópico

Boas

Estou a tentar desenvolver um género de inquérito!

Precisava de fazer algo do género:

Varias perguntas, já com possíveis respostas, com um select.

E depois queria que consoante as respostas, fosse adicionados valores a uma string.

No final iria mostrar o valor da string depois de todos os valores correspondentes serem somados.

Exemplo:

Pergunta 1 (blablablablabla???)

Select com hipóteses: 1, 2, 3

Pergunta 2 (blablablablabla???)

Select com hipóteses: sim, não, talvez

E por ai a fora.

Depois precisava de fazer algo do tipo:

Se a resposta um tivesse sido por exemplo 2, então iria adicionar á variável o valor por mim estipulado.

E assim sucessivamente!

Como poderei fazer isso?

Já experimentei isto: (Mas não esta a funcionar)


$valortotal=0;

if ($_GET['$pergunta1'] == 'Sim') {
     $valortotal= "$valortotal" ++ 2 ;
     }
if ($_GET['pergunta1'] == 'Nao') {
     $valortotal= "$valortotal" ++ 1 ;
     }

if ($_GET['$pergunta2'] == '1') {
     $valortotal= "$valortotal" ++ 5 ;
     }
if ($_GET['$pergunta2'] == '2') {
     $valortotal= "$valortotal" ++ 3 ;
     }

if ($_GET['$pergunta2'] == '3') {
     $valortotal= "$valortotal" ++ 2 ;
     }
if ($_GET['pergunta2'] == 'Mais que 5') {
     $valortotal= "$valortotal" ++ 1 ;
     }	

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Só se usa um sinal de + que para adicionar valores.

E não precisas de converter a variável em string ("$valortotal") para depois o PHP a converter em número antes da adição. Podes fazer tudo sem conversões.

E há um atalho para somar (ou subtrair ou muitas outras operações) um valor a uma quantidade.

## somar 2 a valor total, convertendo primeiro para string e depois para número
$valortotal = "$valortotal" + 2;

## somar 2 a valor total, sem conversões
$valortotal = $valortotal + 2;

## somar 2 a valor total, com atalho
$valortotal += 2;

Ainda há outro atalho (que não é prático para o teu exemplo) para somar ou subtrair 1 (um) a uma variável: o ++ (ou o --).

$valortotal++; ## o mesmo que $valortotal = $valortotal + 1;
$valortotal--; ## o mesmo que $valortotal -= 1;

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

[quote name='pmg' timestamp='1226062098' post='223957']
[b]Só se usa um sinal de + que para adicionar valores.[/b]

E não precisas de converter a variável em string ("$valortotal") para depois o PHP a converter em número antes da adição. Podes fazer tudo sem conversões.
E há um atalho para somar (ou subtrair ou muitas outras operações) um valor a uma quantidade.

[code=php]
## somar 2 a valor total, convertendo primeiro para string e depois para número
$valortotal = "$valortotal" + 2;

## somar 2 a valor total, sem conversões
$valortotal = $valortotal + 2;

## somar 2 a valor total, com atalho
$valortotal += 2;


Ainda há outro atalho (que não é prático para o teu exemplo) para somar ou subtrair 1 (um) a uma variável: o ++ (ou o --).
$valortotal++; ## o mesmo que $valortotal = $valortotal + 1;
$valortotal--; ## o mesmo que $valortotal -= 1;

Boas

Vou experimentar o que me descreves!

Mas outra coisa, porque é que quando tento gravar o valor final da variavel $valortotal, na base de dados, ele grava sempre a zero?

tenho que criar primeiro a variavel certo? E atribuir um valor á mesma? Antes de ela começar a somar valores!

Onde devo declarar essa variavel? Antes das Variaveis que tenho atribuidas (Dos POST)

Tenho:


$pergunta1= $_POST['pergunta1'];
$pergunta2= $_POST['pergunta2'];
$pergunta3= $_POST['pergunta3'];

$sql= ...........

Coloco a variavel valortotal por de baixo destes post??

Que valor lhe devo atribuir?

[/code]

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

É boa ideia declarar a variável antes de usá-la.

Podes declará-la logo a seguir aos $_POSTs e inicializá-la a 0 (zero).

Mas duvido que seja esse o teu problema. O PHP quando vê uma variável não declarada, automagicamente declara-a e inicializa-a a zero nesse ponto do script (a não ser que tenhas o php.ini configurado para impedir isso de acontecer).

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

É boa ideia declarar a variável antes de usá-la.

Podes declará-la logo a seguir aos $_POSTs e inicializá-la a 0 (zero).

Mas duvido que seja esse o teu problema. O PHP quando vê uma variável não declarada, automagicamente declara-a e inicializa-a a zero nesse ponto do script (a não ser que tenhas o php.ini configurado para impedir isso de acontecer).

Coloca-me sempre o valor da variavel a zero quando gravo na base de dados!

o codigo que tenho é:

<?php

$perg1 = $_POST["perg1"];
$perg2 = $_POST["perg2"];
$perg3 = $_POST["perg3"];
$perg4 = $_POST["perg4"];

$valor = 0;


if($_GET['btn'] == "gravar"){
$cadastrar = mysql_query("INSERT INTO dados (perg1, perg2, perg3, perg4, data, hora, valortotal) 
VALUES
('$perg1','$perg2','$perg3','$perg4',now(), now(), '$valor')",$db);

if ($_GET['$per1'] == 'Sim') {
     $valor= $valor + 2 ;
     }
if ($_GET['perg1'] == 'Nao') {
     $valor= $valor + 1 ;
     }

if ($_GET['$per2'] == '1') {
     $valor= $valor + 5 ;
     }
if ($_GET['$per2'] == '2') {
     $valor= $valor + 3 ;
     }

if ($_GET['$per2'] == '3') {
     $valor= $valor + 2 ;
     }
if ($_GET['per2'] == 'Mais que 5') {
     $valor= $valor + 1 ;
     }	



}
}
?>
[\code]

O que estará mal?
Parece que ele apenas coloca o valor que eu atribuir em cima á variavel!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Estás a usar o $valor antes de o calcular!

Muda o grupo de código com os if's para antes do INSERT.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Estás a usar o $valor antes de o calcular!

Muda o grupo de código com os if's para antes do INSERT.

Passei para cima mas continua a colocar a variavel valor a Zero!

Cada vez percebo menos disto!

O que estarei a fazer mal agora?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tens a certeza que o servidor recebeu as variáveis $_GET[] e $_POST[] no mesmo pedido?

E se recebeu, porque é que usas $_POST[] para as perguntas e $_GET[] para o valor?

Porque é que não usas sempre a mesma variável? ? ? ? ? ? ? ?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tens a certeza que o servidor recebeu as variáveis $_GET[] e $_POST[] no mesmo pedido?

E se recebeu, porque é que usas $_POST[] para as perguntas e $_GET[] para o valor?

Porque é que não usas sempre a mesma variável? ? ? ? ? ? ? ?

Para ser sincero nem sei bem!

Estava a tentar fazer algo simples, mas que se está a mostrar muito complicado!

Só queria ter um form no qual existisse perguntas, ja com respostas pré difinidas!

E caso cada resposta, seria atrubido um valor tipo a classificar a resposta!

Se estivesse certa, teria o valor 5 por exemplo, se estivesse errada, teria o valor 1.

E no final de todas as perguntas iria me dar o total somado de todas as respostas.

Tipo: acertou 5 perguntas entao teria 25, se acertasse apenas 2 teria 5+5+1+1.

Apenas queria que fizesse isto!

E depois grava as respostas na bese de dados e mostrava o valor final!

Mas estou a achar isto muito complicado!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas,

Faz echo das variaveis post ou get que estás a receber nessa página, a ver se elas estão a passar .. ou faz dump das variaveis ..

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas,

Faz echo das variaveis post ou get que estás a receber nessa página, a ver se elas estão a passar .. ou faz dump das variaveis ..

Boas

Fazer dump não sei fazer!

Isso é tipo um debug?? Como tenho no Visual Basic?

Faz correr a pagina linha a linha para se perceber com está a processar os dados?

Se for isso, como  faço um dump?

Em relação ao problema que tenho propriamente dito, acho que já descobri o mal.

Tinha

if ($_GET['$per1'] == 'Sim') {
     $valor= $valor + 2 ;
     }
if ($_GET['perg1'] == 'Nao') {
     $valor= $valor + 1 ;
     }

E deveria ter

if ($_POST['perg1'] == 'Sim') {
     $valor= $valor + 2 ;
     }
if ($_POST['perg1'] == 'Nao') {
     $valor= $valor + 1 ;
     }

Tinha o GET em vez do POST, e para alem que estava no sitio errado como me disse o pmg!

E tambem tinha '$perg1' em vez de 'perg1'

Assim que fiz estas alterações começou a funcionar como queria!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Fazer dump não sei fazer!

Isso é tipo um debug?? Como tenho no Visual Basic?

Faz correr a pagina linha a linha para se perceber com está a processar os dados?

Se for isso, como  faço um dump?

var_dump($_POST); //e o mesmo para $_GET

E, dump é basicamente.. Mostrar os valores de todos os índices de um array.

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