2

I'm trying to change some php code so that i get my values from the URL and use them in my converter function. I keep getting "object not found" when i try it on the URL like so......

https://localhost/atwd/test/white%20hat/conv?amnt=10&from=GBP&to=USD

Following is my CurrencyConverter.php file

<?php
class CurrencyConverter    
{
    var $xml_file = "https://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml";
    var $mysql_host, $mysql_user, $mysql_pass, $mysql_db, $mysql_table;
    var $exchange_rates = array();

    // Load Currency Rates

    function CurrencyConverter($host, $user, $pass, $db, $tb)
    {
        $this->mysql_host = $host;
        this->mysql_user = $user;
        $this->mysql_pass = $pass;
        $this->mysql_db = $db;
        $this->mysql_table = $tb;

        $this->checkLastUpdated();

        $conn = mysql_connect($this->mysql_host, $this->mysql_user, $this->mysql_pass);
        $rs = mysql_select_db($this->mysql_db, $conn);
        $sql = "SELECT * FROM " . $this->mysql_table;
        $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($a, $b, $c, $decimals = 2)
    {
        $a = $_GET['amnt'];
        $b = $_GET['from'];
        $c = $_GET['to'];

        strip_tags($a);
        strip_tags($b);
        strip_tags($c);

        return (number_format(($a / $this->exchange_rates[$b]) * $this->exchange_rates[$c], $decimals));
    }

    /* Check to see how long since the data was last updated */
    function checkLastUpdated()
    {
        $conn = mysql_connect($this->mysql_host, $this->mysql_user, $this->mysql_pass);
        $rs = mysql_select_db($this->mysql_db, $conn);
        $sql = "SHOW TABLE STATUS FROM " . $this->mysql_db . " LIKE '" . $this->mysql_table . "'";
        $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->mysql_host, $this->mysql_user, $this->mysql_pass);
            $rs = mysql_select_db($this->mysql_db, $conn);
            foreach($exchange_rate as $currency => $rate)
            {
                if ((is_numeric($rate)) && ($rate != 0))
                {
                    $sql = "SELECT * FROM " . $this->mysql_table . " WHERE currency='" . $currency . "'";
                    $rs = mysql_query($sql, $conn) or die(mysql_error());
                    if (mysql_num_rows($rs) > 0)
                    {
                        $sql = "UPDATE " . $this->mysql_table . " SET rate=" . $rate . " WHERE currency='" . $currency . "'";
                    }
                    else
                    {
                        $sql = "INSERT INTO " . $this->mysql_table . " VALUES('" . $currency . "'," . $rate . ")";
                    }

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

    /* Create the currency exchange table */
    function createTable()
    {
        $conn = mysql_connect($this->mysql_host, $this->mysql_user, $this->mysql_pass);
        $rs = mysql_select_db($this->mysql_db, $conn);
        $sql = "CREATE TABLE " . $this->mysql_table . " ( 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->mysql_table . " VALUES('EUR',1)";
        $rs = mysql_query($sql, $conn) or die(mysql_error());

        $this->downloadExchangeRates();
    }
}

and here is where im calling the function from a different file called conv.php.

 <?php
     include 'CurrencyConverter.php';

     $x = new CurrencyConverter('localhost','root','','converterTest','currency');   

     echo $x->convert($a, $b, $c);

Any help is greatly appreciated!

5
  • Firstly, why have parameters if you are immediately discarding them in favour of getting url params. Secondly, please tag homework as such. Thirdly, post the full code your are using - not just a snippet that you think is the cause, as it may not be. Commented Feb 17, 2012 at 10:29
  • Have you tried var_dump($_GET['amn']); to see if the problem comes from here? Commented Feb 17, 2012 at 10:36
  • Well your url isn't specifying a php file, so you're using a rewrite rule? Can you post the exact error message please. Commented Feb 17, 2012 at 10:46
  • Ok i have provided the whole file code. exchange_rates is a column in my database. And the exact error message is when i type the URL as so...... localhost/atwd/test/white%20hat/… Commented Feb 17, 2012 at 11:56
  • Notice: Undefined variable: exchange_rate in C:\xampp\htdocs\atwd\test\white hat\CurrencyConverter.php on line 106 Warning: Invalid argument supplied for foreach() in C:\xampp\htdocs\atwd\test\white hat\CurrencyConverter.php on line 106 Notice: Undefined variable: a in C:\xampp\htdocs\atwd\test\white hat\conv.php on line 6 Notice: Undefined variable: b in C:\xampp\htdocs\atwd\test\white hat\conv.php on line 6 Notice: Undefined variable: c in C:\xampp\htdocs\atwd\test\white hat\conv.php on line 6 15.67 Commented Feb 17, 2012 at 11:59

1 Answer 1

1

If the 'convert' function is in your main file, it could be the missing file ending in the url:

https://localhost/atwd/test/white%20hat/conv.php?amnt=10&from=GBP&to=USD

If the 'convert' function is in the 'CurrencyConverter.php' file you can try to include it with parameters:

include('CurrencyConverter.php?foo=1&bar=2');

EDIT:

Notice: Undefined variable: exchange_rate in C:\xampp\htdocs\atwd\test\white hat\CurrencyConverter.php on line 106

--> On line 99 you are defining $exchange_rate[$xml_rates[0][$i]] and not $exchange_rate this is not the same and causes an error.

Warning: Invalid argument supplied for foreach() in C:\xampp\htdocs\atwd\test\white hat\CurrencyConverter.php on line 106

--> This seems to be an aftereffect of the undefined variable $exchange_rate

Notice: Undefined variable: a in C:\xampp\htdocs\atwd\test\white hat\conv.php on line 6 Notice: Undefined variable: b in C:\xampp\htdocs\atwd\test\white hat\conv.php on line 6 Notice: Undefined variable: c in C:\xampp\htdocs\atwd\test\white hat\conv.php on line 6

--> Here is the mistake i think. You try to call the function convert() form 'CurrencyConverter.php' but the Variables $a, $b and $c get defined in the function itself. So the variables are not defined in 'conv.php' and the call of convert() yet. I would suggest that you try to $_GET the values of the url and define the variable in the call of the function at the same time.

convert($_GET['amnt'], $_GET['from'], $_GET['to'])

Like this you have the variables already defined in your CurrencyConverter.php and you can delete line 41 to 43.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.