ugrás a tartalomhoz

Egyszerű valutaváltó készítése PHP-vel

millye · 2005. Szep. 5. (H), 09.50
Kellemes hétfői napot mindenkinek!

Készítek egy valutakonvertáló szkriptet és ismét segítségre szorulok.
Két problémám van:

1. PHP-ban hoztam létre egy FORM-ot. beszedem az adatokat, de az eredmenyt nem tudom a FORM egy mezőjében megjeleníteni.
<input name=\"eredmeny\" value=\"$eredmeny\"> nem működik

2. Hogyan lehet megoldani, hogy frissítéskor (a refresh ikonra klikkelve IE-ben ne jelenjem meg mindig a következő üzenet:
"Page cannot be refreshed without resending the information. Click Retry to send the information again, or click Cancel to return to the page that you were trying to view."

Itt van a PHP fileom tartalma (Ne nevessetek ki, kezdő vagyok.)
<?php
import_request_variables('GPC');

function szamol()
 		{
		global $osszeg, $valuta1, $valuta2, $eredmeny, $euroar,   $usdar, $hufar, $leiar, $kiir;
		$euroar=3.5135;    /* arfolyamok */
		$usdar=2.7957;
		$hufar=0.014411;
		$leiar=1;
		
/* 1 */	if ($valuta1=="Válassz1" && $valuta2=="Válassz2")     /* Indulaskor: VALUTA 1 = VALUTA 2 = Válassz */
		{
		$eredmeny=" ";           
		echo (" " . $eredmeny . " ");
		}
/* 2 */	if (($valuta1==$valuta2) && ($valuta1!="Válassz1") && ($valuta2!="Válassz2"))                       /* VALUTA 1 = VALUTA 2 */
		{
		$eredmeny="A két pénznem azonos!";           
		echo (" " . $eredmeny . " ");
		}
/* 3 */ if ($valuta1=="LEI" && $valuta2=="EURO")      /* LEI --> EURO */
		{
	    $eredmeny = $osszeg*($leiar/$euroar);
		$kiir = number_format($eredmeny, 2, '.', '');
		echo ("".$osszeg." ".$valuta1." = ".$kiir." ".$valuta2."");
		}
/* 4 */	if ($valuta1=="LEI" && $valuta2=="USD")      /* LEI --> USD */
		{
	    $eredmeny = $osszeg*($leiar/$usdar);
		$kiir = number_format($eredmeny, 2, '.', '');
		echo ("".$osszeg." ".$valuta1." = ".$kiir." ".$valuta2."");
		}
/* 5 */	if ($valuta1=="LEI" && $valuta2=="HUF")      /* LEI --> HUF */
		{
	    $eredmeny = $osszeg*($leiar/$hufar);
		$kiir = number_format($eredmeny, 2, '.', '');
		echo ("".$osszeg." ".$valuta1." = ".$kiir." ".$valuta2."");
		}
/* 6 */	if ($valuta1=="EURO" && $valuta2=="LEI")      /* EURO --> LEI */
		{
		$eredmeny = $osszeg*($euroar/$leiar);
		$kiir = number_format($eredmeny, 2, '.', '');
		echo ("".$osszeg." ".$valuta1." = ".$kiir." ".$valuta2."");
		}
/* 7 */ if ($valuta1=="EURO" && $valuta2=="USD")      /* EURO --> USD */
		{
		$eredmeny = $osszeg*($euroar/$usdar);
		$kiir = number_format($eredmeny, 2, '.', '');
		echo ("".$osszeg." ".$valuta1." = ".$kiir." ".$valuta2."");
		}
/* 8 */	if ($valuta1=="EURO" && $valuta2=="HUF")      /* EURO --> HUF */
		{
		$eredmeny = $osszeg*($euroar/$hufar);
		$kiir = number_format($eredmeny, 2, '.', '');
		echo ("".$osszeg." ".$valuta1." = ".$kiir." ".$valuta2."");
		}
/* 9 */	if ($valuta1=="USD" && $valuta2=="LEI")      /* USD --> LEI */
		{
		$eredmeny = $osszeg*($usdar/$leiar);
		$kiir = number_format($eredmeny, 2, '.', '');
		echo ("".$osszeg." ".$valuta1." = ".$kiir." ".$valuta2."");
		}
/* 10 */if ($valuta1=="USD" && $valuta2=="EURO")      /* USD --> EURO */
		{
		$eredmeny = $osszeg*($usdar/$euroar);
		$kiir = number_format($eredmeny, 2, '.', '');
		echo ("".$osszeg." ".$valuta1." = ".$kiir." ".$valuta2."");
		}
/* 9 */	if ($valuta1=="USD" && $valuta2=="HUF")      /* USD --> HUF */
		{
		$eredmeny = $osszeg*($usdar/$hufar);
		$kiir = number_format($eredmeny, 2, '.', '');
		echo ("".$osszeg." ".$valuta1." = ".$kiir." ".$valuta2."");
		}
/* 10 */if ($valuta1=="HUF" && $valuta2=="LEI")      /* HUF --> LEI */
		{
		$eredmeny = $osszeg*($hufar/$leiar);
		$kiir = number_format($eredmeny, 2, '.', '');
		echo ("".$osszeg." ".$valuta1." = ".$kiir." ".$valuta2."");
		}
/* 11 */if ($valuta1=="HUF" && $valuta2=="EURO")      /* HUF --> EURO */
		{
		$eredmeny = $osszeg*($hufar/$euroar);
		$kiir = number_format($eredmeny, 2, '.', '');
		echo ("".$osszeg." ".$valuta1." = ".$kiir." ".$valuta2."");
		}
/* 12 */if ($valuta1=="HUF" && $valuta2=="USD")      /* HUF --> USD */
		{
		$eredmeny = $osszeg*($hufar/$usdar);
		$kiir = number_format($eredmeny, 2, '.', '');
		echo ("".$osszeg." ".$valuta1." = ".$kiir." ".$valuta2."");
		}
		
		}

function main(){
echo "<HTML>
<HEAD>
<TITLE>Valutaváltó</TITLE>
</HEAD>
<BODY>
<FORM name=\"valutavalto\" ACTION=\"convertor.php\" METHOD=\"post\">
<TABLE ALIGN=\"CENTER\" WIDTH=\"8%\" BORDER=\"0\" CELLPADDING=\"2\" CELLSPACING=\"2\">
<TBODY>
    <TR>
	<TD ALIGN=\"LEFT\" NOWRAP>
	<B>Összeg:</B>
	</TD>
	<TD ALIGN=\"LEFT\" NOWRAP>
	<INPUT type=\"text\" style=\"background: transparent none repeat scroll 0%; -moz-background-clip: initial; -moz-background-inline-policy: initial; -moz-background-origin: initial;\" name=\"osszeg\" size=\"11\">
	</TD>
	</TR>
	<TR>
	<TD ALIGN=\"LEFT\" NOWRAP>
	<B>Errõl vált:</B>
	</TD>
    <TD ALIGN=\"LEFT\" NOWRAP>
<select name=\"valuta1\">
<option value=\"Válassz1\" selected>Válassz</option>
<option value=\"EURO\">EURO</option>
<option value=\"USD\">USD</option>
<option value=\"HUF\">HUF</option>
<option value=\"LEI\">LEI</option>
</select>
    </TD>
	<TD ALIGN=\"LEFT\" NOWRAP>
	<B>Erre vált:</B>
	</TD>
	<TD>
<select name=\"valuta2\">
<option value=\"Válassz2\" selected>Válassz</option>
<option value=\"EURO\">EURO</option>
<option value=\"USD\">USD</option>
<option value=\"HUF\">HUF</option>
<option value=\"LEI\">LEI</option>
</select>
    </TD>
	</TR>
	<TR>
	<TD></TD>
	<TD>
<input type=\"submit\" value=\"Számol\" onClick=\"szamol()\">
    </TD>
	</TR>
	<TR>
	<TD>
	<B>Eredmény:</B>
	</TD>
	<TD>
	<input name=\"eredmeny\" value=\"$eredmeny\"> /*Ez itt nem működik*/
	</TD>
	</TR>
</FORM>
</BODY>
</HTML>";
  }

 
szamol();
/*
echo (" " . $osszeg . " " . $valuta1 . " = " . $eredmeny . " " . $valuta2 . " ");
	*/
 
switch($op) {
	case "szamol";
	send();
	break; 
	
	case "main";
	main();
	break;

    default:
	main();
	break;
}
 
?>


Ha valaki segít, nagyon köszönöm!
További kellemes napot!

Millye
 
1

nagyon ronda a kódod

Hojtsy Gábor · 2005. Szep. 5. (H), 10.53
Nos, először is azonnal tessék elfelejteni, hogy import_request_variables() bármikor is létezett egyáltalán, és tessék megszokni a $_GET, $_POST és a többi tömb használatát, millió cikk van a neten arról, hogy ha könnyen feltörhető kódot akarsz csinálni, akkor nyugodtan használd az import_request_variables()-t, és üdvözölheted a betörők hordáját a szervereden.

Másrészt érdemes lenne egyébként is kicsit elmélyedni a tömbökben, mert az egész valutaváltást a rengeteg ismételgetés helyett egy tömbbel és pár sorral meg lehetne oldani.

Harmadszor pedig a szamol() írásakor érdekes módon tisztában voltál vele, hogy a global használata emel be változókat, de a main() írásakor már nem. Mivel a main()-ben nincs egyetlen változó sem definiálva, az $eredmeny változó értékéről nem tud semmit. Vagy global változót kell használni (nem jó módszer!), vagy paraméterként kell átadni (így jobb!).
2

Tudom, hogy ronda a kódom, én sem vagyok elragadtatva

millye · 2005. Szep. 5. (H), 12.44
Köszönöm az ötleteket, igyekszem ezen a vonalon elindulni. A baj az, hogy fogalmam sincs miként lehet egy tömb és csak egy pár sor segítségével valutaváltót készíteni.
Nem teljes megoldást kérek, de ha módodban áll, légy szíves küldj egy sovány vázlatot, legalább szavakban (szövegben).

Millye László
3

Példakód

attlad · 2005. Szep. 5. (H), 14.02

<?php

// bemeneti adatok, ellenőrizni kell
$v1 = 'USD';
$v2 = 'HUF';
$m = 20;

// árfolyamok euroban
$a = array(
    'EUR' => 1,
    'HUF' => 0.00410206803,
    'USD' => 0.798466943,
    'GBP' => 1.46662408
);

// átváltás
$s = $m * $a[$v1] / $a[$v2];

echo "$m $v1 = $s $v2";

?>
Attila
4

Hojtsy Gábornak

Anonymous · 2006. Feb. 1. (Sze), 20.47
Látom milyen profi vagy ha érdekel szíves adnék nagyobb feladatokat

antal##kukac##emin.hu

Antal Ferenc
5

<Nincs cím>

-zsolti- · 2006. Feb. 1. (Sze), 21.28
Szándékosan kell így megoldanod a feladatot, hogy kézzel adod meg az árfolyamokat és te konvertálgatod át? Csak mert én egyszer csináltam egy olyat, ami SOAP-on az MNB kimenetéből szedte ki mindig a legfrissebb adatokat, bár most nem találom. (Végülis ha beolvasol egy ilyen oldalt, akkor különféle regexp-es barkácsolással is ki lehet szedni belőle, de megkeresem, ha kell.)
6

soap, mint a szappan?

Balogh Tibor · 2006. Feb. 2. (Cs), 01.11
Nekem kell! Nem feltétlenül azonnal, de néhány hete pont ezen töprengtem, hogy vajon az MNB RSS vagy webszolgáltatás formájában közreadja-e ezeket az adatokat. De addig nem merészkedtem, hogy megkérdeztem volna őket.
A weboldalról való kiszedés azért nem szerencsés, mert ha változtatnak a weboldal megjelenésén, lehet átírni a kódot.
7

<Nincs cím>

-zsolti- · 2006. Feb. 2. (Cs), 07.35
Ezzel még annyi munka van, hogy érdemes cachelni a kimenetet, mert az fopen nem tartozik a gyors lefutású műveletek közé :) A kapott eredmény ugye egy XML lesz, azt pedig az XML függvényekkel fel tudod dolgozni (lásd manual).

<?php

$body = "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
$body .= "<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">";
$body .= "<soap:Body>";
$body .= "<GetCurrentExchangeRates xmlns=\"http://www.mnb.hu/webservices/\" />";
$body .= "</soap:Body>";
$body .= "</soap:Envelope>\r\n";

$req = "POST /arfolyamok.asmx HTTP/1.1\r\n";
$req.= "Host: www.mnb.hu\r\n";
$req.= "Connection: Close\r\n";
$req.= "Content-Type: text/xml; charset=utf-8\r\n";
$req.= "Content-Length: ".strlen($body)."\r\n";
$req.= "SOAPAction: \"http://www.mnb.hu/webservices/GetCurrentExchangeRates\"\r\n\r\n";

$fs = fsockopen("www.mnb.hu", 80);
fwrite($fs, $req.$body);
while (!feof($fs)) {
  $s = fgets($fs);
  echo $s.'<br />';
}
fclose($fs);

?>
8

<Nincs cím>

Balogh Tibor · 2006. Feb. 2. (Cs), 10.47
Szia Zsolt!

Köszi, legalább alkalmam lesz webszolgáltatásokkal megismerkednem.
Ezzel még annyi munka van, hogy érdemes cachelni a kimenetet, mert az fopen nem tartozik a gyors lefutású műveletek közé

Arról nem is beszélve, hogy ezek az adatok csak naponta változnak. Elég botorság lenne minden kéréskor a webszolgáltatáshoz fordulni.

Köszönettel
Balogh Tibor