How to make PHP based cooldown button



This cooldown button program detects is the current visitor already visited the website or not, if he/she visited already it checks when is that, and then decide does he/she can click the cooldown button again or not.

Here is the code, a bit messy:

<?php 

$baseurl = "http://localhost/ThirteeNov/PHPCooldownButton/";
//Let's say, the countdown button can be enabled again after 10 seconds
$newbuttonafter = 10; //after 10 seconds

//A function to read file content
function phpReadFile($filename){
	//Create file if not exist
	if(!is_file($filename)){
		file_put_contents($filename, "");
	}
	$myfile = fopen($filename, "r") or die("Unable to open file!");
	$filecontent = "No content.";
	if(filesize($filename) > 0)
		$filecontent = fread($myfile, filesize($filename));
	fclose($myfile);
	return $filecontent;
}

//A function to write a text file. $wtw is "What to Write" :D.
function phpWriteFile($filename, $wtw){
	$myfile = fopen($filename, "w") or die("Unable to open file!"); 
	fwrite($myfile, $wtw);
	fclose($myfile);
	echo "<br>" . $wtw . " has been written.";
}

//A function to get the client IP address
function get_client_ip() {
    $ipaddress = '';
    if (isset($_SERVER['HTTP_CLIENT_IP']))
        $ipaddress = $_SERVER['HTTP_CLIENT_IP'];
    else if(isset($_SERVER['HTTP_X_FORWARDED_FOR']))
        $ipaddress = $_SERVER['HTTP_X_FORWARDED_FOR'];
    else if(isset($_SERVER['HTTP_X_FORWARDED']))
        $ipaddress = $_SERVER['HTTP_X_FORWARDED'];
    else if(isset($_SERVER['HTTP_FORWARDED_FOR']))
        $ipaddress = $_SERVER['HTTP_FORWARDED_FOR'];
    else if(isset($_SERVER['HTTP_FORWARDED']))
        $ipaddress = $_SERVER['HTTP_FORWARDED'];
    else if(isset($_SERVER['REMOTE_ADDR']))
        $ipaddress = $_SERVER['REMOTE_ADDR'];
    else
        $ipaddress = 'UNKNOWN';
    return $ipaddress;
}
?>

<!DOCTYPE html>
<html>
	<head>
		<title>How to make cooldown button in PHP</title>
	</head>
	<body>
		<a href="<?php echo $baseurl ?>">Home</a>
		<?php
		//First, we need to detect user's IP address
		$useripaddress = get_client_ip();
		?>
		
		<p>Your IP Address: <?php echo $useripaddress; ?></p>
	
		<?php
		$websitedata = phpReadFile("useripinfo.txt");
		$newwebsitedata = ""; //this one will be a new website data variable.
		
		?>
		<p>Raw Website Data = <?php echo nl2br($websitedata) ?></p>
		<?php
		
		//This variable store the current time in millisecond to a file.
		$currenttime = round(microtime(true) * 1000);
		
		//We need to process the raw data, and make a list of ip addresses that visited this website
		$iplist = explode(",", $websitedata); //splitting data by comma
		$isnew = true;
		$lastvisit = 0;
		//Doing a loop. In this loop we check the current ip address, is it already visited this website or not
		echo "<p>List of IP Addresses:</p>";
		echo "<ul>";
		for($i = 0; $i < count($iplist); $i++){
			if($iplist[$i] != ""){
				//iplist itself need to be split by dash (-)
				$listip = explode("-", $iplist[$i])[0];
				$listtime = explode("-", $iplist[$i])[1];
				echo "<li>IP Address: " . $listip . " Time:" . $listtime . "</li>"; 
				
				//Check is this ip address is current website vistor ip address or not
				//We need to make sure there should not be duplicated ip address on website data
				if($listip == $useripaddress){
					$isnew = false;
					echo "<li>IP Address above is your current IP Address. It means you already visited this website before.</li>";
					//So, if it is already visted this website, let's not write to file again
					//Now we focus on here... If visitor is already visited before, we need to check when did he visit.
					$lastvisit = $listtime; //lastvisit variable hold the time value the last time he/she visited this website
					if(isset($_GET["buttonclicked"])){
						if($listip == $useripaddress){
							
							$timeelapsed = (($currenttime-$lastvisit) / 1000);
							if($timeelapsed > $newbuttonafter){
								$newwebsitedata .= $listip . "-" . $currenttime . ","; //appending new websitedata, but this time it stores new time value
							}else{
								$newwebsitedata .= $listip . "-" . $listtime . ","; //appending new websitedata
							}
						}else{
							$newwebsitedata .= $listip . "-" . $listtime . ","; //appending new websitedata
						}
					}else{
						$newwebsitedata .= $listip . "-" . $listtime . ","; //appending new websitedata
					}
				}else{
					$newwebsitedata .= $listip . "-" . $listtime . ","; //appending new websitedata
				}
				
			}
		}
		echo "</ul>";
		
		//WARNING: there is repetitive $newwebsitedata .= $listip . "-" . $listtime . ",";  as seen above and need to be fixed... I'm not going to do it now :D//
		
		if(isset($_GET["buttonclicked"])){
			if($isnew){
				echo "<h1>Hurray! You are new visitor!</h1>";
				
				?>
				
				<p>Current time in millisecond is: <?php echo $currenttime; ?></p>
				
				<?php
				//Now we have both $useripaddress and $currenttime, next is to save both info to a file.
				//We append newwebsitedata with new visitor info
				$newwebsitedata .= $useripaddress . "-" . $currenttime . ",";
				
				
			}
			
			?>
			<script>
			location.href = "<?php echo $baseurl ?>";
			</script>
			<?php
		}
		
		//Saving new website data to the file
		phpWriteFile("useripinfo.txt", $newwebsitedata);
		
		//Now we talk about the countdown button
		if($lastvisit != 0 && !$isnew){
			echo "<h1>You are old vistor, you visted us on " . $lastvisit . "</h1>";
			//We need to convert the millisecond to second...
			$timeelapsed = (($currenttime-$lastvisit) / 1000);//This will hold the value of how many seconds elapsed after previous visit
			echo "<p>" .$lastvisit. " means " . $timeelapsed . " second ago.</p>";
			
			//in this case, we check how long the time elapsed...
			if($timeelapsed > $newbuttonafter){
				
				//re-enable the button
				?>
				<p>Yes, you can clik the button again</p>
				
				<button onclick="buttonclicked()" style="background-color: blue; color: white;">Click me!</button>
				<?php
				
			}else{
				//disable the button
				?>
				<p>Hey, get back again later okay?!</p>
				<button onclick="buttonclicked()" style="background-color: red; color: gray;">Don't click me!</button>
				<?php
			}
			
		}else{
			//Here, because this vistor is new visitor, we make the countdown button available:
			?>
			<button onclick="buttonclicked()" style="background-color: blue; color: white;">Click me!</button>
			<?php
		}
		
		
		?>
		<a href="<?php echo $baseurl ?>">Home</a>
		<script>
			function buttonclicked(){
				location.href = "<?php echo $baseurl ?>?buttonclicked";
			}
		</script>
		
	</body>
</html>

loading...

Leave a Reply

Your email address will not be published.