Scripts
Valuta omrekenen (ook actueel)
Ik zag vandaag een slecht gescript valuta omrekenscript, maar kon er helemaal geen vinden hier op PHPhulp. Dus ik besloot het erop te wagen en er maar één te maken. Je hebt keuze uit verschillende valuta waartussen je wilt rekenen. Het is gescript met error_reporting volledig aan, dus als het goed is krijg je geen errors. Ook is het gemakkelijk om om te bouwen naar een database, waarin je de naam en de waarde van valuta plaatst. Andere valuta kan worden toegevoegd door de array $valuta aan te passen. Na het 1e stukje script, heb ik een ander stukje script staan dat de valuta via een actuele XML file inleest. De file was in het Engels, maar ik heb het script zo bewerkt dat die alles automatisch in het Nederlands invoegt.
valuta-omrekenen-ook-actueel
[code]
<?php
// geef alle waarschuwingen en fouten weer
ini_set('display_errors', 1);
error_reporting(E_ALL);
// maak een array met de namen van de valuta en de bijbehorende waarde.
$valuta = array('Euro' => 1,'Gulden' => 2.20371,'Deense Kroon' => 7.45, 'Amerikaanse Dollar' => 1.36, 'Engelse Pond' => 0.68,'Japanse Yen' => 163.32);
//controleer op posten
if($_SERVER['REQUEST_METHOD'] == 'POST'){
$van=$_POST['from'];
$naar=$_POST['to'];
// rond de eventueel ingevulde waarde met cijfers achter de , of . af naar 2 getallen achter de komma.
$waarde=str_replace(',','.',$_POST['value']);
$waarde=round($waarde,2);
//wanneer je van een valuta naar dezelfde valuta wil gaan omrekenen
if($van == $naar){
$reactie = 'Grappig hoor dat je probeert van '.$van.' naar '.$naar.' te rekenen, dat is hetzelfde!';
}
else{
// als de
if($valuta[$van] == $valuta[$naar]){
$reactie = $van.' heeft dezelfde waarde als '.$naar.'. Dat betekent dat de omgerekende waarde '.$waarde.' is.';
}
else{
// toon de uitkomst van het omrekenen
$reactie = $waarde .' '. $van.' omgerekend in '.$naar.' is '.round(($valuta[$naar]/$valuta[$van])*$waarde,2).'.';
}
}
}
else{
$waarde=1;
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style type="text/css">
label{
cursor:pointer;
}
label.aligntext{
float: left;
width: 100px;
text-align: left;
padding-right: 3px;
line-height:22px;
}
</style>
<title>Valuta calculator - by Robert Deiman</title>
</head>
<body>
<form name="database" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<fieldset><legend>Bereken de waarde (je kan komma getallen invullen door een . of , te gebruiken bij de invoer):</legend>
<label for="from" class="aligntext">Valuta van:</label>
<select id="from" name="from">
<?php
// genereer de keuzelijst
foreach($valuta as $land => $waarde_tov_euro){
if($_SERVER['REQUEST_METHOD']=="POST" || $_SERVER['REQUEST_METHOD'] == 'post'){
if(isset($_POST['from']) && $_POST['from'] == $land){
// zorg ervoor dat je gekozen waarde onthouden blijft
$selectedfrom= 'selected="selected"';
}
else{
$selectedfrom = '';
}
}
else{
$selectedfrom= '';
}
echo '<option value="'.$land.'" '.$selectedfrom.'>'.$land.'</option>';
}
?>
</select><br />
<label for="value" class="aligntext">Waarde:</label><input id="value" type="text" name="value" value="<?php echo $waarde ?>"/> <br />
<label for="to" class="aligntext">Valuta naar:</label>
<select id="to" name="to">
<?php
//genereer keuzelijst
foreach($valuta as $land => $waarde_tov_euro){
if($_SERVER['REQUEST_METHOD']=="POST"){
if(isset($_POST['to']) && $_POST['to'] == $land){
// zorg ervoor dat je gekozen waarde onthouden blijft
$selectedto = 'selected="selected"';
}
else{
$selectedto = '';
}
}
else{
$selectedto= '';
}
echo '<option value="'.$land.'" '.$selectedto.'>'.$land.'</option>';
}
?>
</select><br />
<input type="submit" name="calculate" value="calculate" />
</fieldset>
</form>
<?php
if(isset($reactie)){
//toon resultaat
echo '<p>'.$reactie.'</p>';
}
?>
<p>
<a href="http://validator.w3.org/check?uri=referer"><img style="border:0;width:88px;height:31px" src="http://www.w3.org/Icons/valid-xhtml10" alt="Valid XHTML 1.0 Transitional" height="31" width="88" />
</a>
<a href="http://jigsaw.w3.org/css-validator/">
<img style="border:0;width:88px;height:31px" src="http://jigsaw.w3.org/css-validator/images/vcss" alt="Valid CSS!" />
</a>
</p>
</body>
</html>
[/code]
[b]Wil je liever vanuit een database werken om je valuta op te slaan, dan kan dat eenvoudig[/b]
Maak de volgende tabel aan:
[code]
CREATE TABLE `valuta` (
`id` TINYINT( 3 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`munteenheid` VARCHAR( 50 ) NOT NULL ,
`waarde` FLOAT(8, 2 ) NOT NULL
)
[/code]
Vervang de regel waarin de array -> $valuta wordt gemaakt door het onderstaande stukje PHP (let op dat je de <?php tags dan niet 2 keer opend, dus niet zomaar kopiëren. De php tags staan hier om de code goed gehighlight te laten zien)
<?php
$username="gebruikersnaam";
$server="localhost";
$password="geheimpje";
$database="valuta";
// bovenstaande regels aanpassen indien nodig
$verbind = mysql_connect($server,$username,$password) or trigger_error('Kon geen verbinding maken');
mysql_select_db($database);
$sql="
SELECT
munteenheid,
waarde
FROM
valuta
ORDER BY
munteenheid";
$result=mysql_query($sql);
$valuta=array();
if(mysql_num_rows($result) > 0){//er zijn resultaten
while($row=mysql_fetch_assoc($result)){
// maak de valuta array vanuit de database gegevens
$valuta[$row['munteenheid']]=$row['waarde'];
}
}
?>
[b]
En hier dus de complete code waarbij de data live wordt ingelezen, en waarbij alles is vertaald naar het Nederlands. (inclusief de laatste bijwerkdatum)[/b]
[code]
<?php
// geef alle waarschuwingen en fouten weer
ini_set('display_errors', 1);
error_reporting(E_ALL);
// maak een array met alle Nederlandse vertalingen van de valuta
$vertaling = array(
"AED" => "Dirham (Ver. Arab. Emiraten)",
"ARS" => "Argentijnse Peso",
"AUD" => "Australische Dollar",
"BHD" => "Bahreinse Dinar",
"BND" => "Bruneise Dollar",
"BRL" => "Braziliaanse Real",
"BWP" => "Botswanese Pula",
"CAD" => "Canadese Dollar",
"CHF" => "Zwitserse Frank",
"CLP" => "Chileense Peso",
"CNY" => "Chinese Yuan",
"COP" => "Colombiaanse Peso",
"CYP" => "Cypriotische Pond",
"CZK" => "Tsjechische Koruna",
"DKK" => "Deense Kroon",
"EUR" => "Europ",
"GBP" => "Engelse Pond",
"HUF" => "Hongaarse Forint",
"IDR" => "Indonesische Rupiah",
"ILS" => "Nieuwe Israëlische Sjekel",
"INR" => "Indiase Rupee",
"IRR" => "Iraanse Rial",
"ISK" => "IJslandse Kroon",
"JPY" => "Japanse Yen",
"KRW" => "Koreaanse Won",
"KWD" => "Koeweitse dinar",
"LKR" => "Sri Lankese Rupee",
"LYD" => "Libische Dinar",
"MTL" => "Maltese Lira",
"MUR" => "Mauritaanse Rupee",
"MXN" => "Mexicaanse Peso",
"MYR" => "Maleisische Ringgit",
"NOK" => "Noorse Kroon",
"NPR" => "Nepalese Rupee",
"NZD" => "Nieuw Zeelandse Dollar",
"OMR" => "Omaanse Rial",
"PKR" => "Pakistaanse Rupee",
"PLN" => "Poolse Zloty",
"QAR" => "Qatarese Riyal",
"SAR" => "Saudi Arabische Riyal",
"SEK" => "Zweedse Kroon",
"SGD" => "Singaporese Dollar",
"SIT" => "Sloveense Tolar",
"THB" => "Thaise Baht",
"TTD" => "Trinidad & Tobago Dollar",
"USD" => "Amerikaanse Dollar",
"VEB" => "Venezolaanse Bolívar",
"ZAR" => "Zuid Afrikaanse Rand"
);
$months=array(
"January" => 1,
"February" => 2,
"March" => 3,
"April" => 4,
"May" => 5,
"June" => 6,
"July" => 7,
"August" => 8,
"September" => 9,
"October" => 10,
"November" => 11,
"December" => 12);
// maak een array met de namen van de valuta en de bijbehorende waarde.
$xmlfile = file_get_contents('http://currencysource.com/RSS/EUR.xml');
// preg_match("/Cube time=[\",'](.*)[\",']/i", $xmlfile, $pubdate);
preg_match("/\<pubDate\>(.*)\<\/pubDate\>/i", $xmlfile, $pubdate);
//get month number
$change_month=$months[substr($pubdate[1],8,-18)];
$change_year=intval(substr($pubdate[1],-17,4));
$change_day=intval(substr($pubdate[1],5,2));
$change_hour=intval(substr($pubdate[1],-12,2));
$change_minutes=intval(substr($pubdate[1],-9,2));
$change_seconds=intval(substr($pubdate[1],-6,2));
$change_time_zone=substr($pubdate[1],-3);
//correct to dutch time
if($change_time_zone=='CST'){
$correct=7;
}
else{
$correct=6;
}
$changedate=mktime($change_hour+$correct,$change_minutes,$change_seconds,$change_month,$change_day,$change_year);
$last_update=date('d-m-Y H:i:s',$changedate);
preg_match_all("/\<br\>(.*)\<\/br\>/i", $xmlfile, $getvalues);
preg_match_all("/\<br\>(.*)\<br\>\<br\>Call/i", $xmlfile, $getvalues);
$valuta=array();
foreach($getvalues[1] AS $waarde){
$value_name = str_replace("1 Euro (EUR) = ","",$waarde);
$value_name = str_replace(",","",$value_name);
$value_name_array = preg_split("/[\s,]+/", $value_name);
$value = $value_name_array[0];
$aantal = count($value_name_array);
$short = $value_name_array[$aantal-1];
$short = str_replace('(','',$short);
$short = str_replace(')','',$short);
$valuta[$vertaling[$short]] = $value;
}
//controleer op posten
if($_SERVER['REQUEST_METHOD'] == 'POST'){
$van=$_POST['from'];
$naar=$_POST['to'];
// rond de eventueel ingevulde waarde met cijfers achter de , of . af naar 2 getallen achter de komma.
$waarde=str_replace(',','.',$_POST['value']);
$waarde=round($waarde,2);
//wanneer je van een valuta naar dezelfde valuta wil gaan omrekenen
if($van == $naar){
$reactie = 'Grappig hoor dat je probeerd van '.$van.' naar '.$naar.' te rekenen, dat is hetzelfde!';
}
else{
// als de
if($valuta[$van] == $valuta[$naar]){
$reactie = $van.' heeft dezelfde waarde als '.$naar.'. Dat betekend dat de omgerekende waarde '.$waarde.' is.';
}
else{
// toon de uitkomst van het omrekenen
$reactie = $waarde .' '. $van.' omgerekend in '.$naar.' is '.round(($valuta[$naar]/$valuta[$van])*$waarde,2).'.';
}
}
}
else{
$waarde=1;
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style type="text/css">
label{
cursor:pointer;
}
label.aligntext{
float: left;
width: 100px;
text-align: left;
padding-right: 3px;
line-height:22px;
}
</style>
<title>Valuta calculator - by Robert Deiman</title>
</head>
<body>
<?php
echo 'De valuta zijn op het laatst bijgewerkt op: '.$last_update.'<br /><br />';
?>
<form name="database" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<fieldset><legend>Bereken de waarde (je kan komma getallen invullen door een . of , te gebruiken bij de invoer):</legend>
<label for="from" class="aligntext">Valuta van:</label>
<select id="from" name="from">
<?php
// genereer de keuzelijst
foreach($valuta as $land => $waarde_tov_euro){
if($_SERVER['REQUEST_METHOD']=="POST" || $_SERVER['REQUEST_METHOD'] == 'post'){
if(isset($_POST['from']) && $_POST['from'] == $land){
// zorg ervoor dat je gekozen waarde onthouden blijft
$selectedfrom= 'selected="selected"';
}
else{
$selectedfrom = '';
}
}
else{
$selectedfrom= '';
}
echo '<option value="'.$land.'" '.$selectedfrom.'>'.$land.'</option>';
}
?>
</select><br />
<label for="value" class="aligntext">Waarde:</label><input id="value" type="text" name="value" value="<?php echo $waarde ?>"/> <br />
<label for="to" class="aligntext">Valuta naar:</label>
<select id="to" name="to">
<?php
//genereer keuzelijst
foreach($valuta as $land => $waarde_tov_euro){
if($_SERVER['REQUEST_METHOD']=="POST"){
if(isset($_POST['to']) && $_POST['to'] == $land){
// zorg ervoor dat je gekozen waarde onthouden blijft
$selectedto = 'selected="selected"';
}
else{
$selectedto = '';
}
}
else{
$selectedto= '';
}
echo '<option value="'.$land.'" '.$selectedto.'>'.$land.'</option>';
}
?>
</select><br />
<input type="submit" name="calculate" value="calculate" />
</fieldset>
</form>
<?php
if(isset($reactie)){
//toon resultaat
echo '<p>'.$reactie.'</p>';
}
?>
<p>
<a href="http://validator.w3.org/check?uri=referer"><img style="border:0;width:88px;height:31px" src="http://www.w3.org/Icons/valid-xhtml10" alt="Valid XHTML 1.0 Transitional" height="31" width="88" />
</a>
<a href="http://jigsaw.w3.org/css-validator/">
<img style="border:0;width:88px;height:31px" src="http://jigsaw.w3.org/css-validator/images/vcss" alt="Valid CSS!" />
</a>
</p>
</body>
</html>
[/code]
Reacties
0