Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Nie chce mnożyć stringa
Forum PHP.pl > Forum > Przedszkole
Dariusz_512
Mam taką oto tabele przygotowywaną w PHP na lekcje inf. zamiast zlekceważonego przeze mnie Office'a. Stosuje bazę TXT o takiej oto prostej treści:
"54 || 23 || 11 || 35 || 64 || 43 || 43 || 33"
Metoda skopiowana z pewnego kursu, pozmieniałem jednak parametry.
Część zmiennych już pochodzi z bazy txt, reszta jest przeze mnie dopiero wprowadzana (m.in stawka)

Działa, ale nie do końca. W wyniku wypisuje po koleji czas pracy (to tylko dla testu czy działa baza danych), nie działa jednak operacja mnożenia na wyciągniętej zmiennej.
To jest zmienna, ciąg znaków i dlatego nie może na niej operować?questionmark.gif

  1. 54 23, 11, 35, 64, 43, 43, 33
  2.  
  3.  
  4. Fatal error: Unsupported operand types in /var/www/sites/yoyo.pl/n/a/na-technike/excel.php on line 49


  1. <?php
  2.  
  3.  
  4. $plik = "db.txt";
  5. $zmienne = file($plik);
  6.  
  7. for($i=0;$i<count($zmienne);$i++) {
  8.  list($czas1[$i], $czas2[$i], $czas3[$i], $czas4[$i], $czas5[$i], $czas6[$i], $czas7[$i], $czas8[$i],) = explode(" || ", $zmienne[$i]);
  9. }
  10.  
  11. for($i=0;$i<count($zmienne);$i++)
  12.   echo $czas1[$i]." ".$czas2[$i].", ".$czas3[$i].", ".$czas4[$i].", ".$czas5[$i].", ".$czas6[$i].", ".$czas7[$i].", ".$czas8[$i]."<br />";
  13.  
  14. $czasa = $czas1;
  15.  
  16. // STAWKA
  17.  
  18. $stawka1 = 4;
  19. $stawka2 = 2;
  20. $stawka3 = 4;
  21. $stawka4 = 6;
  22. $stawka5 = 2;
  23. $stawka6 = 8;
  24. $stawka7 = 3;
  25. $stawka8 = 9;
  26.  
  27. // ILOCZYN POWYZSZYCH
  28.  
  29. $placa1 = $czasa * $stawka1;
  30. $placa2 = $czasb * $stawka2;
  31. $placa3 = $czasc * $stawka3;
  32. $placa4 = $czasd * $stawka4;
  33. $placa5 = $czase * $stawka5;
  34. $placa6 = $czasf * $stawka6;
  35. $placa7 = $czasg * $stawka7;
  36. $placa8 = $czash * $stawka8;
  37.  
  38. // PREMIA
  39.  
  40. $premia1 = 246;
  41. $premia2 = 27;
  42. $premia3 = 148;
  43. $premia4 = 63;
  44. $premia5 = 625;
  45. $premia6 = 82;
  46. $premia7 = 434;
  47. $premia8 = 98;
  48.  
  49. // SUMA PLACY I PREMII
  50.  
  51. $suma1 = $placa1 + $premia1;
  52. $suma2 = $placa2 + $premia2;
  53. $suma3 = $placa3 + $premia3;
  54. $suma4 = $placa4 + $premia4;
  55. $suma5 = $placa5 + $premia5;
  56. $suma6 = $placa6 + $premia6;
  57. $suma7 = $placa7 + $premia7;
  58. $suma8 = $placa8 + $premia8;
  59.  
  60. // STAWKA PODATKOWA
  61.  
  62. $stawkapodatkowa = 0.07;
  63.  
  64. // WARTOSC PODATKU
  65.  
  66. $podatek1 = $suma1 * $stawkapodatkowa;
  67. $podatek2 = $suma2 * $stawkapodatkowa;
  68. $podatek3 = $suma3 * $stawkapodatkowa;
  69. $podatek4 = $suma4 * $stawkapodatkowa;
  70. $podatek5 = $suma5 * $stawkapodatkowa;
  71. $podatek6 = $suma6 * $stawkapodatkowa;
  72. $podatek7 = $suma7 * $stawkapodatkowa;
  73. $podatek8 = $suma8 * $stawkapodatkowa;
  74.  
  75. // KASA BRUTTO
  76.  
  77. $brutto1 = $suma1 - $podatek1;
  78. $brutto2 = $suma2 - $podatek2;
  79. $brutto3 = $suma3 - $podatek3;
  80. $brutto4 = $suma4 - $podatek4;
  81. $brutto5 = $suma5 - $podatek5;
  82. $brutto6 = $suma6 - $podatek6;
  83. $brutto7 = $suma7 - $podatek7;
  84. $brutto8 = $suma8 - $podatek8;
  85.  
  86.  
  87.  
  88. <table border=2 cellpadding=1 cellspacing=2><b>
  89. <tr>
  90.    <td>Czas</td> <td>Stawka</td> <td>Płaca</td> <td>Premia</td> <td>Suma</td> <td>Podatek</td> <td>Brutto</td>
  91. </tr>
  92.  
  93. <tr>
  94.    <td>$czasa h </td> <td>$stawka1 PLN/h</td> <td>$placa1 PLN</td> <td>$premia1 PLN</td> <td>$suma1 PLN</td> <td>$podatek1 PLN</td> <td>$brutto1 PLN</td>
  95. </tr>
  96.  
  97. <tr>
  98.    <td>$czasb h</td> <td>$stawka2 PLN/h</td> <td>$placa2 PLN</td> <td>$premia2 PLN</td> <td>$suma2 PLN</td> <td>$podatek2 PLN</td> <td>$brutto2 PLN</td>
  99. </tr>
  100.  
  101. <tr>
  102.    <td>$czasc h</td> <td>$stawka3 PLN/h</td> <td>$placa3 PLN</td> <td>$premia3 PLN</td> <td>$suma3 PLN</td> <td>$podatek3 PLN</td> <td>$brutto3 PLN</td>
  103. </tr>
  104.  
  105. <tr>
  106.    <td>$czasd h</td> <td>$stawka4 PLN/h</td> <td>$placa4 PLN</td> <td>$premia4 PLN</td> <td>$suma4 PLN</td> <td>$podatek4 PLN</td> <td>$brutto4 PLN</td>
  107. </tr>
  108.  
  109. <tr>
  110.    <td>$czase h</td> <td>$stawka5 PLN/h</td> <td>$placa5 PLN</td> <td>$premia5 PLN</td> <td>$suma5 PLN</td> <td>$podatek5 PLN</td> <td>$brutto5 PLN</td>
  111. </tr>
  112.  
  113. <tr>
  114.    <td>$czasf h</td> <td>$stawka6 PLN/h</td> <td>$placa6 PLN</td> <td>$premia6 PLN</td> <td>$suma6 PLN</td> <td>$podatek6 PLN</td> <td>$brutto6 PLN</td>
  115. </tr>
  116.  
  117. <tr>
  118.    <td>$czasg h</td> <td>$stawka7 PLN/h</td> <td>$placa7 PLN</td> <td>$premia7 PLN</td> <td>$suma7 PLN</td> <td>$podatek7 PLN</td> <td>$brutto7 PLN</td>
  119. </tr>
  120.  
  121. <tr>
  122.    <td>$czash h</td> <td>$stawka8 PLN/h</td> <td>$placa8 PLN</td> <td>$premia8 PLN</td> <td>$suma8 PLN</td> <td>$podatek8 PLN</td> <td>$brutto8 PLN</td>
  123. </tr>
  124.  
  125. </b></table>
  126. ";
  127.  
  128. ?>
ultra_18
ta nie można mnożyć stringów ale można je zamienić na integer najlepiej rzutowaniem dopisując (int) po drugiej stronie porównania lub funkcja http://pl.php.net/settype ale w twoim przypadku chyba nie ma takiej koniecznosci, ponieważ masz już typ danych jako integer (można to sprawdzić http://pl.php.net/gettype lub http://pl.php.net/var_dump) . Problem leży w tym:

  1. <?php
  2. $czasa = $czas1;
  3.  
  4. $placa1 = $czasa * $stawka1;
  5. $placa2 = $czasb * $stawka2;
  6. $placa3 = $czasc * $stawka3;
  7. $placa4 = $czasd * $stawka4;
  8. $placa5 = $czase * $stawka5;
  9. $placa6 = $czasf * $stawka6;
  10. $placa7 = $czasg * $stawka7;
  11. $placa8 = $czash * $stawka8;
  12. ?>


Co to za czash etc skąd to wyczarowałeś?
Dariusz_512
Czasy pracy są pobierane z bazy danych tj. z pliku TXT.

Usunąłem zmienne bliźniaczki - czasa, czasb, czasc.... i w tabeli dałem proste

  1. <td>$czas1 h </td>


Natomiast na sam początek kodu php strzeliłem

  1. <?php
  2. settype($czas1, "integer");
  3. settype($czas2, "integer");
  4. settype($czas3, "integer");
  5. settype($czas4, "integer");
  6. settype($czas5, "integer");
  7. settype($czas6, "integer");
  8. settype($czas7, "integer");
  9. settype($czas8, "integer");
  10. ?>


Co oddało

  1. Warning: Cannot use a scalar value as an array in /var/www/sites/yoyo.pl/n/a/na-technike/excel.php on line 28

(Info: linia 28 nowego pliku odwołuje się do funkcji explode, nie zamieszczałem spowrotem kodu, by nie mieszać)

Witam z powrotem. Wystarczyło się samemu przyjrzeć funkcji explode by zobaczyć że cała ta paplanina z gotowego skryptu jest niepotrzebna i wystarczy

  1. <?php
  2. $nazwa = 'db.txt';
  3. $plik = fopen($nazwa,"r");
  4. $zmienne = fread($plik,filesize($nazwa));
  5. $czas=explode("||", $zmienne);
  6.  
  7. //a potem
  8.  
  9. $placa1 = $czas[0] * $stawka1;
  10.  
  11. // i
  12.  
  13. <td>$czas[1] h</td>
  14. ?>


Działa! yahoo.gif
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.