PHP使用URL中的GET值在函数中使用

时间:2012-02-17 10:23:04

标签: php function get

我正在尝试更改一些PHP代码,以便从URL获取我的值并在我的转换器函数中使用它们。当我在URL上尝试它时,我一直得到“找不到对象”......

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

以下是我的CurrencyConverter.php文件

<?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();
    }
}

这里是我从名为conv.php的其他文件调用该函数的地方。

 <?php
     include 'CurrencyConverter.php';

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

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

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

如果'convert'功能在你的主文件中,它可能是以url结尾的丢失文件:

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

如果'convert'功能位于'CurrencyConverter.php'文件中,您可以尝试将其包含在参数中:

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

修改

  

注意:未定义的变量:exchange_rate in   第106行的C:\ xampp \ htdocs \ atwd \ test \ white hat \ CurrencyConverter.php

- &GT;在第99行,您定义的是$exchange_rate[$xml_rates[0][$i]]而不是$exchange_rate 这不一样,会导致错误。

  

警告:为foreach()提供的参数无效   第106行的C:\ xampp \ htdocs \ atwd \ test \ white hat \ CurrencyConverter.php

- &GT;这似乎是未定义变量$ exchange_rate

的后果
  

注意:未定义的变量:a在C:\ xampp \ htdocs \ atwd \ test \ white中   第6行的hat \ conv.php注意:未定义的变量:b in   第6行的C:\ xampp \ htdocs \ atwd \ test \ white hat \ conv.php注意:   未定义的变量:c在C:\ xampp \ htdocs \ atwd \ test \ white hat \ conv.php中   在第6行

- &GT;这是我认为的错误。您尝试调用函数convert()形式'CurrencyConverter.php',但变量$a$b$c在函数本身中定义。所以变量没有在'conv.php'和convert()的调用中定义。 我建议您尝试$ _GET url的值,并在函数调用中同时定义变量。

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

像这样你已经在CurrencyConverter.php中定义了变量,你可以删除41到43行。