Ir para conteúdo

POWERED BY:

Arquivado

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

mcaa

Teste em PHP

Recommended Posts

Amigos, estou com o codigo aqui mas o resultado do teste da errado. Tipo se eu marco la no formulario Concordo em todas as respostas ele me da o resultado T N J E, sendo que deveria me dar FPIN. Gostaria de saber o que esta errado neste codigo, e gostaria também de saber como eu ordeno a impressão desses dados, tipo em TNJE não existe esta ordem, o certo é ENTJ.

 

 

 

formulario.html

<form method="post" action="teste.php" target="_self">

<ol>

<li>Valorizo muito a harmonia. Evito confrontos pois acredito serem  
menos eficazes que acordos mútuos.<br><!--Sua maneira de avaliar, julgar, organizar e decidir-->
<input type="radio" name="q1" value="F" >Concordo<br>
<input type="radio" name="q1" value="" checked>Neutro<br>
<input type="radio" name="q1" value="T">Discordo<br>
<br>

<li>Trabalho melhor com mudanças e imprevistos. Gosto de novidades.
Creio que não há nada pior para uma pessoa que viver uma vida monótona 
em casa e no trabalho. <br>												<!--Seu estilo de vida-->
<input type="radio" name="q2" value="P">Concordo<br>
<input type="radio" name="q2" value="" checked>Neutro<br>
<input type="radio" name="q2" value="J">Discordo<br>



<br>
<li>Mantenho um círculo pequeno de amigos. Quando estou em grupo
prefiro conversar a sós com pessoas que conheço, acho incomodo conversar com
pessoas que acabo de conhecer.<br>		<!-- Sua fonte  de energia -->		
<input type="radio" name="q3" value="I" >Concordo<br>
<input type="radio" name="q3" value="" checked>Neutro<br>
<input type="radio" name="q3" value="E">Discordo<br>


<br>
<li>Gosto de complexidade. Valorizo mais ideias e possibilidades do que coisas
concretas. Tiro notas altas. Me arrisco por grandes ganhos. <br>  <!--Seu modo de perceber o mundo-->
<input type="radio" name="q4" value="N">Concordo<br>
<input type="radio" name="q4" value="" checked>Neutro<br>
<input type="radio" name="q4" value="S">Discordo<br>

<br>

</ol>


<input type="submit" value="Enviar">

</form>

 

 

 

teste.php

 


<?php

$somaf = 0;
$somat = 0;
$somap = 0;
$somaj = 0;
$somai = 0;
$somae = 0;
$soman = 0;
$somas = 0;


$p = array();/* array para guardar os quatros tipos de variação de siglas*/
$siglaFt[1] =  $_POST['q1'];
$siglaSn[1] =  $_POST['q2'];
$siglaPj[1] =  $_POST['q3'];
$siglaIe[1] =  $_POST['q4'];



for($i=1; $i < 4;$i++){

       if($siglaFt[$i] = 'F'){

               $somaf += $somaf;
               }else{

               $somat += $somat;

       }
}

       if($somaf > $somat){

               $resultft = 'F';

               }else{

                       $resultft = 'T';
       }


for($i=1; $i < 4;$i++){

       if($siglaSn[$i] = 'S'){


               $somas += $somas;
               }else{

               $soman += $soman;

       }
}

if($somas > $soman){

               $resultsn = 'S';

               }else{

                       $resultsn = 'N';
       }

for($i=1; $i < 4;$i++){

       if($siglaPj[$i] = 'P'){


               $somap += $somap;
               }else{

               $somaj += $somaj;

       }
}

if($somap > $somaj){

               $resultpj = 'P';

               }else{

                       $resultpj = 'J';
       }

       for($i=1; $i < 4;$i++){

       if($siglaIe[$i] = 'I'){


               $somai += $somai;
               }else{

               $somae += $somae;

       }

}

if($somai > $somae){

               $resultie = 'I';

               }else{

                       $resultie = 'E';
       }


echo "As siglas de sua personalidade são : $resultft  $resultsn $resultpj $resultie  Não necessariamente nesta ordem<br/> ";

/*aqui quero que me direcione para a pagina da personalidade*/

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

percebeu q ao somar uma variavel q eh 0, com ela mesma dara 0? reveja esta logica...<br>

 

Ali não estou somando variavel 0 com 0, ali estou somando variavel +1, por isso coloquei $somas+ = $somas; esse + significa +1

Mas o erro não está ai, pois troquei para $somas = $somas + 1; e continua na mesma. Eu testei for por for, e está funcionando certo, somadores estão somando certo e os laços também estão rodando ok. Só não entendo por que mesmo eu mudando minha respostas sempre da o mesmo resultado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ali não estou somando variavel 0 com 0, ali estou somando variavel +1, por isso coloquei $somas+ = $somas; esse + significa +1

Mas o erro não está ai, pois troquei para $somas = $somas + 1; e continua na mesma. Eu testei for por for, e está funcionando certo, somadores estão somando certo e os laços também estão rodando ok. Só não entendo por que mesmo eu mudando minha respostas sempre da o mesmo resultado.

 

nao, você esta somando ela com ela mesma, e qual o seu valor inicial? 0, você tem q fazer assim $var++ ae sim rola...

se $somas = 0

$somas+ = $somas -> 0

$somas++ -> 1

 

vai dando echo pra você ver q estou falando ...

Compartilhar este post


Link para o post
Compartilhar em outros sites

nao, você esta somando ela com ela mesma, e qual o seu valor inicial? 0, você tem q fazer assim $var++ ae sim rola...

se $somas = 0

$somas+ = $somas -> 0

$somas++ -> 1

 

vai dando echo pra você ver q estou falando ...

 

 

Bem como disse anteriormente o problema não está ai pois fiz da outra forma ($somas = $somas + 1;) e continua na mesma, também como disse anteriormente testei pedaço por pedaço do codigo e parece estar tudo certo dei echo para cada soma e tudo ok, dei echo para cada respostsn e outras e tb deu tudo certo. Tenta executar ai para você ver do que estou falando, mesmo se você fizer o teste uma vez saira o resultado x para você, e se você fizer novamente com respostas diferentes sairá o mesmo resultado de antes.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sua logica esta errada. Qual a necessidade real (requisito)?

 

 

A intenção é:

 

 

aqui iniciando os somadores

$somap = 0;
$somai = 0;
$somae = 0;

 

 

Aqui é criado um array que possui os vetores que são os 4 tipos possiveis existentes para cada personalidade, ai quero dizer que $siglaft[] é um vetor que receberá os valores F ou T que receberão da q1 que é a questão do formulario,html. uqe avalia se a pessoa é F ou T, erntão esse vetor só vai receber um dos dois valores da questão 1, e assim por diante.

 

$p = array();  
$siglaft[] = $_POST['q1'];
$siglapj[] = $_POST['q2'];
$siglaie[] = $_POST['q3'];
$siglasn[] = $_POST['q4'];

 

 

Aqui coloco um laço para percorrer todas as questões referentes no vetor da condição, neste caso no vetor $siglaft, ou seja se este vetor na q1 receber F então vai somar + 1 na variavel $somaf que ira somar so resultados para f e o mesmo acontece caso a pessoa responda com valor T


for($i=1; $i < 5;$i++){/*Laço contador que irá contar os vetores*/

if($siglaft[$i] = 'F'){

	$somaf = $somaf + 1;
	}else{

	$somat = $somat + 1;

}
}


 

 

Aqui nesta condição vai averiguar qual dos somadores é maior, se o somador maior for somaf então a variavel $resultft vai receber F ou vise versa.

if($somaf > $somat){/*condião que ira dizer qual letra é predominante*/

	$resultft = 'F'; 

	}else{

		$resultft = 'T';
}


 

 

No final ele deve me dar o resultado das variaveis resultft, resultsn, etc. para eu poder saber qual foi o resultado do teste, qual sigla de personalidade a pessoa se encaixa.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Algumas coisas não estão encaixando.

 

Onde você usa a variável $p?

Você faz 4x um for, sempre de 4 iterações, 4x4=16, você tem 4 perguntas no seu questionário, não entendi o for.

Você inicia todas as suas variáveis com 0 e soma com o valor dela mesma, você pode somar 1000x, vai ser sempre 0.

Sua resposta sempre vai ser TNJE, por causa da soma sempre ser 0, não há possibilidade de ser algo diferente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Algumas coisas não estão encaixando.

 

Onde você usa a variável $p?

Você faz 4x um for, sempre de 4 iterações, 4x4=16, você tem 4 perguntas no seu questionário, não entendi o for.

Você inicia todas as suas variáveis com 0 e soma com o valor dela mesma, você pode somar 1000x, vai ser sempre 0.

Sua resposta sempre vai ser TNJE, por causa da soma sempre ser 0, não há possibilidade de ser algo diferente.

foi o q falei la encima...

Compartilhar este post


Link para o post
Compartilhar em outros sites

O razão pela qual a resposta é sempre a mesma é porque você não está usando o operador lógico correto nos if s:

" ($siglaFt[$i] = 'F') "

Essa expressão vai sempre "entrar" no if porque você está atribuindo 'F' à variável $siglaFt[$i] e 'F' tem um valor lógico 'true'.

O correto seria:

" ($siglaFt[$i] == 'F') "

Esse erro foi repetido para as 4 variaveis.

 

A ordem no resultado final depende da ordem das variáveis que você pôs na string...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Algumas coisas não estão encaixando.

 

Onde você usa a variável $p?

Você faz 4x um for, sempre de 4 iterações, 4x4=16, você tem 4 perguntas no seu questionário, não entendi o for.

Você inicia todas as suas variáveis com 0 e soma com o valor dela mesma, você pode somar 1000x, vai ser sempre 0.

Sua resposta sempre vai ser TNJE, por causa da soma sempre ser 0, não há possibilidade de ser algo diferente.

 

 

OK, o for é pq posteriormente acrescentarei mais perguntas, so coloquei 4 perguntas para fins de teste. Bem se eu somar

$somas= $somas + 1; dá no mesmo, o erro não está ai.

 

O razão pela qual a resposta é sempre a mesma é porque você não está usando o operador lógico correto nos if s:

" ($siglaFt[$i] = 'F') "

Essa expressão vai sempre "entrar" no if porque você está atribuindo 'F' à variável $siglaFt[$i] e 'F' tem um valor lógico 'true'.

O correto seria:

" ($siglaFt[$i] == 'F') "

Esse erro foi repetido para as 4 variaveis.

 

A ordem no resultado final depende da ordem das variáveis que você pôs na string...

 

No primeiro codigo que fiz fiz dessa forma com ==, mas apareceu o erro pra mim, e agora que fiz novamente ele persiste:

 

Notice: Undefined offset: 1 in C:\...\teste.php on line 17

 

O razão pela qual a resposta é sempre a mesma é porque você não está usando o operador lógico correto nos if s:

" ($siglaFt[$i] = 'F') "

Essa expressão vai sempre "entrar" no if porque você está atribuindo 'F' à variável $siglaFt[$i] e 'F' tem um valor lógico 'true'.

O correto seria:

" ($siglaFt[$i] == 'F') "

Esse erro foi repetido para as 4 variaveis.

 

A ordem no resultado final depende da ordem das variáveis que você pôs na string...

 

No primeiro codigo que fiz fiz dessa forma com ==, mas apareceu o erro pra mim, e agora que fiz novamente ele persiste:

 

Notice: Undefined offset: 1 in C:\...\teste.php on line 17

Compartilhar este post


Link para o post
Compartilhar em outros sites

Qual a resultado esperado desse script? São aquelas sequencias de letras? Pq simplesmente não pega a resposta do form e exibe? Não entendi ainda para que precisa desses somatórios e dos loops. O Vinicius observou muito bem, seus testes não estão usando operadores lógicos (==), você esta usando um operador de atribuição de valor (=), como ele já explicou, se você faz isso num teste, sempre será verdadeiro.

 

Repare que a mensagem apresentada é do tipo NOTICE, isto não afeta o funcionamento do script, mas é bom resolver. Em PHP os arrays iniciam na posição zero (0).

 

Minha sugestão: Refaça todo o seu script.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Qual a resultado esperado desse script? São aquelas sequencias de letras? Pq simplesmente não pega a resposta do form e exibe? Não entendi ainda para que precisa desses somatórios e dos loops. O Vinicius observou muito bem, seus testes não estão usando operadores lógicos (==), você esta usando um operador de atribuição de valor (=), como ele já explicou, se você faz isso num teste, sempre será verdadeiro.

 

Repare que a mensagem apresentada é do tipo NOTICE, isto não afeta o funcionamento do script, mas é bom resolver. Em PHP os arrays iniciam na posição zero (0).

 

Minha sugestão: Refaça todo o seu script.

Por favor pessoal preciso de uma solução, acho que ninguém esta fazendo o teste para ver como ele está funcionando. Rodem o teste para ver como ele esta funcionando, ai vai ficar mais facil vocês me darem um caminho.

Compartilhar este post


Link para o post
Compartilhar em outros sites

É verdade... toma aí seu código sem erros e funcionando.

 

<?php

$somaf = 0;
$somat = 0;
$somap = 0;
$somaj = 0;
$somai = 0;
$somae = 0;
$soman = 0;
$somas = 0;


$siglaFt[] =  $_POST['q1'];
$siglaPj[] =  $_POST['q2'];
$siglaIe[] =  $_POST['q3'];
$siglaSn[] =  $_POST['q4'];



       if($siglaFt[0] == 'F'){

               $somaf++;
               }else{

               $somat++;

       }

       if($somaf > $somat){

               $resultFt = 'F';

               }else{

                       $resultFt = 'T';
       }


       if($siglaSn[0] == 'S'){


               $somas++;
               }else{

               $soman++;

       }

if($somas > $soman){

               $resultSn = 'S';

               }else{

                       $resultSn = 'N';
       }


       if($siglaPj[0] == 'P'){


               $somap++;
               }else{

               $somaj++;

       }


if($somap > $somaj){

               $resultPj = 'P';

               }else{

                       $resultPj = 'J';
       }


       if($siglaIe[0] == 'I'){


               $somai++;
               }else{

               $somae++;

       }



if($somai > $somae){

               $resultIe = 'I';

               }else{

                       $resultIe = 'E';
       }


echo "As siglas de sua personalidade são : $resultFt  $resultSn $resultPj $resultIe  Não necessariamente nesta ordem<br/> ";

/*aqui quero que me direcione para a pagina da personalidade*/

?>

 

Agora... deixe de ser teimoso!

Compartilhar este post


Link para o post
Compartilhar em outros sites

É verdade... toma aí seu código sem erros e funcionando.

 

<?php

$somaf = 0;
$somat = 0;
$somap = 0;
$somaj = 0;
$somai = 0;
$somae = 0;
$soman = 0;
$somas = 0;


$p = array();/* array para guardar os quatros tipos de variação de siglas*/
$siglaFt[] =  $_POST['q1'];
$siglaSn[] =  $_POST['q2'];
$siglaPj[] =  $_POST['q3'];
$siglaIe[] =  $_POST['q4'];



       if($siglaFt[0] == 'F'){

               $somaf++;
               }else{

               $somat++;

       }

       if($somaf > $somat){

               $resultft = 'F';

               }else{

                       $resultft = 'T';
       }


       if($siglaSn[0] == 'S'){


               $somas++;
               }else{

               $soman++;

       }

if($somas > $soman){

               $resultsn == 'S';

               }else{

                       $resultsn = 'N';
       }


       if($siglaPj[0] == 'P'){


               $somap++;
               }else{

               $somaj++;

       }


if($somap > $somaj){

               $resultpj = 'P';

               }else{

                       $resultpj = 'J';
       }


       if($siglaIe[0] == 'I'){


               $somai++;
               }else{

               $somae++;

       }



if($somai > $somae){

               $resultie = 'I';

               }else{

                       $resultie = 'E';
       }


echo "As siglas de sua personalidade são : $resultft  $resultsn $resultpj $resultie  Não necessariamente nesta ordem<br/> ";

/*aqui quero que me direcione para a pagina da personalidade*/

?>

 

Agora... deixe de ser teimoso!

 

 

Não ta dando certo aqui, eu preciso que haja o for pois depois entrarão outras perguntas tipo

 

$siglaFt[] =  $_POST['q1']['q5'];
$siglaSn[] =  $_POST['q2']['q6'];
$siglaPj[] =  $_POST['q3']['q7'];
$siglaIe[] =  $_POST['q4'];  ...

 

Com esse codigo que você mandou eu concordei com todas as opções do formulario, o certo , segundo esta no formulario, FPIN mas ele me deu FNJE , e se discordo em todas as perguntas ele me da TNJE sendo que o certo seria TJES. Continua errado. Quero entender onde está o problema e conto com a colaboração de vocês.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, então coloque o problema REAL!

Sua lógica no outro script esta totalmente equivocada.

 

Rode o script novamente, fiz alguns acertos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, então coloque o problema REAL!

Sua lógica no outro script esta totalmente equivocada.

 

Rode o script novamente, fiz alguns acertos.

 

 

 

O problema real eh:

 

a pessoa responde as questoes do formulario, como e teste ha apenas 5 questoes, cada questão tem valor F T S e assim por diante como esta abaixo:

 

<li>Valorizo muito a harmonia. Evito confrontos pois acredito serem  
menos eficazes que acordos mútuos.<br><!--Sua maneira de avaliar, julgar, organizar e decidir-->
<input type="radio" name="q1" value="F" >Concordo<br>
<input type="radio" name="q1" value="" >Neutro<br>
<input type="radio" name="q1" value="T">Discordo<br>

 

 

Ou seja se eu concordo será F senão será T. Beleza.

Lá no php existem variavel que receberá as respostas desta pergunta 1 (q1), que no caso creio que teria que ser um vetor pois não é apenas um valor que ele vai guardar, posteriormente entrarão mais perguntas que avaliarão esse critério de F ou T.

 

Depois preciso saber quantas perguntas a pessoa marcou com valor F ou T e vale para as outras siglas também. Se ela marcar as perguntas e prevalecer a letra F então imprimo o resultado F para ela senão imprimo T.

 

Captaram?

 

E ai pessoal, nada?

 

Pessoal olha o novo codigo que fiz, esse ta funcionando direitinho:

 

<?php

//iniciando variavel contadora 
$somaf = 0;
$somat = 0;
$somap = 0;
$somaj = 0;
$somai = 0;
$somae = 0;
$soman = 0;
$somas = 0;



$resp1 = $_POST['q1'];
$resp2 = $_POST['q2'];
$resp3 = $_POST['q3'];
$resp4 = $_POST['q4'];
$resp5 = $_POST['q5'];




	if($resp1 == 'F'){

		$somaf = $somaf + 1;
	}else {

		$somat = $somat + 1;
	}


	if($resp2 == 'P'){

	$somap = $somap + 1;
	}else {

		$somaj = $somaj + 1;
	}


	if($resp3 == 'I'){

	$somai = $somai + 1;
	}else{
		$somae = $somae + 1;
	}

	if($resp4 == 'N'){

	$soman = $soman + 1;
	}else{
		$somas = $somas + 1;
	}

	if($resp5 == 'F'){

	$somaf = $somaf + 1;
	}else{
		$somat = $somat + 1;
	}


if($somaf > $somat){
$resultft = 'F';
}else{	
$resultft = 'T';
}


if($somap > $somaj){
$resultpj = 'P';
}else{	
	$resultpj = 'J';
}

if($somai > $somae){
$resultie = 'I';
}else{	
	$resultie = 'E';

}
if($soman > $somas){
	$resultns = 'N';
	}else{	
	$resultns = 'S';
}
/*
if($resultado = 'INFP'){
header ('Location: infp.html');
}else{
header ('Location: estj.html');
}
*/


echo "As siglas de sua personalidade são : $resultie $resultns $resultft  $resultpj  <br/> ";
/*header ('Location: minhapagina.php'); /*aqui quero que me direcione para a pagina da personalidade*/

?>

 

 

O problema é que conforme vai aumentando numero de perguntas maior vai ficando o codigo pois fiz a analise de pergunta por pergunta. Vocês tem alguma ideia ai para melhorar esse codigo, torna-lo mais enxuto?

 

ninguém vai me dar uma força aqui pessoal?

Vou dar como encerrado então o post, mas esse código tá muito furreco, não esta digno deste forum.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Já identifiquei uma falha, porque você trabalha sempre com "Verdadeiro", "Falso" e "Nulo". Mas na lógica, quando não é Verdadeiro, você adiciona automaticamente ao falso.

 

começamos criando uma lista de possibilidades:

$answers = array(
   'F' => 0,
   'T' => 0,
   'P' => 0,
   'J' => 0,
   'N' => 0,
   'S' => 0
);

 

Aplicamos uma somatória recursiva de acordo com as respostas:

foreach ($_POST as $q) {
   if (isset($answers[$q])) {
       $answers[$q} += 1;
   }
}

 

Agora basta ordenar quem recebeu mais votos e imprimir os 3 primeiros

sort($answers, SORT_NUMERIC);
print_r(array_slice($answers, 0, 3);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Já identifiquei uma falha, porque você trabalha sempre com "Verdadeiro", "Falso" e "Nulo". Mas na lógica, quando não é Verdadeiro, você adiciona automaticamente ao falso.

 

começamos criando uma lista de possibilidades:

$answers = array(
   'F' => 0,
   'T' => 0,
   'P' => 0,
   'J' => 0,
   'N' => 0,
   'S' => 0
);

 

Aplicamos uma somatória recursiva de acordo com as respostas:

foreach ($_POST as $q) {
   if (isset($answers[$q])) {
       $answers[$q} += 1;
   }
}

 

Agora basta ordenar quem recebeu mais votos e imprimir os 3 primeiros

sort($answers, SORT_NUMERIC);
print_r(array_slice($answers, 0, 3);

 

 

Beleza, vou testar aqui. Mas como eu faço para uma variável php receber 4 valores , tipo quero que uma variavel receba o resultado de $resultie $resultns $resultft $resultpj , para ficar assim, dependendo do resultado INFP, etc.

 

$resultado == $resultie $resultns $resultft  $resultpj ; /*aqui a variavel resultado recebera os valores correspondentes das variaveis
mencionadas, esta certo?*/

if($resultado = 'INFP'){/*nessa condição se a variavel $resultado receber os caracteres INFP então vai em direcionar para 
a pagina infp.html, senão vai me direcionar para a janela estj.html com os resultados das respectivas personalidades*/
header ('Location: infp.html');
}else if ($resultado = 'ESTJ'){
header ('Location: estj.html');
}

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.