ElectricWizard Posted September 22, 2013 Share Posted September 22, 2013 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¬e=" . 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 Quote Link to comment Share on other sites More sharing options...
ignace Posted September 22, 2013 Share Posted September 22, 2013 (edited) 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 September 22, 2013 by ignace Quote Link to comment Share on other sites More sharing options...
ElectricWizard Posted September 22, 2013 Author Share Posted September 22, 2013 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. Quote Link to comment Share on other sites More sharing options...
raymsmith Posted September 26, 2013 Share Posted September 26, 2013 (edited) 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 September 26, 2013 by raymsmith Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.