Subject: | Really great idea and example! Be... |
Summary: | Package rating comment |
Messages: | 5 |
Author: | Terry Woody |
Date: | 2016-12-21 23:08:24 |
|
|
|
Terry Woody rated this package as follows:
Utility: | Good |
Consistency: | Good |
Documentation: | Good |
Examples: | Good |
|
Terry Woody - 2016-12-21 23:08:24
Really great idea and example!
Be great if could submit numbers (links) using ajax so page did not refresh each time though. Maybe using buttons 1-9 or something like https://jsfiddle.net/qekeztn2/
If I were sharp enough, would make the mod but out of my league:)
Nevertheless, thumbs up and thank you for sharing.
Cheers,
Woody
Dave Smith - 2016-12-22 01:09:42 - In reply to message 1 from Terry Woody
The example is a simple implementation to demonstrate the basic usage, however the idea is to actually link to different pages on your site so that the user has to navigate these pages correctly to be validated.
The jsfiddle example you provided uses javascript, not ajax, and is not the right direction.
If you wanted to stay on the same page without the refresh, you would use ajax. I would use jquery, which has decent ajax implementation. Basically you would use the click() event handler to send an ajax request to a processing file which would return false or true if the secret path was completed successfully. If it returned true, you could then send the user to the hidden page.
Your process file would look something like this...
<?php
session_start();
include('secretpath.class.php');
if( empty($_SESSION['secpth']) ){
$path = array(1,2,3,2,2);
$secpth = new secretPath('link',$path);
}else{
$secpth = unserialize($_SESSION['secpth']);
}
echo $secpth->validatePath();
$_SESSION['secpth'] = serialize($secpth);
?>
Dave
Terry Woody - 2016-12-22 15:29:03 - In reply to message 2 from Dave Smith
Thanks for input Dave.
Had tried the ajax route before posting here using a process.php:
<?php
/*
secretPath class
version 1.0 10/21/2016
Authorize access based on the sequence of user clicks
*/
//start session - sequence saved in $_SESSION super global
session_start();
//include class source
include('secretpath.class.php');
//instantiate the class or define class object from saved data
if( empty($_SESSION['secpth']) ){
$path = array(1,2,3,2,2);
$secpth = new secretPath('link',$path);
}else{
$secpth = unserialize($_SESSION['secpth']);
}
//test user click sequence and send to secret page if sequence completed
//correctly
if( $secpth->validatePath() === true ){
//it is important to save the class object before re-directing
$_SESSION['secpth'] = serialize($secpth);
header('location: secret.php');
exit;
}
//save class object to session
$_SESSION['secpth'] = serialize($secpth);
?>
and get the error:
Call to a member function validatePath() on null on line 25
(note: using your example get error on line 10)
Must be my actual ajax script. Wasn't positive if ajax would even work with your class, will explore little deeper.
Cheers!
Dave Smith - 2016-12-25 06:18:29 - In reply to message 3 from Terry Woody
I finally got a chance to work up a proof of concept, here is what worked for me...
ajaxtest.html
<html>
<head>
<title>Secret Path Example</title>
<script src="jquery-3.1.1.min.js"></script>
<script>
$(document).ready(function(){
$("#clickEvent a").click(function(e){
var idVal = $(this).attr('id');
e.preventDefault();
$.ajax({
method: "POST",
url: "process.php",
data: { link: idVal }
})
.done(function( returnVal ) {
if( returnVal == true ){
alert('True');
}else if( returnVal == false ){
alert('False');
}else{
alert('Error');
}
});
return false;
});
});
</script>
</head>
<body>
Default secret path is link: 1,2,3,2,2<br><br>
<div id="clickEvent">
<a href="?link=1" id="1">Link 1</a><br>
<a href="?link=2" id="2">Link 2</a><br>
<a href="?link=3" id="3">Link 3</a><br>
<a href="?link=4" id="4">Link 4</a><br>
<a href="#" id="0">Link 5</a><br>
</div>
</body>
</html>
process.php
<?php
session_start();
include('secretpath.class.php');
if( empty($_SESSION['secpth']) ){
$path = array(1,2,3,2,2);
$secpth = new secretPath('link',$path);
}else{
$secpth = unserialize($_SESSION['secpth']);
}
echo $secpth->validatePath();
$_SESSION['secpth'] = serialize($secpth);
?>
reset.php
<?php
session_start();
if( !empty($_SESSION['secpth']) ){
unset($_SESSION['secpth']);
}
echo 'reset complete';
?>
Nothing fancy here, each click will present a dialog that displays what was returned... true, false or error. Should return true when the path was successfully completed.
The reset.php file should be ran to reset the session after a successful completion of the path.
Dave
Terry Woody - 2016-12-26 19:59:47 - In reply to message 4 from Dave Smith
That was very nice of you Dave.
Appreciate the example much!
Woody
|