0

I am trying to get the exchange of 1 Pound to other currencies, at the moment I am getting Eur 1 to other currencies. for example 1 Eur = 0.81400 GBP, I can reverse this and get 1 GBP to Eur by dividing with each giving me exchange rate of 1.228501228501229.

I want this for all the currencies, currently I am using php script to fetch the exchange rate. how can I alter my Stock_currency table and divide GBP to all the currencies and store them back in to Stock_currency table

here is my PHPscript

<?php
class CurrencyConverter {

   var $xml_file = "www.ecb.int/stats/eurofxref/eurofxref-daily.xml";
   var $localhost, $sirnur, $abc123, $mohamed, $stock_currency;
   var $exchange_rates = array();

   //Load Currency Rates

   function CurrencyConverter($host,$user,$pass,$db,$tb) {

      $this->localhost = $host;
      $this->sirnur = $user;
      $this->abc123 = $pass;
      $this->mohamed = $db;
      $this->stock_currency = $tb;

      $this->checkLastUpdated();

      $conn = mysql_connect($this->localhost,$this->sirnur,$this->abc123);

      $rs = mysql_select_db($this->mohamed,$conn);

      $sql = "SELECT * FROM ".$this->stock_currency;

      $rs =  mysql_query($sql,$conn);

      while($row = mysql_fetch_array($rs)) {

         $this->exchange_rates[$row['currency']] = $row['rate'];
      }

   }

   /* Perform the actual conversion, defaults to £1.00 GBP to USD */
   function convert($amount=1,$from="USD",$to="GBP",$decimals=2) {

      return(number_format(($amount/$this->exchange_rates[$from])*$this->exchange_rates[$to],$decimals));
   }

   /* Check to see how long since the data was last updated */
   function checkLastUpdated() {
      $conn = mysql_connect($this->localhost,$this->sirnur,$this->abc123);

      $rs = mysql_select_db($this->mohamed,$conn);

      $sql = "SHOW TABLE STATUS FROM ".$this->mohamed." LIKE '".$this->stock_currency."'";

      $rs =  mysql_query($sql,$conn);

      if(mysql_num_rows($rs) == 0 ) {

         $this->createTable();
      } else {
         $row = mysql_fetch_array($rs);
         if(time() > (strtotime($row["Update_time"])+(12*60*60)) ) {

            $this->downloadExchangeRates();
         }
      }
   }

   /* Download xml file, extract exchange rates and store values in database */

   function downloadExchangeRates() {
      $currency_domain = substr($this->xml_file,0,strpos($this->xml_file,"/"));
      $currency_file = substr($this->xml_file,strpos($this->xml_file,"/"));
      $fp = @fsockopen($currency_domain, 80, $errno, $errstr, 10);
      if($fp) {

         $out = "GET ".$currency_file." HTTP/1.1\r\n";
         $out .= "Host: ".$currency_domain."\r\n";
         $out .= "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8) Gecko/20051111 Firefox/1.5\r\n";
         $out .= "Connection: Close\r\n\r\n";
         fwrite($fp, $out);
         while (!feof($fp)) {

            $buffer .= fgets($fp, 128);
         }
         fclose($fp);

         $pattern = "{<Cube\s*currency='(\w*)'\s*rate='([\d\.]*)'/>}is";
         preg_match_all($pattern,$buffer,$xml_rates);
         array_shift($xml_rates);

         for($i=0;$i<count($xml_rates[0]);$i++) {

            $exchange_rate[$xml_rates[0][$i]] = $xml_rates[1][$i];
         }

         $conn = mysql_connect($this->localhost,$this->sirnur,$this->abc123);

         $rs = mysql_select_db($this->mohamed,$conn);

         foreach($exchange_rate as $currency=>$rate) {

            if((is_numeric($rate)) && ($rate != 0)) {

               $sql = "SELECT * FROM ".$this->stock_currency." WHERE currency='".$currency."'";
               $rs =  mysql_query($sql,$conn) or die(mysql_error());
               if(mysql_num_rows($rs) > 0) {

                  $sql = "UPDATE ".$this->stock_currency." SET rate=".$rate." WHERE currency='".$currency."'";
               } else {

                  $sql = "INSERT INTO ".$this->stock_currency." VALUES('".$currency."',".$rate.")";
               }

               $rs =  mysql_query($sql,$conn) or die(mysql_error());
            }

         }
      }
   }

   /* Create the currency exchange table */
   function createTable() {

      $conn = mysql_connect($this->localhost,$this->sirnur,$this->abc123);

      $rs = mysql_select_db($this->mohamed,$conn);

      $sql = "CREATE TABLE ".$this->stock_currency." ( currency char(3) NOT NULL default '', rate float NOT NULL default '0', PRIMARY KEY(currency) ) ENGINE=MyISAM";

      $rs =  mysql_query($sql,$conn) or die(mysql_error());

      $sql = "INSERT INTO ".$this->stock_currency." VALUES('EUR',1)";

      $rs =  mysql_query($sql,$conn) or die(mysql_error());

      $this->downloadExchangeRates();
   }

}

the include file

<?php
   include('CurrencyConverter.php');
   $x = new CurrencyConverter('localhost','root','root','mohamed','Stock_Currency');

//  mysql_query("ALTER TABLE Stock_currency  add column We_sell varchar (20) ; ") or die(mysql_error());
//  mysql_query("ALTER TABLE Stock_currency  add column We_buy varchar (20) ; ") or die(mysql_error());  


   ?> 
mohamed nur
  • 331
  • 1
  • 15
  • The `mysql_*` functions you're using have been deprecated. Please use [`mysqli`](http://php.net/manual/en/book.mysqli.php) or [`PDO`](http://php.net/manual/en/book.pdo.php). – Joseph Silber Jan 02 '13 at 19:32
  • Also, see here: **[Why shouldn't I use mysql_* functions in PHP](http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions-in-php)**. – Joseph Silber Jan 02 '13 at 20:29

1 Answers1

0

The SQL query to do what you want is something like:

select c.ccy, c.rate/EuroGBP.rate as GBPExchangeRate
from Currency c cross join
     (select rate from Currency c where c.ccy = 'GPB') EuroGBP
Gordon Linoff
  • 1,242,037
  • 58
  • 646
  • 786