我正在尝试更改一些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);
非常感谢任何帮助!
答案 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行。