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

PaLobo

[PHP]Aleatorização com arrays e sessões.

2 mensagens neste tópico

Na minha recente aprendizagem de PHP (para  este projecto), deparei-me com uma pequena barreira que afinal de contas foi mais simples de resolver do que aquilo que pensava. Na esperança que a solução que eu encontrei para este problema, ajude outros utilizadores, coloco aqui o código e sua respectiva explicação.

Problema:

Criar um site para um estudo psicológico, onde participantes terão de visualizer a posteriormente avaliar várias imágens.

Requisito:

As imagens têm que ser apresentadas de forma aleatória e apenas uma vez cada (21 no total).

Comecemos então...

Para cada imagem, temos um ficheiro específico chamado foto*.php. Criamos portanto um array com todos os ficheiros foto*.php. Em seguida, baralhamos os elementos do array e apresentamos o primeiro elemento da seguinte forma:

<?php
    
  //index.php

  session_start(); //iniciamos uma sessão. Será explicado o seu funcionamento mais abaixo.

  //criamos a array e atribuimos o seu valor a uma variável que será transportada para as outras páginas na sessão.

  $_SESSION['rand']= array('foto1.php', 'foto2.php','foto3.php', 'foto4.php', 'foto5.php', 'foto6.php', 'foto7.php', 'foto8.php', 'foto9.php', 'foto10.php', 'foto11.php', 'foto12.php', 'foto13.php', 'foto14.php', ' foto15.php', 'foto16.php','foto17.php', 'foto18.php', 'foto19.php', 'foto20.php', 'foto21.php');

  shuffle($_SESSION['rand']); // Utilizamos o shuffle() para baralhar os elementos da array.

  $_SESSION['i'] = 0;           //Inicializamos mais uma variável que iremos passar para outras páginas na mesma sessão.
  $_a = $_SESSION['rand'];
    
  echo "Por favor clique em continuar quando estiver pronto(a) para prosseguir. <br>";
  echo "<a href='$_a[0]'><b>Continuar:</b></a>";                    
    
?>

Cada ficheiro foto*.php tem sensívelmente o mesmo formato, variando apenas a imagem apresentada.

<?php

  //foto1.php

  session_start();

  $_SESSION['i'] = $_SESSION['i']+1;    //Variável que passou da sessão anterior, incrementamos para aceder ao próximo elemento na array.
  $_a = $_SESSION['rand'];
  $_i = $_SESSION['i'];
    
?>

<html>
...
<body>
    
    <?php

    if ($_i <= 21){
        
        echo "<form name='form1' method='post' action='$_a[$_i]'>";  //Ao submeter, a informação passará para a página que se encontra na posição $_i da array $_a.
                
        echo "<p>Por favor avalie a seguinte imagem numa escala de 1 a 9, sendo que 1 é muito desagradável e 9 muito agradável.</p>";
        echo "1 <input name=' f1.1' type='radio' value='1'>";
        echo "2 <input name='f1.1' type='radio' value='2'>";
        echo "3 <input name='f1.1' type='radio' value='3'>";
        echo "4 <input name=' f1.1' type='radio' value='4'>";
        echo "5 <input name='f1.1' type='radio' value='5'>";
        echo "6 <input name='f1.1' type='radio' value='6'>";
        echo "7 <input name=' f1.1' type='radio' value='7'>";
        echo "8 <input name='f1.1' type='radio' value='8'>";
        echo "9 <input name='f1.1' type='radio' value='9'>";
    
        echo "<input type='submit' name='Submit' value='Submit'>";
        
        echo "</form>";
                            
    }
    else {
        include("fim.php");   // Desta forma, apresentamos a página fim.php
    }
    
?>

</body>
</html>

Explicação:

o que permite que este meu código funcione, são as variáveis de sessão. Com variáveis de sessão, podemos passar informação de uma página para a outra. A informação é guardada no servidor, em cookies ou enviada na URL. Um Exemplo do uso de sessãoes poderá ser no login de um site. Escrevemos o nosso nome e nas restantes páginas... lá está ele.

Para utilizar-mos variáveis de sessões, temos que primeiro iniciar a sessão. Isto de verá ser feito antes de tudo o resto, com o código session_start();.

Em seguida, poderemos declarar e utilizar variáveis da seguinte forma: $_SESSION['variável'] = "qualquer coisa";.

Não irei aprofundar muito mais sobre sessões pois existe muito informação disponível.

O funcionamento do programa resume-se a isto:

Crio uma array com todos aas páginas que quero aceder. atribuo essa array a uma variável de sessão. (Estando assim disponível nas restantes páginas). Em seguida, crio e inicializo mais uma variável de sessão onde ficará guardado o indice actual da array. Dessa forma, sabemos onde estivemos e para onde vamos. Em cada nova página, verificamos se já percorremos a array toda, senão, incrementamos o indice e continuamos com o código. Uma vez percorrida a array toda, saltamos para outra página.

Espero que este pequeno tutorial seja útil. Quiasquer correcções de gralhas, críticas e ou sugestões são muito bem vindas. Só assim posso escrever melhores ajudas no futuro.

Nota:

Não abordei o envio dos dados para a BD, mas essa seria a etapa seguinte.

Referências

http://www.w3schools.com/php/php_sessions.asp

http://pt.php.net/manual/en/function.session-start.php

http://pt.php.net/session

Fiquem bem,

P.

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