Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript][PHP] Kurs waluty w zależności od daty
Forum PHP.pl > Forum > Przedszkole
maza66
Witam

Mam formularz w którym wybieram datę (z kalendarzyka pop-up) i chciałbym aby w momencie wpisania daty
w drugim polu formularza wpisał się odpowiedni dla tej daty kurs przechowywany w postaci listy w drugim pliku.
Jak się za to zabrać?
Wszelkie podpowiedzi będą mile widziane :-)
benio101
Zapomniałaś kodu
maza66
Kod jest jeszcze w powijakach ;-)

  1. <form action="dopisz.php" method="post" name="generator">
  2. <tr>
  3. <td>Data <input type="text" name="data_f" size="10" value=''> <a href="java script:showCal('Kalendarz')">KALENDARZ</a></td>
  4. <!-- kalendarz działa i generuje datę postaci "dd-mm-RRRR" -->
  5. <!-- teraz chciałbym żeby w poniższym polu podpowiadał się odpowiedni dla tej daty kurs waluty pobrany z pliku "kursy.php" -->
  6. <td>Kurs <input type="text" name="kurs" value='<? " "; ?>' size="8"></td>
  7. <td><input type="submit" value="Dopisz"></td>
  8. </tr>
  9. </form>
  10.  
  11. Plik "kursy.php":
  12. <?
  13. $kurs[12][31]='3,00';//kurs waluty na 31 grudnia 2010
  14. $kurs[1][1]='3,50';//kurs waluty na 1 styczna 2011
  15. $kurs[1][2]='4,00';//kurs waluty na 2 styczna 2011
  16.  
  17. echo $kurs[date("n")][date("j")];
  18. ?>
  19.  

benio101
Jaki przedział dat zawierasz w $kurs? (cały rok, wiele lat, czy jak?)
maza66
Chyba wiem o co Ci chodzi... W tym konkretnym przypadku trzeba by dodać jeszcze rok,
zmienić kolejność i zamienić "j" na "d" (czyli dzień miesiąca z zerem na początku) oraz "n" na "m" (podobnie dla miesiąca).

  1. <?
  2. $kurs[2][1][2011]='4,00';//kurs waluty na 2 styczna 2011
  3.  
  4. echo $kurs[date("d")][date("m")][date("Y")];
  5. ?>
benio101
Dokładnie.. teraz się zastanowię..
W główce daj
  1. <script>
  2. var kurs=new Array();
  3. for(var i=1;i<=31;++i){
  4. kurs[i]=new Array();
  5. for(var j=1;j<=12;++j){
  6. kurs[i][j]=new Array();
  7. }
  8. }
  9.  
  10. // teraz dajesz <? include "kursy.php"; ?>
  11. // a w kursy.php rzutujesz wszystkie wartości na Javascript;
  12. </script>

kursy.php więc będą wyglądać +/- tak:
  1. <?
  2. echo "kurs[2][1][2011]='4,00';//kurs waluty na 2 styczna 2011";
  3. //(...) itd. dla wszystkich dat
  4. ?>

do tego inputa o name=data_f dodaj id=data_f
do tego inputa o name=kurs dodaj id=kurs
a na końcu funkcji ShowCal daj instrukcję:
[JAVASCRIPT] pobierz, plaintext
  1. var data=document.getElementById('data_f').value;
  2. var d=data[0];
  3. if(d){
  4. d+=data[1];
  5. } else {
  6. d=data[1];
  7. }
  8. var d=data[3];
  9. if(d){
  10. d+=data[4];
  11. } else {
  12. d=data[4];
  13. }
  14. var r=data[6]+data[7]+data[8]+data[9];
  15.  
  16. document.getElementById('kurs').value=kurs[d][m][r];
[JAVASCRIPT] pobierz, plaintext


Działa?
maza66
Na razie nie...
Wyskakuje błąd: Brak definicji 'm'

Kod
function showCal(name) {
  var lastCal=currentCal;
  var d=new Date(), hasCal=false;

  currentCal = findCalendar(name);

  if (currentCal != null && currentCal.form != null && currentCal.form[currentCal.field]) {
    var calRE = getFormat();

    if (currentCal.form[currentCal.field].value!="" && calRE.test(currentCal.form[currentCal.field].value)) {
      var cd = getDateNumbers(currentCal.form[currentCal.field].value);
      d=new Date(cd[0],cd[1],cd[2]);

      cY=cd[0];
      cM=cd[1];
      dd=cd[2];
    }
    else {
      cY=d.getFullYear();
      cM=d.getMonth();
      dd=d.getDate();
    }

    var calendar=calHeader()+calTitle(d)+calBody(d,dd)+calFooter();

    if (calWin != null && typeof(calWin.closed)!="undefined" && !calWin.closed) {
      hasCal=true;
      calWin.moveTo(winX+calOffsetX,winY+calOffsetY);
    }

    if (!hasCal) {
      if (isIE || isOpera6) {
        calWin=window.open("","cal","toolbar=0,width="+calWidth+",height="+calHeight+",left="+(winX+calOffsetX)+",top="+(winY+calOffsetY));
      }
      else {
        calWin=window.open("","cal","toolbar=0,width="+calWidth+",height="+calHeight+",screenx="+(winX+calOffsetX)+",screeny="+(winY+calOffsetY));
      }
    }

    calWin.document.open();
    calWin.document.write(calendar);
    calWin.document.close();

    calWin.focus();
  }
  else {
    if (currentCal == null) {
      window.status = "Calendar ["+name+"] not found.";
    }
    else if (!currentCal.form) {
      window.status = "Form ["+currentCal.formName+"] not found.";
    }
    else if (!currentCal.form[currentCal.field]) {
      window.status = "Form Field ["+currentCal.formName+"."+currentCal.field+"] not found.";
    }

    if (lastCal != null) {
      currentCal = lastCal;
    }
  }
    
var data=document.getElementById('data_fak').value;
var d=data[0];
if(d){
d+=data[1];
} else {
d=data[1];
}
var d=data[3];
if(d){
d+=data[4];
} else {
d=data[4];
}
var r=data[6]+data[7]+data[8]+data[9];

document.getElementById('kurs').value=kurs[d][m][r];
            

    
}
benio101
[JAVASCRIPT] pobierz, plaintext
  1. var data=document.getElementById('data_f').value;
  2. var d=data[0];
  3. if(d){
  4. d+=data[1];
  5. } else {
  6. d=data[1];
  7. }
  8. var m=data[3];
  9. if(m){
  10. m+=data[4];
  11. } else {
  12. m=data[4];
  13. }
  14. var r=data[6]+data[7]+data[8]+data[9];
  15.  
  16. document.getElementById('kurs').value=kurs[d][m][r];
[JAVASCRIPT] pobierz, plaintext

Sorki, zapomniałem podmienić d na m, przeoczyłem to.
Choć dziwi mnie, że nie skapnąłeś się, że o to chodzi, tym bardziej przy komunikacie o braku definicji m.

Spróbuj teraz (poprawiłem ostatni kod JavaScript), powinno śmigać.
I jeszcze raz sorki za niedopatrzenie, pisałem w pośpiechu.
maza66
Niestety z javascriptu jestem zupełnie zielony... coś jakbym czytał po chińsku

Kod
kurs[d][m][r]
- bez cudzysłowu -> wywalał błąd:
Kod
'kurs[...]' jest pusty lub nie jest obiektem

z cudzysłowem
Kod
document.getElementById('kurs').value='kurs[d][m][r]';

zadziałało połowicznie - w polu kurs wpisał to samo:
Kod
kurs[d][m][r]
benio101
A wstawiłeś w sekcji head ten 1. od góry kod, który napisałem?
maza66
Tak
benio101
W kodzie, który wkleiłeś, znalazłem
  1. var data=document.getElementById('data_fak').value;

Powinno być:
  1. var data=document.getElementById('data_f').value;

Czyżbyś źle skopiował?
Popraw i sprawdź.
maza66
Dobry jesteś, ale to raczej nie to. Ja mam wszędzie 'data_fak' , ale skróciłem na 'data_f' żeby tak ostro nie brzmiało...


Ktoś ma jeszcze jakiś pomysł?
melkorm
Zmienną kurs zapisz w postaci klucz jako data (w formacie jaką zwraca Ci kalendarz typu : 2011-01-01) np:
  1. $kurs['2011-01-01'] = '4.00';

Za include lub na końcu w include daj: (oczywiście w tagach script)
  1. var kurs = <?php json_encode( $kurs ); ?>;


No i wtedy dla funkcji onchange dla inputa do wartości kursu odwołujesz się poprzez
  1. var data_z_inputa; // tu sobie przypsizesz datę z inputa na event onchange
  2. //i wtedy tylko
  3. if( kurs [ data_z_inputa ] != undefined)
  4. {
  5. val = kurs [ data_z_inputa ]; // tu masz wartość wystarczy ją wrzucić do inputa z kursem
  6. }
maza66
Jedno jest pewne, że muszę się jeszcze duuuuużo nauczyć...

W dokumencie index.php, w sekcji body mam:
  1. <?php
  2. include "kursy.php";
  3. ?>
  4.  
  5. <script type="text/javascript" language="JavaScript">
  6. <!--
  7. var kurs = '<?php json_encode( $kurs ); ?>';
  8. //-->


Dałem <?php json_encode( $kurs ); ?> w pojedyńczy cudzysłów bo wychodził błąd
Kursy w pliku kursy.php wyglądają tak

  1. <?php
  2.  
  3. $kurs['2010-12-31'] = '3.9603';
  4. $kurs['2011-01-01'] = '4.0000';
  5.  
  6. ?>


Potem to co przysłałeś (niezmienione - pewnie to błąd)

  1. <script type="text/javascript" language="JavaScript">
  2. <!--
  3. var Data_z_inputa;
  4. if( kurs [ Data_z_inputa ] != undefined)
  5. {
  6. val = kurs [ Data_z_inputa ];
  7. }
  8. //-->


i dalej formularz

  1. <form action="dopisz.php" method="post" name="generator">
  2. Data <input type="text" id='data_fak' name='data_fak' onchange="Data_z_inputa()"><a href="java script:showCal('Kalendarz')">Kalendarz</a>
  3. Kurs <input type='text' name='kurs' id='kurs' value='<? "$val;" ?>'>
  4. <input type="submit" value="Dopisz">
  5. </form>


Jak widać nie mogę sobie poradzić z pobraniem warości kursu, bo to
  1. value='<? "$val;" ?>'

jest złe, ale próbowałen na różne sposoby i nie mam pomysłu jak to rozwiązać...
melkorm
W 30% to był pseudo kod smile.gif Resztę miałeś sobie dopisać.

Zapoznaj się z:
- Funkcje w javascript
- zdarzenia w javascript (onchange, onclick itp) i wywoływanie w nich kodu/funkcji javascript
- pobieranie wartości elementów w javascript

Powinno to Tobie pomóc w analizie tego kodu i podpięcie pod swoje wymagania, na prawdę nie wiele tam trzeba by to chodziło jak chcesz.

Ogólnie to wygląda tak:
Wybierając datę odpalany jest event onchange (zmiana wartości inputa) która w swojej definicji odpali Twoją zdefiniowaną funkcję która pobierze wartość inputa ( datę ) i wykona wcześniej podany warunek po czym wstawi odpowiednią wartość w inputa do którego chcesz.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.