2012-02-17 69 views
2

我試圖改變一些php代碼,以便從URL中獲取我的值並在我的轉換器函數中使用它們。我不斷收到「找不到對象」當我試穿一下,像這樣的URL ......PHP使用來自URL的GET值在函數中使用

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

這裏是哪裏IM通話來自不同文件的函數稱爲conv.php

<?php 
    include 'CurrencyConverter.php'; 

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

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

任何幫助,非常感謝!

+0

首先,爲什麼有參數,如果你立即放棄他們贊成獲得url參數。其次,請標記家庭作業。第三,發佈您正在使用的完整代碼 - 不僅僅是您認爲是原因的代碼片段,因爲它可能不是。 – jka6510 2012-02-17 10:29:50

+0

什麼是exchange_rates? – Poonam 2012-02-17 10:32:14

+0

你試過'var_dump($ _ GET ['amn']);'看看問題是否來自這裏? – 2012-02-17 10:36:06

回答

1

如果「轉換」功能是在你的主文件,它可能是在網址結尾丟失的文件:

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

如果「轉換」功能在「CurrencyConverter.php」文件,你可以嘗試用參數包括它:

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

編輯:

注意:未定義的變量:在EXCHANGE_RATE C:\ XAMPP \ htdocs中\ atwd \測試\白帽\ CurrencyConverter.php上線106

- >開線99正在定義$exchange_rate[$xml_rates[0][$i]]和不$exchange_rate 這是不一樣的,並導致錯誤。

警告: 下的foreach()提供參數無效:\ XAMPP \ htdocs中\ atwd \測試\白帽\ CurrencyConverter.php上線106

- >這似乎是未定義的變量:一個在C:\ XAMPP \ htdocs中\ atwd \測試\白色 帽子\ conv.php第6行說明:未定義變量:b在 未定義變量$ EXCHANGE_RATE

通知的後效C:\ xampp \ htdocs \ atwd \ test \ white hat \ conv.ph P於第6行說明: 未定義變量:C在C:\ XAMPP \ htdocs中\ atwd \第6行測試\白帽\ conv.php

- >以下是錯誤,我認爲。您嘗試調用函數convert()窗體'CurrencyConverter.php',但變量$a,$b$c在函數本身中定義。所以這些變量沒有在'conv.php'中定義,還有convert()的調用。 我建議你嘗試$ _GET url的值,並在函數的調用中同時定義變量。

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

像這樣你已經在你的CurrencyConverter.php中定義了變量,你可以刪除第41行到第43行。

+0

這裏是我的完整頁面代碼....... – 2012-02-17 11:48:36