PHP Get, Random Records e o botão de volta
-
21-09-2019 - |
Pergunta
Meu site tem uma biblioteca cheia de jogos, nações, cenários de jogo etc.
library.php
é dado a type=___
& id=___
por exemplo library.php?type=scenario&id=ABCD001
library.php
salva o id
para uma variável de sessão e carrega um incluir apropriado para o type
Tudo isso funciona apenas dândi. Agora, eu queria dar aos meus usuários a opção de puxar um cenário aleatório. Para fazer isso, adicionei um especial id
para a lógica dentro lib-scenario.php
(a inclusão) que se for dado library.php?type=scenario&id=random
A inclusão sabe executar uma consulta alternativa para um registro aleatório, e não para o real id
Isso também funciona apenas dândi ... a não ser que alguém atinge o Random Scenario
botão duas vezes seguidas e decide que O cenário aleatório anterior era muito mais legal, eu quero ir de volta para isso.
Porque o endereço HTTP é sempre directory/library.php?type=scenario&id=random
Não importa quantas vezes você clique Random Scenario
, assim que você clicar de volta, você será levado para a última página com um endereço alternativo que visitou.
Então, se você começar no Home
página, e acertar Random Scenario
35 vezes, então decidir o 34º era o que você queria e clique BACK
, você será colocado de volta para o Home
página.
Devo admitir que isso não era um problema que eu havia previsto. Um dos meus testadores foi o primeiro a ter o desejo de fazer backup no fluxo de cenário aleatório e aqui estamos.
Como posso adicionar funcionalidade de backup ao meu script?
Solução
Faça o botão 'Cenário aleatório' simplesmente vincular a um ID de cenário real (mas aleatório). Você provavelmente terá que construir isso com uma consulta SQL para obter todos os IDs de seus cenários.
$result = mysql_query("SELECT id FROM scenarios");
while ($row = mysql_fetch_row($result)) {
$ids[] = $row[0];
}
$randomid = array_rand($ids);
Botão:
<a href="directory/library.php?type=scenario&id=<?php echo $randomid; ?>Random Scenario</a>
Se o seu cenário IDs forem todos números consecutivos, você pode simplesmente usar isso:
$randomid = rand($min, $max);
Outras dicas
Você pode resolver isso redirecionando para o URL canônico para o cenário, ou seja: id = redirecionamentos aleatórios para ID = A92831 ou o que quer que tenha sido selecionado. O URL final será armazenado na história, em vez do ID = URL aleatório.