2012-02-17 12 views
2

私はURLから自分の値を取得し、それを私のコンバータ関数で使うようにいくつかのPHPコードを変更しようとしています。私はそうのような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(); 
    } 
} 

あると......「オブジェクトが見つかりません」されて得続けるところイム呼び出し別のファイルの関数はconv.phpとなります。

<?php 
    include 'CurrencyConverter.php'; 

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

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

ご協力いただきありがとうございます。

+0

まず、パラメータをすぐに破棄して、urlパラメータを取得することを奨励する理由は何ですか?第二に、宿題にそのようなタグを付けてください。第3に、使用しているコード全体を投稿します。原因ではないと思われるスニペットだけではありません。 – jka6510

+0

exchange_ratesとは何ですか? – Poonam

+0

'var_dump($ _ GET ['amn']);'ここから問題が発生しているかどうか確認しましたか? –

答えて

1

「変換」機能は、あなたのメインのファイルにある場合、それはURLで終わる見つからないファイルのようになります。「変換」機能は、「CurrencyConverter.php」である場合

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

あなたはパラメータを指定して、それを含めるしようとすることができますファイル:

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

EDIT:

注意:未定義の変数: Cでexchange_rateを:ライン上の白い帽子の\ CurrencyConverter.php \ \ xamppの\ htdocsに\ atwd \テスト106

- > 99行では、あなたは$exchange_rate[$xml_rates[0][$i]]なく$exchange_rate を定義していますこれは同じではなく、エラーが発生します。

警告:foreachのために供給される無効な引数() Cで:\ XAMPP \ htdocsに\ atwd \テスト白帽子の\ CurrencyConverter.php \ライン上で106

- >これがあると思われます でB:未定義の変数:行6通知に白い 帽子の\ conv.php \ \ xamppの\ htdocsに\ atwd \テスト:未定義の変数:Cで未定義の変数$ exchange_rateを

お知らせの後遺症C:\ xampp \ htdocs \ atwd \ test \ white hat \ conv.ph 未定義の変数:行6お知らせ上にp CでC:\ xamppの\ htdocsに\ atwd \テスト6

ライン上の白い帽子の\ conv.php \ - >ここでは、私が考えて間違いです。 convert()フォーム 'CurrencyConverter.php'を呼び出そうとしましたが、変数$a$b、および$cが関数自体に定義されています。したがって変数は 'conv.php'に定義されておらず、convert()の呼び出しもまだ定義されていません。 URLの値を$ _GETし、同時に関数の呼び出しで変数を定義しようとお勧めします。このよう

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

すでにあなたのCurrencyConverter.phpで定義された変数を持っていて、43にライン41を削除することができます。

+0

ここは私のフルページコードです....... –

関連する問題