Итак, по сути, у меня есть система входа / регистрации сеанса в php, и я перенаправляю пользователя в файл start.php, который покажет навигацию, которая читается из массива.
Это мой сценарий:
После успешного входа пользователя с помощью login.html
и login.php
перенаправьте пользователя на start.php
или разрешите пользователю перейти на start.php
. В start.php
случайным образом выберите один php из sql1.php
- sql10.php
(со случайными функциями) и добавьте его как ссылку в start.php
(показан пример, чтобы пользователь мог перейти на выбранную страницу).
Например, если выбрано sql3.php
, пользователь сможет щелкнуть и посетить sql3.php
из start.php
после входа в систему.
Когда пользователь нажимает на следующую страницу, новая страница будет случайным образом выбираться из sql1.php
- sql10.php
, исключая те, которые уже были выбраны. Например, если пользователь нажимает sql3.php
, на странице sql3.php
появится новая информация, например, (sql7.php
и иметь новую следующую страницу) с новой выбранной страницей (предположим, что на этот раз sql7.php
и sql3.php
не следует выбирать).
Разрешить пользователю нажимать на предыдущую страницу, чтобы вернуться на предыдущую или следующую страницу каждый раз, когда пользователь попадает на новую страницу. Если все файлы sql1.php
- sql10.php
выбраны случайным образом в вышеуказанном процессе, то в последнем
выбранная страница, не отображать ссылку на следующую страницу.
код следующим образом
session_start();
if( !isset($_SESSION['username']) ) {
header("Location: login.html");
}
$stack = array();
array_push($stack, 'sql1.php');
array_push($stack, 'sql2.php');
array_push($stack, 'sql3.php');
array_push($stack, 'sql4.php');
array_push($stack, 'sql5.php');
array_push($stack, 'sql6.php');
array_push($stack, 'sql7.php');
array_push($stack, 'sql8.php');
array_push($stack, 'sql9.php');
array_push($stack, 'sql10.php');
$orderedstack = array();
$unorderedstack = array();
if(isset($_SESSION['stack'], $_SESSION['orderedstack'], $_SESSION['unorderedstack'])){
$stack = $_SESSION['stack'];
$orderedstack = $_SESSION['orderedstack'];
$unorderedstack = $_SESSION['unorderedstack'];
}
$count = count($unorderedstack);
if(!empty($stack)){
$i = 0;
while($i < 10){
$i ++;
$mixing = $stack[array_rand($stack)];
/* array_rand randomly returns the the key of $stack. In this scenario it's mixing the keys of the array */
array_push($unorderedstack, $mixing);
$coreinfo = array_search($mixing,$stack);
if($coreinfo!==false){
unset($stack[$coreinfo]);
}
/* Using array_search, once the file is located, the keys of the found file is used for the buttons ($currentpage, $lastpage and $thenextpage)*/
}
}
if(isset($_GET['next'])){
if(count($orderedstack) < 10){
$thenextpage = array_pop($unorderedstack);
array_push($orderedstack, $thenextpage);
$coreinfo = array_search($thenextpage,$orderedstack);
if($coreinfo!==false && count($orderedstack) > 1){
$currentfile = $orderedstack[$coreinfo-1];
}
if($coreinfo!==false && count($orderedstack) > 2){
$lastpage = $orderedstack[$coreinfo-2];
}
}
}
if(isset($_GET['back'])){
$prevfile = array_pop($orderedstack);
array_push($orderedstack, $prevfile);
$coreinfo = array_search($prevfile,$orderedstack);
if($coreinfo!==false && count($orderedstack) > 2){
$currentfile = $orderedstack[$coreinfo-2];
}
if($coreinfo!==false && count($orderedstack) > 3){
$lastpage = $orderedstack[$coreinfo-3];
}
if($coreinfo!==false && count($orderedstack) > 2){
$thenextpage = $orderedstack[$coreinfo-1];
}
$switch = array_pop($orderedstack);
array_push($unorderedstack, $prevfile);
}
/*Using echo we created HTML tags and elements to create a form. We added buttons to navigate between the files. The form's method is get, since it's insensitive info, and the button's names is back and next. Using if statements and binary search, we were able to make sure no files were being repeated.*/
?>
<html>
<head>
<title>Start.php - Reece, Courtney and Ros</title>
<style>
.box{
text-align: center;
}
p{
color: red;
}
h1{
text-align: center;
}
</style>
</head>
<body>
<?php
if (count($orderedstack) <=1) {
echo '<h1>start.php</h1>';
echo '<div class="box">
<form method="GET">';
echo '<button name = "next">This button will select a random sql{i}.php file</button>
</form>
</div>';
} elseif (count($orderedstack) <=2) {
echo '<h1><a href=" '. $currentfile . '">' . $currentfile . ' </a></h1>
<br>';
echo '<div class="box">
<form method="GET">
<button name="back">Go back to start.php starting page</button>';
echo '<p>' . $currentfile . ' is being displayed</p>';
echo '<button name = "next">The next sql{i}.php file will be ' . $thenextpage . '</button>
</form>
</div>';
} elseif (count($orderedstack) < 10) {
echo '<h1><a href=" '. $currentfile . '">' . $currentfile . ' </a></h1>
<br>';
echo '<div class="box">
<form method="GET">
<button name="back">The previous sql{i}.php file was ' . $lastpage . '</button>';
echo '<p>' . $currentfile . ' is being displayed</p>';
echo '<button name = "next">The next sql{i}.php file will be ' . $thenextpage . '</button>
</form>
</div>';
} elseif (count($orderedstack) == 10) {
echo '<h1><a href=" '. $currentfile . '">' . $currentfile . ' </a></h1>
<br>';
echo '<div class="box">
<form method="GET">
<button name="back">You reached the last file, press here to go back</button>';
echo '<p>' . $currentfile . ' is being displayed</p>
</form>
</div>';
}
$_SESSION['stack'] = $stack;
$_SESSION['unorderedstack'] = $unorderedstack;
$_SESSION['orderedstack'] = $orderedstack;
?>
<button type="button"><a href="logout.php" >Logout</a></button>
</body>
</html>
Хотелось бы узнать об укороченном способе сделать это, но все еще используя стек, или есть ли другие способы, которыми я могу выполнить это без стека?
Я хотел бы оптимизировать его для использования в Интернете, если это возможно для будущих проектов.