Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [js][php] Odczytywanie wartości kilku pól, Pobieranie wartości kilku pól - coś jak tablica
smarcz
post 17.05.2008, 05:38:56
Post #1





Grupa: Zarejestrowani
Postów: 80
Pomógł: 0
Dołączył: 12.05.2005

Ostrzeżenie: (0%)
-----


Witam! Ponownie mam pytanie.

Jak poradzić sobie z następującym problemem: skrypt php -> generuje formularz z polami input o nazwie wartość. Liczba tych pól jest nieznana i może być powiększana przez użytkownika obsługującego formularz. Dodatkowo pola te są automatycznie wypełniane za pomocą funkcji [js] licz - dlatego ich nazwa ma postać wartosc0, wartosc1 itd...

Teraz problem - chciałbym na końcu podsumować wszystkie pola o nazwie wartość za pomocą JS i wyświetlić wartość podsumowania w osobnym polu. Nie wiem tylko czym pobrać value pól o nazwie wartość:

  1. function oblicz(){
  2. var licz=0;
  3. for(i=0; i<<?=$_SESSION['pol']?>; i++){
  4. var x=document.getElementsByNames("wartosc"+i);
  5.  
  6. licz+=x;
  7. }
  8. alert(licz); //to dla sprawdzenia wykonywania obliczenia
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
Crozin
post 17.05.2008, 11:34:37
Post #2





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Nie
Kod
licz += x;
Tylko
Kod
licz += x.value;
Go to the top of the page
+Quote Post
smarcz
post 17.05.2008, 15:10:46
Post #3





Grupa: Zarejestrowani
Postów: 80
Pomógł: 0
Dołączył: 12.05.2005

Ostrzeżenie: (0%)
-----


Tak, to prawda zgubiłem element x.value ale po wprowadzeniu go nadal mamy błąd. Konsola błędów podaje komunikat - document.getElementsByNames is not a function?

Czemu?
Go to the top of the page
+Quote Post
nospor
post 17.05.2008, 15:16:51
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
Konsola błędów podaje komunikat - document.getElementsByNames is not a function?

Czemu?
A nie wpadles na pomysl, ze moze dlatego ze nie ma takiej funkcji? Sprawdzales w manualu/dokumentacji js? ja tam nei znalazlem takiej.
Ale moze jakbys uzyl document.getElementsByName() .... tongue.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
smarcz
post 17.05.2008, 18:47:49
Post #5





Grupa: Zarejestrowani
Postów: 80
Pomógł: 0
Dołączył: 12.05.2005

Ostrzeżenie: (0%)
-----


Jasne, dziękuję za sprostowanie. Java to dla mnie nieodkryty świat. Posunęliśmy się do przodu. Program zaczyna brać pod uwagę elementy z tabliczy jednak wynikiem jest NaN.
Dołączyłem funckję eval() i wstawiłem atrybut Number na licz licz = Number(licz); aby to obejść ale nadal jest błąd. może dołączę kod mojego skryptu.

1. Nagłówek PHP
  1. <?php
  2.  
  3. if(empty($_SESSION['pol'])){ $_SESSION['pol']=1; }
  4.  
  5. if($_POST){
  6. $_SESSION['pol']++;
  7. }
  8.  
  9. if(empty($_SESSION['produkt'])){ $_SESSION['produkt']=1; }
  10.  
  11. if($_POST['add_p']){
  12. if(empty($_SESSION['produkt'])){ $_SESSION['produkt']=2; }
  13. else{ $_SESSION['produkt']++; }
  14. }
  15. ?>


2. Kod JS
  1. function licz(cena,ilosc,rabat,wartosc){
  2.  
  3. x=cena.value;
  4. x=x.replace(',','.');
  5. x=parseFloat(x);
  6.  
  7. y=ilosc.value;
  8. y=y.replace(',','.');
  9. y=parseFloat(y);
  10.  
  11. var suma = 0;
  12. x = eval(x);
  13. y = eval(y);
  14.  
  15. suma = x * y;
  16.  
  17. if(rabat.value==""){
  18. suma = x * y;
  19. var suma = Number(suma);
  20. suma = Math.round(suma*100)/100;
  21. }else{
  22. r=rabat.value;
  23. r=r.replace(',','.');
  24. r=parseFloat(r);
  25. r = eval(r);
  26. var rabat;
  27. rabat = (x*y*r)/100;
  28. suma = (x*y) - rabat;
  29. suma = Math.round(suma*100)/100;
  30. }
  31.  
  32. wartosc.value = suma;
  33.  
  34.  
  35. }
  36.  
  37. function oblicz(){
  38. var licz=0;
  39. for(i=0; i<<?=$_SESSION['pol']?>; i++){
  40. var x=document.getElementsByName("wartosc"+i);
  41.  
  42. licz += eval(x.value);
  43. var licz = Number(licz);
  44. //licz = 0;
  45.  
  46. var pole = '<input type="text" name="p['+i+']" value="'+licz+'" />';
  47. document.getElementById("pola").innerHTML += pole;
  48. }
  49. alert(licz);
  50.  
  51. }


3. Tabla do wypełnienia:
  1. <form action="<?=$_SERVER['PHP_SELF'];?>" method="post" enctype="multipart/form-data" name="f1" id="f1">
  2. <div id="pola"></div>
  3. <table width="100%" border="1" style="margin-top: 20px;">
  4. <tr>
  5. <td style="width: 25px;">Lp.</td>
  6. <td style="width: 350px;">Produkt</td>
  7. <td style="width: 100px;" align="right">Cena jednost.</td>
  8. <td align="center">Ilość [szt.]</td>
  9. <td align="center">Rabat [%]</td>
  10. <td style="width: 150px;" align="center">Wartość</td>
  11. </tr>
  12. <?
  13. for($i=0; $i<$_SESSION['produkt']; $i++){?>
  14. <tr>
  15. <td align="center"><? $lp = $i+1; echo($lp);?></td>
  16. <td><input style="width: 100%" type="text" name="nazwa_p<?=$i;?>" value="<?=$_POST['nazwa_p'.$i.''];?>"></td>
  17. <td><input style="width: 100%" type="text" name="cena_jed<?=$i;?>" value="<?=$_POST['cena_jed'.$i.''];?>"></td>
  18. <td><input style="width: 100%" type="text" name="ilosc<?=$i;?>" value="<?=$_POST['ilosc'.$i.''];?>" onkeyup="licz(document.f1.cena_jed<?=$i;?>,document.f1.ilosc<?=$i;?>,document.f1.rabat<?=$i;?>,document.f1.wartosc<?=$i;?>)"></td>
  19. <td><input style="width: 100%" type="text" name="rabat<?=$i;?>" value="<?=$_POST['rabat'.$i.''];?>" onkeyup="licz(document.f1.cena_jed<?=$i;?>,document.f1.ilosc<?=$i;?>,document.f1.rabat<?=$i;?>,document.f1.wartosc<?=$i;?>)"></td>
  20. <td><input style="width: 100%" type="text" name="wartosc<?=$i;?>" id="wartosc<?=$i;?>" value="<?=$_POST['wartosc'.$i.''];?>" readonly="readonly"></td>
  21. </tr>
  22. <?}?>
  23. <tr>
  24. <td colspan="5" align="right">Dodaj kolejny produkt:</td>
  25. <td><input style="width: 150px;" type="submit" name="add_p" value="Dodaj kolejny produkt"></td>
  26. </tr>
  27. </table>
  28. <input type="hidden" name="pol" value="<?=$i;?>">
  29. <input style="width: 100%" type="text" name="ddd" onkeyup="oblicz()">
  30. </form>


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Wiem, że nie ładnie jest odpowiadać samemu sobie - ale poprawnym rozwiązaniem jest zastosowanie:

x=document.getElementById("wartosc"+i);

licz = eval(x.value);

Działa! smile.gif

Dzięki za wszelkie podpowiedzi
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 10:59