Salutare la toti acesta fiind primul meu post pe forum.
In legatura cu scriptul de aici: https://marplo.net/php-mysql/curs_valutar-s.php poate cineva sa imi arate cum introduc rezultatele intr-o baza de data mysql???
curs valutar in baza de date
-
- Mesaje: 2
curs valutar in baza de date
MarPlo
Salut
Acel script nu e conceput sa adauge cursul in baza de date, pentru asta trebuie cateva adaugari in script.
Iti scriu ca idee ce trebuie, daca stii PHP-MySQL te descurci.
Intai trebuie creat un tabel in baza de date, cu 5 coloane: data, dolari, euro, lires, aur.
Apoi, unde e codul acesta:
Sa fie cam asa (vezi comentariile din cod):
Acel script nu e conceput sa adauge cursul in baza de date, pentru asta trebuie cateva adaugari in script.
Iti scriu ca idee ce trebuie, daca stii PHP-MySQL te descurci.
Intai trebuie creat un tabel in baza de date, cu 5 coloane: data, dolari, euro, lires, aur.
Apoi, unde e codul acesta:
Cod: Selectaţi tot
if (count($curs_v)>=1) {
for($i=0; $i<count($curs_v); $i++) $rezult .= '<tr><td><b>'.$curs_v[$i][0].'</b></td><td>'.$curs_v[$i][1].'</td><td>Lei</td></tr>';
}
Cod: Selectaţi tot
if (count($curs_v)>=1) {
for($i=0; $i<count($curs_v); $i++) $rezult .= '<tr><td><b>'.$curs_v[$i][0].'</b></td><td>'.$curs_v[$i][1].'</td><td>Lei</td></tr>';
// Conectare la baza de date
// Se face Select in Tabel, pt. verificare daca a fost deja adaugat cursul azi
// SELECT `data` FROM `nume_tabel` WHERE `data`=data_de_azi LIMIT 1
// Doar daca Select-ul nu returneaza vreun rezultat, se face Insert
// INSERT INTO `nume_tabel` (data, dolari, euro, lires, aur) VALUES (data_de_azi, $curs_v[0][1], $curs_v[1][1], $curs_v[2][1], $curs_v[3][1])
}
barbacot
Multumesc pentru ajutor - am reusit acum.
Ideea era asa: cei de la BNR restrictioneaza ip-ul daca accesezi de prea multe ori acel curs valutar. O solutie ar fi sa preiei cursul intr-o baza de date care sa se actualizeze o data pe zi la ora 13. Alta solutie este cum ai facut tu cu fisier cache dar aveam nevoie de integrare in baza de date pentru a pastra un history al cursului si pentru a prelua datele din curs pe care mai apoi prin intermdiul unui javascript sa le folosesc pentru calcularea real time a unor sume in diverse valute.
In legatura cu verificarea eu aveam alta idee pentru a scapa de pericolul de a fi restrctionat ip-ul la BNR: sa pun baza de date sa incarce mereu informatia de curs din fisierul tau "valutarbnr.xml" -era mai simplu pentru mine mai ales ca nu stiam clar cum sa fac verificarea expirarii datei si cautarea unui nou curs in baza de date...
Ultima chestie.
Am gasit pe net un script care ar face acelasi lucru - tirziu ca acum am reusit cu ajutorul tau sa il modific pe acesta dar nu merge..."eroare preluare fisier" - pur didactic ca sa mai invat ceva daca ai timp poti sa imi explici de ce nu merge???
Ideea era asa: cei de la BNR restrictioneaza ip-ul daca accesezi de prea multe ori acel curs valutar. O solutie ar fi sa preiei cursul intr-o baza de date care sa se actualizeze o data pe zi la ora 13. Alta solutie este cum ai facut tu cu fisier cache dar aveam nevoie de integrare in baza de date pentru a pastra un history al cursului si pentru a prelua datele din curs pe care mai apoi prin intermdiul unui javascript sa le folosesc pentru calcularea real time a unor sume in diverse valute.
In legatura cu verificarea eu aveam alta idee pentru a scapa de pericolul de a fi restrctionat ip-ul la BNR: sa pun baza de date sa incarce mereu informatia de curs din fisierul tau "valutarbnr.xml" -era mai simplu pentru mine mai ales ca nu stiam clar cum sa fac verificarea expirarii datei si cautarea unui nou curs in baza de date...
Ultima chestie.
Am gasit pe net un script care ar face acelasi lucru - tirziu ca acum am reusit cu ajutorul tau sa il modific pe acesta dar nu merge..."eroare preluare fisier" - pur didactic ca sa mai invat ceva daca ai timp poti sa imi explici de ce nu merge???
Cod: Selectaţi tot
<?php
//----------------------------------------------------------------------
// CONFIGURARE
//----------------------------------------------------------------------
#-------------------------------------
# DATABASE
#-------------------------------------
define('DATABASE_HOST', 'localhost');
define('DATABASE_USER', 'user');
define('DATABASE_PASSWORD', 'password');
define('DATABASE_NAME', 'database');
#-------------------------------------
define('FISIER_SURSA', 'http://www.bnro.ro/nbrfxrates.xml');
define('EMAIL_ERRORS', 'webmaster@example.tld');
define('SUBIECT_EMAIL_ERRORS', 'Erori preluare curs valutar');
//----------------------------------------------------------------------
// FUNCTII
//----------------------------------------------------------------------
function connect() {
mysql_connect(DATABASE_HOST, DATABASE_USER, DATABASE_PASSWORD) or die('Eroare la conectarea la baza de date');
mysql_select_db(DATABASE_NAME) or die('Eroare la selectarea bazei de date');
}
function convert_date_format($date) {
$denumire_luni = array(
'ian' => 1,
'feb' => 2,
'mar' => 3,
'apr' => 4,
'mai' => 5,
'iun' => 6,
'iul' => 7,
'aug' => 8,
'sep' => 9,
'oct' => 10,
'nov' => 11,
'dec' => 12,
);
$needle = '/([0-9]{1,2})[\s]+([a-zA-Z]+)[\s\S]+([0-9]{2,4})/i';
preg_match($needle, $date, $matches);
$day = $matches[1];
$month = $denumire_luni[$matches[2]];
$year = $matches[3];
return mktime(0, 0, 0, $month, $day, $year);
}
function preluare_curs() {
// preluare continut fisier intr-un string
$file_content = @file_get_contents(FISIER_SURSA);
// modificarea textului pentru a fi scris unitar,
// cu litere mici (in special tagurile HTML)
$file_content = strtolower($file_content);
// verificare preluare completa fisier curs valutar
if (strpos($file_content, '<html>') and strpos($file_content, '</html>')) {
//--------- aflare data ultimului curs afisat --------------------------//
$needle = '%<tr>[\s]*<th>[\s]*Valuta[\s]*/[\s]*Data</th>[\s\S]*<th>([\s\S]+)</th>[\s]*</tr>%i';
preg_match($needle, $file_content, $matches);
if (empty($matches[1])) {
$result['errors'][] = 'EROARE PRELUARE CURS - imposibilitate prelucrare date - ultima data afisata'."\n";
$result['errors_status'] = 1;
return $result;
}
else {
$data_ultimul_curs_afisat = $matches[1];
$data_ultimul_curs_afisat = convert_date_format($matches[1]);
$result['content'] .= date('d.m.Y', $data_ultimul_curs_afisat)."\n";
// verificare daca a fost afisat cursul valutar pentru ziua de astazi
if (date('d.m.Y', $data_ultimul_curs_afisat) == date('d.m.Y')) {
// extragere curs pentru fiecare valuta
$sql = "SELECT * FROM valuta WHERE valuta_status = 1";
$res = mysql_query($sql);
while ($row = mysql_fetch_array($res)) {
$needle = '%<tr>[\s]*<th><img[^<]*</th><td>'.$row['valuta_simbol'].'</td>[\s]*<td>[^<]*</td>[\s]*<td>[^<]*</td>[\s]*<td>[^<]*</td>[\s]*<td>[^<]*</td>[\s]*<td[^>]*>([0-9,]*)</td>[\s]*</tr>%i';
preg_match($needle, $file_content, $matches);
if (empty($matches[1])) {
// atentionare fisier corupt sau structura fisier schimbata
$result['errors'][] = 'EROARE PRELUARE CURS VALUTAR - imposibilitate prelucrare date - (verifica structura fisier BNR) '.$row['valuta_simbol']."\n";
$result['errors_status'] = 1;
}
else {
// afisare rezultat preluare
$result['content'] .= $row['valuta_simbol'].' - '.$matches[1]."\n";
// inserare in baza de date a cursului pentru fiecare valuta in parte
// tabelul 'curs' nu permite doua inregistrari cu aceeasi data pentru o valuta
// se modifica separatorul de zecimale din virgula in punct
$sql = "INSERT INTO curs SET
curs_valuta_id = '".$row['valuta_id']."',
curs_data = '".date('Y-m-d', $data_ultimul_curs_afisat)."',
curs_valoare = '".str_replace(',', '.', $matches[1])."',
curs_date_added = NOW()
";
mysql_query($sql);
}
}
}
else {
// cursul pentru ziua de astazi nu a fost inca afisat
exit();
}
}
}
else {
// fisierul nu a putut fi citit
// avertizare webmaster prin email pentru a verifica daca nu cumva a fost schimbat URL-ul fisierului
$result['errors'][] = 'EROARE PRELUARE CURS - fisier inaccesibil (de verificat daca nu s-a schimbat locatia fisierului/URL)'."\n";
$result['errors_status'] = 1;
}
return $result;
}
//-------------------------------------------------------------------
// conectare si selectia bazei de date
@connect();
// interogheaza baza sql pentru a afla daca exista inregistrari cu data de azi,
// respectiv daca a fost sau nu preluat cursul valutar
$sql = "SELECT COUNT(*) FROM curs WHERE curs_data = '".date('Y-m-d')."'";
$res = mysql_query($sql);
$data = mysql_fetch_array($res);
if ($data[0] > 0) {
// in cazul in care exista inregistrari cu data de azi inseamna ca
// datele au fost preluate cu succes
exit();
}
else {
$rezultat_preluare = preluare_curs();
$display .= $rezultat_preluare['content'];
$display .= "\n";
$display .= '---------------------------------------------------------';
$display .= "\n";
if ($rezultat_preluare['errors_status']) {
foreach ($rezultat_preluare['errors'] as $value) {
$display .= $value;
}
// trimite email erori pentru supraveghere schimbari in URL sau in structura fisierului
mail(EMAIL_ERRORS, SUBIECT_EMAIL_ERRORS, $display);
}
echo $display;
}
?>
MarPlo
In codul pe care l-am scris in raspunsul de mai sus, datele care sunt adaugate in baza de date sunt cele preluate din fisierul .txt, deci nu se acceseaza site-ul BNR in acea parte de cod, ci se folosesc datele care mai inainte au fost citite din fisierul cache.
- Despre scriptul pe care l-ai postat, habar nu am, prea mult cod, nu stau de verificarea lui.
- Despre scriptul pe care l-ai postat, habar nu am, prea mult cod, nu stau de verificarea lui.
ggza
Domnule Marplo!MarPlo scrie: ↑15 Iul 2012In codul pe care l-am scris in raspunsul de mai sus, datele care sunt adaugate in baza de date sunt cele preluate din fisierul .txt, deci nu se acceseaza site-ul BNR in acea parte de cod, ci se folosesc datele care mai inainte au fost citite din fisierul cache.
- Despre scriptul pe care l-ai postat, habar nu am, prea mult cod, nu stau de verificarea lui.
Dupa ce stochez cursurile BNR in baza de date cum pot calcula variatia de curs fata de ziua precedenta, si cum pot afisa aceasta variatie?
Multumesc!
Si inca ceva. As vrea sa afisez multiplier-ul din tabelul xml al BNR. Cum introduc multiplier-ul in acest cod? https://marplo.net/php-mysql/curs_valutar
MarPlo
Salut,
Acea aplicatie de curs valutar e un script vechi, facut ca proiect in studiu de invatare php, fara optiuni de modificari,
Ca sa calculeze si sa afiseze variatia de curs valutar sunt necesare prea multe modificari in acel script.
Practic ar fi o noua versiune, refacuta.
Acea aplicatie de curs valutar e un script vechi, facut ca proiect in studiu de invatare php, fara optiuni de modificari,
Ca sa calculeze si sa afiseze variatia de curs valutar sunt necesare prea multe modificari in acel script.
Practic ar fi o noua versiune, refacuta.
MarPlo
O noua aplicatie de curs valutar plus conversii monede e la pagina:
marplo.net/php-mysql/curs_valutar_conversii
- Datele pot fi salvate in baza de date MySQL, foloseste fisiere cache, afiseaza variatia de curs fata de ziua precedenta (cu: indicator ascendent /descendent, valoare numerica si procente).
Pot fi afisate oricate valute din cele care sunt in fisierul xml de la bnr.
- La converseii se poate calcula cu sau fara TVA.
marplo.net/php-mysql/curs_valutar_conversii
- Datele pot fi salvate in baza de date MySQL, foloseste fisiere cache, afiseaza variatia de curs fata de ziua precedenta (cu: indicator ascendent /descendent, valoare numerica si procente).
Pot fi afisate oricate valute din cele care sunt in fisierul xml de la bnr.
- La converseii se poate calcula cu sau fara TVA.
Subiecte similare
-
Eroare curs valutar
Scripturi de pe site
Primul mesaj
Salutare, folosesc de ceva vreme scriptul pentru curs valutar, care e foarte ok.Ultimul mesaj
Recent la o validare a aparut eroarea
Uncaught SyntaxError:...
Nu e nici o problema.
Din ce am inteles, eroarea apare doar in validare, de la rularea codului care trebuie sa acceseze prin ajax un alt fisier. -
Curs valutar cu 4 zecimale
Scripturi de pe site
Primul mesaj
Salutare, super acest site, demult cautam asa ceva, nu stiu cum de un am dat pana acum de el. Foarte bun si util, bravo pentru ceea ce faci!Ultimul mesaj
As vrea...
Imi pare bine ca functioneaza corecct.
Varianta veche a cursului e lasata asa fiindca nimeni nu se mai arata interesat de ea.
La versiunea noua,... -
Lectiile 31-32 din Curs Eurocor Engleza avansati
Limba Engleza
Primul mesaj
Are cineva lecțiile 31 și 32 din cursul Engleză pentru avansați Eurocor?Ultimul mesaj
Salut
Sunt doar in format audio mp3 in arhiva pe care o puteti descarca de pe site. In manualul pdf (format scris) ultima lectie este 30.
Probabil... -
Tip de conectare la baza de date
Discutii si Intrebari Diverse
Primul mesaj
care este noul tip de fisier pentru conectara la baza de date?Ultimul mesaj
In prezent, tipurile de conectare la baza de date folosind php sunt PDO si MySQLi. PDO (PHP Data Objects) se poate folosi pentru conectare si la alte... -
Exportare baza de date
PHP - MySQL - XML
Primul mesaj
Salut, cum as putea exporta o baza de date prin PHP? Am vazut in mai multe exemple ca se foloseste ceva de genul acesta, dar nu stiu de ce nu se...Ultimul mesaj
Multe hosing-uri nu permit executia de comenzi pt. shell din php, cu exec(); (din motive de securitate) aceasta poate fi cauza de ce nu functioneaza... -
Include fisier cu adresa din baza de date
PHP - MySQL - XML
Primul mesaj
Am facut urmatorul cod care preia datele din sql pagina si include,imi arata blank page,ai vreo solutie?Ultimul mesaj
$page= $_GET ;
$pagess =$xyz->query(...
o sa merg pe clasic momentan ca imi da de cap,daca o sa ii dau de cap revin cu o postare