2012-02-17 2 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); 

모든 도움을 주시면 감사하겠습니다. '변환'기능은 'CurrencyConverter.php'인 경우

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

다음 '변환'기능이 기본 파일에있는 경우

+0

먼저 매개 변수를 가져 와서 url 매개 변수를 가져 오는 것이 좋습니다. 두 번째로 숙제에 태그를 붙이십시오. 셋째, 사용중인 전체 코드를 게시하십시오. 원인이 아니라 생각할 수있는 코드 단편은 아닙니다. – jka6510

+0

exchange_rates 란 무엇입니까? – Poonam

+0

여기에서 문제가 발생하는지 확인하기 위해'var_dump ($ _ GET [ 'amn']); '을 시도 했습니까? –

답변

1

, 그것은 URL로 끝나는 누락 된 파일이 될 수 있습니다 당신은 매개 변수를 포함하도록 시도 할 수 있습니다 파일 :

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

편집 :

공지 사항 : 정의되지 않은 변수 : C에서 EXCHANGE_RATE : 라인 흰색 모자 \의 CurrencyConverter.php \ \ XAMPP \ htdocs를 \ atwd \ 테스트 (106)

-> 라인 99에서 당신은 $exchange_rate[$xml_rates[0][$i]]하지 $exchange_rate 를 정의 이것은 같지 않고 오류가 발생합니다.

경고 : C에서 foreach는()에 대한 공급 잘못된 인수 : 라인 흰색 모자 \의 CurrencyConverter.php \ \ XAMPP \ htdocs를 \ atwd \ 테스트는 106

->이 될 것으로 보인다 정의되지 않은 변수 : C에서 : 선 6주의 화이트 모자 \의 conv.php \ \ XAMPP \ htdocs를 \ atwd \ 시험 : 정의되지 않은 변수 : B의 ​​ 미정 변수 $ EXCHANGE_RATE

공지의 후유증 C : \ xampp \ htdocs \ atwd \ test \ white hat \ conv.ph 라인 (6) 공지 사항에서 P : 정의되지 않은 변수를 C에서 C : 라인 6 흰색 모자 \의 conv.php \ \ XAMPP \ htdocs를 \ atwd \ 테스트

-> 여기에 내가 생각하는 실수입니다. convert() 양식 'CurrencyConverter.php'를 호출하려고하지만 변수 $a, $b$c이 함수 자체에서 정의됩니다. 그래서 변수는 'conv.php'와 convert()의 호출에 아직 정의되어 있지 않습니다. 나는 당신이 $ _GET URL의 값을 시도하고 동시에 함수의 호출에서 변수를 정의하는 것이 좋습니다 것입니다.

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

마찬가지로이 변수는 CurrencyConverter.php에 이미 정의되어 있으며 41-43-41 행을 삭제할 수 있습니다.

+0

여기 내 전체 페이지 코드입니다 ....... –

관련 문제