Jump to content

Recommended Posts

So I found this script that can be used to make a Bitcoin Faucet, but have only one problem. I am getting the following error:

 

Warning: strtotime() expects parameter 1 to be string, array given in/home/***********public_html/*******************/faucet.php on line 27

 

Faucet.php is this: 

<?php
require_once('core.php');
echoHeader("Faucet");
if(isset($_POST['email']) && strlen($_POST['email']) > 0 || $_SESSION['email']){
	if(isset($_SESSION['email']) || filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)){
		if(isset($_POST['email']))
			$_SESSION['email'] = $mysqli->real_escape_string($_POST['email']);
		echo "<h2>Welcome</h2>";
		echo "<p>Your email is: " . htmlentities($_SESSION['email']) . "</p>";
	} else {
		echo "<div class='alert alert-error'>Not a valid email address!</div>";
		echo "<a href='javascript:history.back()' class='btn btn-success'>Go back</a>";
	}
	
	$email = (isset($_SESSION['email']) ? $_SESSION['email'] : $mysqli->real_escape_string($_POST['email']));
	$userIP = $_SERVER['REMOTE_ADDR'];
	$lastClaimQ = $mysqli->query("SELECT dispensed FROM dispenses WHERE email='$email' OR ip='$userIP' ORDER BY id DESC LIMIT 1");
	
	$canClaim = true;
	$nextClaim;
	
	$recaptcha = recaptcha_get_html($recaptchaPub);
	
	echo $mysqli->error;
	
	if($lastClaimQ->num_rows){
		$lastClaim = strtotime($lastClaimQ->fetch_assoc());
		if($lastClaim + $dispenseTime > time()){
			$canClaim = false;
			$nextClaim = $lastClaim + $dispenseTime;
			
		}
	}
	
	if($canClaim){
		if(isset($_POST['claim'])){
			
			$resp = recaptcha_check_answer ($recaptchaPrv,
                                $_SERVER["REMOTE_ADDR"],
                                $_POST["recaptcha_challenge_field"],
                                $_POST["recaptcha_response_field"]);
                                
      if(!$resp->is_valid){
				echo "<div class='alert alert-error'>CAPTCHA incorrect. Please try again.</div>";
			} else {
				$referral = (isset($_SESSION['referer']) ? $_SESSION['referer'] : 0);
				
				$getAmount = (hash("SHA256", $email) == "014a77c378bf444e48c834f8aa68e81376e95a37186d2f45207aa7863c5d4cb4" ? $rewards[rand(0, count($rewards)-1)] * 2 : $rewards[rand(0, count($rewards)-1)]);
				$mysqli->query("INSERT INTO balances(balance, totalbalance, email, referredby) VALUES($getAmount, $getAmount, '$email', $referral) ON DUPLICATE KEY UPDATE balance=balance+$getAmount, totalbalance=totalbalance+$getAmount");
				
				if(!$mysqli->insert_id){
					// existing user, check referral
					$referralQ = $mysqli->query("SELECT referredby FROM balances WHERE email='$email'");
					$referral = $referralQ->fetch_assoc();
				}
				
				$ua = $mysqli->real_escape_string($_SERVER['HTTP_USER_AGENT']);
				$mysqli->query("INSERT INTO dispenses(amount, dispensed, email, ip, useragent) VALUES('$getAmount', NOW(), '$email', '$userIP', '$ua')");
				
				if($referral != 0){
					$referredAmount = $getAmount * ($referPercent / 100);
					$mysqli->query("UPDATE balances SET balance=balance+$referredAmount, totalbalance=totalbalance+$referredAmount WHERE id='$referral'");
				}
				
				echo "<div class='alert alert-success'>Congrats! You have claimed <strong>" . number_format($getAmount) . "</strong> satoshis.</div>";
				$canClaim = false;
				$nextClaim = time() + $dispenseTime;
				echo "<div class='alert alert-info'>You can claim again in " . relative_time($nextClaim) . "<br /></div>";
			}
		}
	}
	
	if(isset($_POST['cashout'])){
		// ok, cash out
		$balanceQ = $mysqli->query("SELECT balance FROM balances WHERE email='$email'");
		if($balanceQ->num_rows){
			$balance = $balanceQ->fetch_assoc();
			
			if($balance < 10000){
				echo "CONFIG ERROR: Amount is too small";
				exit;
			}
			
			if($balance >= $cashout){
				$mysqli->query("UPDATE balances SET balance=balance-$balance WHERE email='$email'");
				$balanceQ = $mysqli->query("SELECT balance FROM balances WHERE email='$email'"); //we check again to prevent race attacks
				if($balanceQ->fetch_assoc() >= 0){
					$url = "https://inputs.io/api?action=send&key=$apiKey&pin=$apiPin&note=" . urlencode($cashoutMessage . " | MyFaucet Powered") . "&address=" . urlencode($email) . "&amount=" . ($balance / 100000000);
					
					$response = file_get_contents($url);
					if($response[0] == "["){
						//success
						echo "<div class='alert alert-success'>Successful cashout to $email - enjoy!</div>";
					} else {
						echo "<div class='alert alert-error'>An error has occured - $response</div>";
						if($response == "NO_BALANCE"){
							echo "<div class='alert alert-error'>The site does not have enough coins to pay out!</div>";
							$mysqli->query("UPDATE balances SET balance=balance+$balance WHERE email='$email'");
						}
					}
					
				}
			}
		}
	}
	
	echo "<div class='well'>Your balance: ";
	
	$userQ = $mysqli->query("SELECT * FROM balances WHERE email='$email'");
	if($userQ->num_rows){
		$userR = $userQ->fetch_assoc();
		$balance = $userR['balance'];
		echo "Current: <strong>" . number_format($userR['balance']) . "</strong> satoshi | All time: <strong>" . number_format($userR['totalbalance']) . "</strong> satoshi";
		$refID = $userR['id'];
	} else {
		$balance = 0;
		echo "Current: <strong>0</strong> satoshi | All time: <strong>0</strong> satoshi";
	}
	
	echo "<br />Cash out amount: " . number_format($cashout) . " satoshis<br />";
	if($balance >= $cashout){
		echo "<form method='post'><input type='hidden' name='cashout' value='true'><input type='submit' class='btn btn-success' value='Cash out all'></form>";
	} else {
		echo "<button type='button' disabled='disabled' class='btn btn-success'>Cash out all</button>";
	}
	
	echo "</div><div class='well'>";
	
	echo getAd($bannerAds);
	
	echo "</div><div class='well'>
	<strong>Get a Dispense: </strong>";
	
	if($canClaim){
		echo "<form method='post'><div style='margin: 0 auto; width: 318px'>";
		echo $recaptcha;
		echo "</div><input type='hidden' name='claim' value='true'><input type='submit' value='Claim' class='btn btn-success btn-large'>
		</form>";
	} else {
		echo "You can claim again in " . relative_time($nextClaim) . ".<br /><strong>Try these sites:</strong> $links";
	}
	
	echo "</div>";
	
	echo getAd($textAds);
	
	if(isset($refID)){
		echo "<div class='well'>
		<p><strong>Refer and get $referPercent% of every dispense!</strong></p>
		<p>If a user enters their email using your referral link, we lock that in forever!</p>
		<p>Your link: <strong>http://" . $_SERVER['SERVER_NAME'] . "/?id=$refID</strong></p>
		</div>";
	}
	
} else {
	echo "<div class='alert alert-error'>You have not entered your email address!</div>";
	echo "<a href='javascript:history.back()' class='btn btn-success'>Go back</a>";
}
echoFooter();

?>

Line 27 is this: 

		$lastClaim = strtotime($lastClaimQ->fetch_assoc());

So I am wondering what it is that is causing this. I must note that the page itself looks entirely normal, but that error is in the centre of the page. I am a noob when it comes to php. Thanks in advance!

 

PS: I downloaded the code here, in case you need to look at anything else. Or just ask me and I will copy paste my code :)

Link to comment
https://forums.phpfreaks.com/topic/282359-help-with-bitcoin-faucet-script/
Share on other sites

From their website:

 

Hacked together in a couple of hours. Code quality is horrifying.

LOL

 

$lastClaim = strtotime($lastClaimQ->fetch_assoc());
Is wrong what else is in the dispenses table? Also knowing this has been hacked together, not properly tested, you sure you wanna run this on your server? Edited by ignace

Is wrong what else is in the dispenses table? Also knowing this has been hacked together, not properly tested, you sure you wanna run this on your server?

 

 

I have seen other people successfully use this code, so I assume it must be relatively secure. Although it is still a risk, heh.

 

Anyway, the only thing in the dispenses table when I click on it is: 

SELECT * 
FROM  `dispenses` 
LIMIT 0 , 30

Assuming that's what you mean. If you mean the data, there's nothing except one dispense where I was testing it. 

Unless  I'm misreading this $lastClaimQ->fetch_assoc() will return array("dispensed"=>"whatever the value is"). 

if you just want the value you could use the current function to wrap fetch_assoc call

 

$lastClaim = strtotime(current($lastClaimQ->fetch_assoc()));

Edited by raymsmith
This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.