Jump to content

Classico

Members
  • Posts

    21
  • Joined

  • Last visited

Everything posted by Classico

  1. I've ran into this problem many times, and I'm sure others have too. I'm trying to redirect users to the main page after login/doing other stuff on the website. But every time I login just to test it, I keep getting an error something about the header (can't remember the full error, haven't tested it in a while). I'm using the PHP's way of redirecting: header("Location:index.php"); I managed to find a work around, by outputting a link if they've logged in and when they click on the link, it takes them to the selected page. But I don't want that. I want it so it redirects automatically. I do have error reporting on. Is there a way to get this working, without the error? I can post my login code if needed.
  2. It checks the price in my IPN script, but I also have the price in the button code too. Is there another way of holding the pricing information? Oops, my bad! I forgot to add 'onsubmit="return checkForm(this);"' to my form code. Thanks for that.
  3. I have a small javascript function which is meant to check if a user has entered anything in the given textbox. <script type="text/javascript"> function checkForm(form) { if(form.on0.value == '') { alert("Error: No amount was entered!"); form.on0.focus(); return false; } return true; } </script> <form action="https://www.paypal.com/cgi-bin/webscr" method="POST"> <input type="text" name="on0" value="" placeholder="Username"> That doesn't seem to work when I press my PayPal button. <input type="hidden" name="cmd" value="_xclick"> <input type="hidden" name="business" value="donate@dawncraftmc.com"> <input type="hidden" name="item_name" value="VIP"> <input type="hidden" name="item_number" value="1"> <input type="hidden" name="amount" value="2.50"> <input type="hidden" name="no_shipping" value="1"> <input type="hidden" name="no_note" value="1"> <input type="hidden" name="currency_code" value="GBP"> <input type="hidden" name="lc" value="GB"> <input type="hidden" name="bn" value="PP-BuyNowBF"> <input type="hidden" name="return" value="http://www.dawncraftmc.com/index.html"> <input type="hidden" name="cancel_return" value="http://www.dawncraftmc.com/index.html"> <input type="hidden" name="rm" value="2"> <input type="hidden" name="notify_url" value="http://vip.dawncraftmc.com/ipn.php" /> <input type="hidden" name="custom" value="<?php echo $on0; ?>"> <input type="image" src="https://www.paypalobjects.com/en_US/GB/i/btn/btn_donateCC_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online."> <img alt="" border="0" src="https://www.paypalobjects.com/en_GB/i/scr/pixel.gif" width="1" height="1"> </form> Is there an easier way to check this?
  4. I never really thought about using the first method. But it's the method that I'm currently using now, thanks a lot
  5. Basically, I have a form which my players fill in. Which then gets submitted to my database, and sets the question 'status' field to 'Open'. I have that working, but there's a problem. When you submit a question, and my update query is executed, it sets every row in the database to 'Open' in the 'status' field. Is there a way to just set it to open for just that ticket? Here is my code for inserting. $query = mysql_query("INSERT INTO unbanappeal (username, email, topic, banned_you, ban_reason, unban_reason , ticket_id) VALUES ('$username','$email', '$topic','$banned','$banned_for','$why_unban','$ticket_id')") or die(mysql_error()); $set = mysql_query("UPDATE unbanappeal SET status = 'Open'"); Also, is there a way to have SET in my $query. I've tried it, but it never worked.
  6. Sorry for the late reply. And sorry for sounding like this... But what do you mean by 'add a static column to the select list'? I've done what you said, and to only use what columns I need, and have this so far. SELECT 'ban' as type, time, player, banned_by, reason FROM bans WHERE player = '$search' union all SELECT 'kick' as type, time, player, kicked_by, reason FROM kicks WHERE player = '$search'
  7. I've ran into a small problem. I have 2 tables called 'kicks' and 'bans', and I have created a query that selects all the data from both of them. On my webpage, I have a table column called 'Type', and I'm wanting to display 'Ban' if it's from the ban table, and 'Kick' if it's from the kick table. Is there a way to echo words out based on what database table the values are coming from? Here's my query if needed. $query = mysql_query("SELECT * FROM bans WHERE player = '$search' union all SELECT * FROM kicks WHERE player = '$search'");
  8. Oh, that's no good then. Do you know if there is any alternative that will work in both Chrome and Firefox?
  9. I have a dropdown menu which uses the onclick="window.location =''" feature to navigate to different pages on my statistics website, and it works fine in FireFox. But it doesn't seem to be working at all when I try it in Chrome.... Is there a simple way on how to get it working for both FireFox and Chrome, or doesn't Chrome support it? Here's my dropdown if needed. <select> <option></option> <option onclick="window.location = 'http://www.stats.dawncraftmc.com/online.php'">Online</option> <option onclick="window.location = 'http://www.stats.dawncraftmc.com/kills.php'">Kills</option> <option onclick="window.location = 'http://www.stats.dawncraftmc.com/deaths.php'">Deaths</option> <option onclick="window.location = 'http://www.stats.dawncraftmc.com/xp.php'">XP</option> <option onclick="window.location = 'http://www.stats.dawncraftmc.com/blocks.php'">Blocks</option> </select>
  10. Sorry for not selecting the columns that I actually needed. But after I changed the players_killed.players_kill to player_stats.players_killed it worked. Thanks for your help
  11. Thank you. Looks like I'll have to learn JOIN. I've put in the ORDER BY as you suggested, but now I have an error in my while loop. $user = mysql_query("SELECT players.id, players.username, players_killed.players_killed FROM players JOIN players_killed ON players.id = players_killed.playerid WHERE players_killed.players_killed > 100 ORDER BY players_killed.players_killed DESC LIMIT 50"); while($stats = mysql_fetch_assoc($user)){ echo "<tr bgcolor='#BFFFFF'><td>".$stats['username']."</td>"; echo "<td bgcolor='#00FF00'>".$stats['players_killed']."</td></tr>"; } I get an error on line 90, which is while($stats = mysql_fetch_assoc($user)){ I've had the error before, and it was simple to fix. But I can't seem to find the problem this time...
  12. Hi, I'm trying to show the players that have more than 100 player kills. But I seem to be having a small problem. I store my players username and statistics in different tables, and I can't seem to get it working. This is what I have so far: $user = mysql_query("SELECT * FROM players LIMIT 50"); while($username = mysql_fetch_assoc($user)){ $id = $username['id']; echo "<tr bgcolor='#BFFFFF'><td>".$username['username']."</td>"; $user_s = mysql_query("SELECT * FROM player_stats WHERE playerid = '$id' AND players_killed > 100"); while($player_stats = mysql_fetch_assoc($user_s)){ echo "<td bgcolor='#00FF00' class=\"td_b\">".$player_stats['players_killed']."</td></tr>"; } } It lists the first 50 players, which isn't what I want. I'm wanting it to display only kills over 100 from the player_stats where the id from players is equal to the player_id in player_stats. I looked into joining the queries, but I wasn't sure if would of worked. Could someone help me please? Thanks in advance
  13. The 'No results found' problem has been fixed. Thanks guys. I need to check whether the user has entered their value in the input field next, as I'm doing 'No results found' as a default message if a user decides to go to that page in the URL. It does work now though, thanks for your reply.
  14. Hi, I'm having a small problem with my query. I'm basically getting the user's input, and searching the database for a match towards their input. If it finds a match, display it. If it doesn't, display a message. My query does display the data if it finds a match, but it display everything from the database if it doesn't find anything. Could someone tell me what I'm doing wrong please? Here is my code: <?php $search = mysql_real_escape_string(trim($_POST['ticket'])); $query = mysql_query("SELECT * FROM unbanappeal WHERE ticket_id LIKE '%$search%'"); $ticket_id_check = mysql_num_rows($query); if($ticket_id_check < 0){ echo "No results found."; }else{ while($row = mysql_fetch_assoc($query)){ echo $row['username']; } } ?> Also, is it possible for me to change my query from displaying any data that's like the user's input, to the data that is exactly like the user's input? Thanks in advance.
  15. That works fantastic! Thank you I never knew that it was so easy. Looks like I was just using the wrong input fields and passing it through to the IPN script wrong too
  16. Thank you. I'm getting the custom field through now, it's sending as 'option_name1'. I'm inserting the payment info into my database, I'm needing the custom field too. Since it's sending as 'option_name1', will I need to insert it as 'on0', or 'custom'? Here's how I'm inserting it right now. // add this order to a table of completed orders $payer_email = mysql_real_escape_string($_POST['payer_email']); $mc_gross = mysql_real_escape_string($_POST['mc_gross']); $on0 = mysql_real_escape_string($_POST['custom']); $sql = "INSERT INTO log VALUES ('', '$txn_id', '$payer_email', '$mc_gross', '$on0')";
  17. I just need it so the user can enter their username in the input field. I'm guessing it'll be custom, since you said the onX stuff is for multiple items? Sorry about posting all of the code, people usually tend to get quite... nasty when you don't
  18. Premiso, I got help from someone else on another forum. He told me to use 'on0' and 'os0', and that it should work after I put in <?php $on0 = $_POST['on0']; ?> and: <input type="hidden" name="on0" value=""> <input type="hidden" name="os0" value="<?php echo $on0; ?>"> which it never. I don't want spoon feeding, but would you be able to tell me in some description how I'd go about setting the variable and passing it through to the IPN?
  19. Sorry about that. It would of been better if it was posted at the bottom of the thread.
  20. Can you not read? There's my question.
  21. Hi, I'll try explain this the best I can. I have a PayPal IPN script that works, inserts the the data into my database etc. But i'm having trouble with a custom variable. I can seem to pass it through to paypal. I have my input field <input type="text" name="on0" value=""> . This is where the will insert his/her username. And when the press the button <form action="https://www.paypal.com/cgi-bin/webscr" method="POST"> <center><input type="text" name="on0" value=""> <br /> <?php $on0 = $_POST['on0']; ?> <input type="hidden" name="cmd" value="_xclick"> <input type="hidden" name="business" value="donate@dawncraftmc.com"> <input type="hidden" name="item_name" value="VIP"> <input type="hidden" name="item_number" value="1"> <input type="hidden" name="amount" value="0.01"> <input type="hidden" name="no_shipping" value="1"> <input type="hidden" name="no_note" value="1"> <input type="hidden" name="currency_code" value="GBP"> <input type="hidden" name="lc" value="GB"> <input type="hidden" name="bn" value="PP-BuyNowBF"> <input type="hidden" name="return" value="http://www.dawncraftmc.com/index.html"> <input type="hidden" name="cancel_return" value="http://www.dawncraftmc.com/index.html"> <input type="hidden" name="rm" value="2"> <input type="hidden" name="notify_url" value="http://vip.dawncraftmc.com/ipn.php" /> <input type="hidden" name="on0" value=""> <input type="hidden" name="os0" value="<?php echo $on0; ?>"> <input type="image" src="https://www.paypalobjects.com/en_US/GB/i/btn/btn_donateCC_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online."> <img alt="" border="0" src="https://www.paypalobjects.com/en_GB/i/scr/pixel.gif" width="1" height="1"></center> </form> , it takes them to the PayPal page, they pay, and the variables passed through to the IPN goes into the database. Could someone help me please? Tell me if i'm doing something wrong? Here is both my ipn.php and ipnlistener.php: <?php include 'connect_to_mysql.php'; // tell PHP to log errors to ipn_errors.log in this directory ini_set('log_errors', true); ini_set('error_log', dirname(__FILE__).'/ipn_errors.log'); // intantiate the IPN listener include('ipnlistener.php'); $listener = new IpnListener(); // tell the IPN listener to use the PayPal test sandbox $listener->use_sandbox = false; // try to proces try { $listener->requirePostMethod(); $verified = $listener->processIpn(); } catch (Exception $e) { error_log($e->getMessage()); exit(0); } // manually investigate variables from paypal $body = "IPN failed variable check: \n\n"; $body .= $listener->getTextReport(); mail('donate@dawncraftmc.com', 'IPN Variables', $body); if ($verified) { $errmsg = ''; // stores errors from fraud checks // 1. Make sure the payment status is "Completed" if ($_POST['payment_status'] != 'Completed') { // simply ignore any IPN that is not completed exit(0); } // 2. Make sure seller email matches your primary account email. if ($_POST['receiver_email'] != 'donate@dawncraftmc.com') { $errmsg .= "'receiver_email' does not match: "; $errmsg .= $_POST['receiver_email']."\n"; } // 3. Make sure the amount(s) paid match if ($_POST['mc_gross'] != '0.01') { $errmsg .= "'mc_gross' does not match: "; $errmsg .= $_POST['mc_gross']."\n"; } // 4. Make sure the currency code matches if ($_POST['mc_currency'] != 'GBP') { $errmsg .= "'mc_currency' does not match: "; $errmsg .= $_POST['mc_currency']."\n"; } $txn_id = mysql_real_escape_string($_POST['txn_id']); $sql = "SELECT COUNT(*) FROM log WHERE txn_id = '$txn_id'"; $r = mysql_query($sql); if (!$r) { error_log(mysql_error()); exit(0); } $exists = mysql_result($r, 0); mysql_free_result($r); if ($exists) { $errmsg .= "'txn_id' has already been processed: ".$_POST['txn_id']."\n"; } if (!empty($errmsg)) { // manually investigate errors from the fraud checking $body = "IPN failed fraud checks: \n$errmsg\n\n"; $body .= $listener->getTextReport(); mail('donate@dawncraftmc.com', 'IPN Fraud Warning', $body); } else { // add this order to a table of completed orders $payer_email = mysql_real_escape_string($_POST['payer_email']); $mc_gross = mysql_real_escape_string($_POST['mc_gross']); $option_selection1 = ($_POST['option_selection1_1'])?$_POST['option_selection1_1']:$_POST['option_selection1']; $option_selection2 = ($_POST['option_selection2_1'])?$_POST['option_selection2_1']:$_POST['option_selection2']; $sql = "INSERT INTO log VALUES ('', '$txn_id', '$payer_email', '$mc_gross', '$option_selection1', '$option_selection2')"; if (!mysql_query($sql)) { error_log(mysql_error()); exit(0); } // send user an email with a link to their digital download $to = filter_var($_POST['payer_email'], FILTER_SANITIZE_EMAIL); $subject = "Your digital download is ready"; mail($to, "Thank you for your order", "VIP"); $to = filter_var($_POST['receiver_email'], FILTER_SANITIZE_EMAIL); $subject = "Donation Received"; mail($to, "Donation Received", "Donation received from", $_POST['payer_email']); } } else { // manually investigate the invalid IPN mail('donate@dawncraftmc.com', 'Invalid IPN', $listener->getTextReport()); } ?> <?php /** * PayPal IPN Listener * * A class to listen for and handle Instant Payment Notifications (IPN) from * the PayPal server. */ class IpnListener { /** * If true, the recommended cURL PHP library is used to send the post back * to PayPal. If flase then fsockopen() is used. Default true. * * @var boolean */ public $use_curl = true; /** * If true, explicitly sets cURL to use SSL version 3. Use this if cURL * is compiled with GnuTLS SSL. * * @var boolean */ public $force_ssl_v3 = true; /** * If true, cURL will use the CURLOPT_FOLLOWLOCATION to follow any * "Location: ..." headers in the response. * * @var boolean */ public $follow_location = false; /** * If true, an SSL secure connection (port 443) is used for the post back * as recommended by PayPal. If false, a standard HTTP (port 80) connection * is used. Default true. * * @var boolean */ public $use_ssl = true; /** * If true, the paypal sandbox URI www.sandbox.paypal.com is used for the * post back. If false, the live URI www.paypal.com is used. Default false. * * @var boolean */ public $use_sandbox = false; /** * The amount of time, in seconds, to wait for the PayPal server to respond * before timing out. Default 30 seconds. * * @var int */ public $timeout = 30; private $post_data = array(); private $post_uri = ''; private $response_status = ''; private $response = ''; const PAYPAL_HOST = 'www.paypal.com'; const SANDBOX_HOST = 'www.sandbox.paypal.com'; /** * Post Back Using cURL * * Sends the post back to PayPal using the cURL library. Called by * the processIpn() method if the use_curl property is true. Throws an * exception if the post fails. Populates the response, response_status, * and post_uri properties on success. * * @param string The post data as a URL encoded string */ protected function curlPost($encoded_data) { if ($this->use_ssl) { $uri = 'https://'.$this->getPaypalHost().'/cgi-bin/webscr'; $this->post_uri = $uri; } else { $uri = 'http://'.$this->getPaypalHost().'/cgi-bin/webscr'; $this->post_uri = $uri; } $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $uri); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $encoded_data); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, $this->follow_location); curl_setopt($ch, CURLOPT_TIMEOUT, $this->timeout); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HEADER, true); if ($this->force_ssl_v3) { curl_setopt($ch, CURLOPT_SSLVERSION, 3); } $this->response = curl_exec($ch); $this->response_status = strval(curl_getinfo($ch, CURLINFO_HTTP_CODE)); if ($this->response === false || $this->response_status == '0') { $errno = curl_errno($ch); $errstr = curl_error($ch); throw new Exception("cURL error: [$errno] $errstr"); } } /** * Post Back Using fsockopen() * * Sends the post back to PayPal using the fsockopen() function. Called by * the processIpn() method if the use_curl property is false. Throws an * exception if the post fails. Populates the response, response_status, * and post_uri properties on success. * * @param string The post data as a URL encoded string */ protected function fsockPost($encoded_data) { if ($this->use_ssl) { $uri = 'ssl://'.$this->getPaypalHost(); $port = '443'; $this->post_uri = $uri.'/cgi-bin/webscr'; } else { $uri = $this->getPaypalHost(); // no "http://" in call to fsockopen() $port = '80'; $this->post_uri = 'http://'.$uri.'/cgi-bin/webscr'; } $fp = fsockopen($uri, $port, $errno, $errstr, $this->timeout); if (!$fp) { // fsockopen error throw new Exception("fsockopen error: [$errno] $errstr"); } $header = "POST /cgi-bin/webscr HTTP/1.0\r\n"; $header .= "Content-Type: application/x-www-form-urlencoded\r\n"; $header .= "Content-Length: ".strlen($encoded_data)."\r\n"; $header .= "Connection: Close\r\n\r\n"; fputs($fp, $header.$encoded_data."\r\n\r\n"); while(!feof($fp)) { if (empty($this->response)) { // extract HTTP status from first line $this->response .= $status = fgets($fp, 1024); $this->response_status = trim(substr($status, 9, 4)); } else { $this->response .= fgets($fp, 1024); } } fclose($fp); } private function getPaypalHost() { if ($this->use_sandbox) return IpnListener::SANDBOX_HOST; else return IpnListener::PAYPAL_HOST; } /** * Get POST URI * * Returns the URI that was used to send the post back to PayPal. This can * be useful for troubleshooting connection problems. The default URI * would be "ssl://www.sandbox.paypal.com:443/cgi-bin/webscr" * * @return string */ public function getPostUri() { return $this->post_uri; } /** * Get Response * * Returns the entire response from PayPal as a string including all the * HTTP headers. * * @return string */ public function getResponse() { return $this->response; } /** * Get Response Status * * Returns the HTTP response status code from PayPal. This should be "200" * if the post back was successful. * * @return string */ public function getResponseStatus() { return $this->response_status; } /** * Get Text Report * * Returns a report of the IPN transaction in plain text format. This is * useful in emails to order processors and system administrators. Override * this method in your own class to customize the report. * * @return string */ public function getTextReport() { $r = ''; // date and POST url for ($i=0; $i<80; $i++) { $r .= '-'; } $r .= "\n[".date('m/d/Y g:i A').'] - '.$this->getPostUri(); if ($this->use_curl) $r .= " (curl)\n"; else $r .= " (fsockopen)\n"; // HTTP Response for ($i=0; $i<80; $i++) { $r .= '-'; } $r .= "\n{$this->getResponse()}\n"; // POST vars for ($i=0; $i<80; $i++) { $r .= '-'; } $r .= "\n"; foreach ($this->post_data as $key => $value) { $r .= str_pad($key, 25)."$value\n"; } $r .= "\n\n"; return $r; } /** * Process IPN * * Handles the IPN post back to PayPal and parsing the response. Call this * method from your IPN listener script. Returns true if the response came * back as "VERIFIED", false if the response came back "INVALID", and * throws an exception if there is an error. * * @param array * * @return boolean */ public function processIpn($post_data=null) { $encoded_data = 'cmd=_notify-validate'; if ($post_data === null) { // use raw POST data if (!empty($_POST)) { $this->post_data = $_POST; $encoded_data .= '&'.file_get_contents('php://input'); } else { throw new Exception("No POST data found."); } } else { // use provided data array $this->post_data = $post_data; foreach ($this->post_data as $key => $value) { $encoded_data .= "&$key=".urlencode($value); } } if ($this->use_curl) $this->curlPost($encoded_data); else $this->fsockPost($encoded_data); if (strpos($this->response_status, '200') === false) { throw new Exception("Invalid response status: ".$this->response_status); } if (strpos($this->response, "VERIFIED") !== false) { return true; } elseif (strpos($this->response, "INVALID") !== false) { return false; } else { throw new Exception("Unexpected response from PayPal."); } } /** * Require Post Method * * Throws an exception and sets a HTTP 405 response header if the request * method was not POST. */ public function requirePostMethod() { // require POST requests if ($_SERVER['REQUEST_METHOD'] && $_SERVER['REQUEST_METHOD'] != 'POST') { header('Allow: POST', true, 405); throw new Exception("Invalid HTTP request method."); } } } ?> I'm testing this on the real PayPal, not the sandbox.
×
×
  • 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.