// | // | Currency convertor using data from the European Central Bank. // +--------------------------------------------------------------------------- // enable debugging ini_set('error_reporting', E_ALL); ini_set('display_errors', TRUE); // retrieve currencies $currencies = currency_cache(); // test if user posted valid data if (isset($_POST['submit']) && isset($_POST['src']) && array_key_exists($_POST['src'], $currencies) && isset($_POST['dst']) && array_key_exists($_POST['dst'], $currencies) && isset($_POST['amount']) && is_numeric($_POST['amount'])) { $src = $_POST['src']; $dst = $_POST['dst']; $amount = $_POST['amount']; // output conversion result $result = currency_convert($currencies[$src], $currencies[$dst], $amount); echo "$amount $src equals $result $dst
\n"; } // - HTML Output -------------------------------------------------------------- ?>
of into
\n"; foreach($currencies as $currency => $rate) { $html .= "\n"; } $html .= "\n"; return $html; } /** * Cache currency list via session management * @return an array with currency/rate pairs */ function currency_cache() { // start session session_start(); // fetch currencies if (isset($_SESSION['currencies'])) { $currencies = $_SESSION['currencies']; } else { $currencies = currency_retrieve(); } // save currencies $_SESSION['currencies'] = $currencies; return $currencies; } /** * Convert amount of source currency rate into destination currency rate * @param $srcrate the rate of the source currency * @param $dstrate the rate of the destination currency * @param $amount the amount * @return the amount in the destination currency */ function currency_convert($srcrate, $dstrate, $amount) { $euros = $amount / $srcrate; $result = $euros * $dstrate; $result = round($result, 4); return $result; } /** * Retrieve Currencies from the European Central Bank * @return an associative array with currency/rate pairs */ function currency_retrieve() { // retrieve data and parse it $p = xml_parser_create(); $data = file_get_contents('http://www.ecb.int/stats/eurofxref/eurofxref-daily.xml'); xml_parse_into_struct($p, $data, $vals, $index); xml_parser_free($p); // retrieve currencies $currencies = array(); $currencies['EUR'] = '1.0000'; // iterate over all cube nodes foreach($index['CUBE'] as $index) { $node = $vals[$index]; // test if rate and currency are available in the node if (isset($node['attributes']) && isset($node['attributes']['RATE']) && isset($node['attributes']['CURRENCY'])) { $currency = $node['attributes']['CURRENCY']; $rate = $node['attributes']['RATE']; $currencies[$currency] = $rate; } } return $currencies; } ?>