Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Baza danych TXT w PHP - dwa pliki, rapot
tiszok
post 28.05.2018, 10:43:23
Post #1





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 28.05.2018

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


Witam. Mam problem ze skonstruowaniem funkcji odpowiedzialnej za ukazanie pracowników (imię, nazwisko, opcjonalnie jego id) oraz sumę zarobionych pieniędzy przez każdego z nich. Posiadam dwa pliki .txt:


usluga.txt
  1. id;nazwa;cena;id_prac;id_kontr
  2. 1 ; 1 ; 1 ; 1 ; 1
  3. 2 ; 2 ; 2 ; 2 ; 2
  4. 3 ; 123 ; 2000 ; 1 ; 1
  5. 4 ; 2 ; 3200 ; 1 ; 1



oraz

prac.txt
  1. id;imie;nazwisko;pesel;adres_m;adres_ul;adres_nr;telefon;id_firmy
  2. 1 ; test ; test ; 123 ; test ; test ; test ; 123 ; 1
  3. 2 ; asd ; sdgf ; 123 ; hjg ; gh ; hjg ; 123 ; 1
  4. 3 ; kak ; ksakdf ; 1234213 ; skadjf ; kjdfsak ; kdfjsak ; 1232 ; 1


Jak połączyć te dwie tabele razem by można było zsumować ilość zarobionych pieniędzy przez każdego pracownika?
Pozdrawiam
PS. Dodam, że jestem nieco zielony w tym temacie, a generator tego raportu potrzebuję na zaliczenie projektu do szkoły.

Ten post edytował tiszok 28.05.2018, 10:44:09
Go to the top of the page
+Quote Post
Pyton_000
post 28.05.2018, 11:15:47
Post #2





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


No to pokaż co już zrobiłeś.
Go to the top of the page
+Quote Post
tiszok
post 28.05.2018, 11:18:48
Post #3





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 28.05.2018

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


Cytat(Pyton_000 @ 28.05.2018, 12:15:47 ) *
No to pokaż co już zrobiłeś.

Miałem zrobione jedynie wyświetlanie jednej całej tabeli, potrafię zsumować jeśli ręcznie podam jego id. Nie mogę tego niestety zautomatyzować :/
Kod z pewnością jest nieczytelny, ale samo wyświetlanie tabeli wygląda tak:
  1. <?php
  2. $plik = "tabele/dkontrahentow.txt";
  3. $dane = file($plik);
  4. for($i=0;$i<count($dane);$i++) {
  5. list($id[$i], $imie[$i], $nazwisko[$i], $pesel[$i], $adres_m[$i], $adres_ul[$i], $adres_nr[$i], $telefon[$i]) = explode(";",$dane[$i]);
  6.  
  7.  
  8. }
  9. echo "<table border='1'>";
  10. for($i=0;$i<count($dane);$i++) {
  11. if ($i>0) { echo "<tr><td>".$id[$i]."<td/><td> ". $imie[$i]." <td/><td>". $nazwisko[$i]."<td/><td> ". $pesel[$i]."<td/><td> ". $adres_m[$i]."<td/><td> ". $adres_ul[$i]."<td/><td> ". $adres_nr[$i]."<td/><td> ". $telefon[$i]."<td/><td> <form action=\"edytujkontrahent.php\" method=\"POST\"> <input type=\"submit\" name=\"zmien\" value=\"". $id[$i]."\"> </form> <td/></tr><br/>";
  12.  
  13. }
  14. else
  15. echo "<tr><td>".$id[$i]."<td/><td> ". $imie[$i]." <td/><td>". $nazwisko[$i]."<td/><td> ". $pesel[$i]."<td/><td> ". $adres_m[$i]."<td/><td> ". $adres_ul[$i]."<td/><td> ". $adres_nr[$i]."<td/><td> ". $telefon[$i]."<td/><td>zmień<td/></tr><br/>";
  16. }
  17. echo "</table>";
  18.  
  19. ?>
Go to the top of the page
+Quote Post
Pyton_000
post 28.05.2018, 11:27:47
Post #4





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Na początku wczytaj sobie do oddzielnych tablic dane z plików które potrzebujesz. Jako klucz tablicy możesz używać ID rekordu wtedy będzie Ci łatwiej powiązać je ze sobą.

Jak już będziesz miał tablice to wystarczy pętla a w niej jakiś warunek na sprawdzenie czy istnieje rekord w innej tablicy i jak jest to wyświetlenie sobie.

Sumowanie w ten sam sposób, lecisz tablicą i jako wynik dodajesz do innej tablicy a potem już sobie wyświetlasz.
Go to the top of the page
+Quote Post
tiszok
post 28.05.2018, 11:31:25
Post #5





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 28.05.2018

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


Cytat(Pyton_000 @ 28.05.2018, 12:27:47 ) *
Na początku wczytaj sobie do oddzielnych tablic dane z plików które potrzebujesz. Jako klucz tablicy możesz używać ID rekordu wtedy będzie Ci łatwiej powiązać je ze sobą.

Jak już będziesz miał tablice to wystarczy pętla a w niej jakiś warunek na sprawdzenie czy istnieje rekord w innej tablicy i jak jest to wyświetlenie sobie.

Sumowanie w ten sam sposób, lecisz tablicą i jako wynik dodajesz do innej tablicy a potem już sobie wyświetlasz.

Dziękuję bardzo za szybką odpowiedź wink.gif postaram się dziś coś napisać pod wieczór, jesli nie będzie coś działać odezwę się.
Pozdrawiam
Go to the top of the page
+Quote Post
Pyton_000
post 28.05.2018, 12:33:45
Post #6





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Jak widać chęci i efekty to i pomoc się znajdzie.
Go to the top of the page
+Quote Post
tiszok
post 28.05.2018, 18:18:22
Post #7





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 28.05.2018

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


Wróciłem, pokombinowałem i niestety nie wiem jak połączyć te tablice tak, by można było zsumować cenę dla danego id pracownika (nie mam pojęcia co zrobić i jak, kompletnie się zgubiłem), prawdopodobnie przeliczyłem swoją wiedzę i siły. Co użyć i w jaki sposób (lub jak zbudować to kompletnie inaczej) by całość zadziałała poprawnie? Chyba bez podania budowy się niestety nie obejdzie sad.gif

raport.php
  1. <?php
  2. $uplik = "tabele/usluga.txt";
  3. $udane = file($uplik);
  4. for($u=0;$u<count($udane);$u++) {
  5. list($uid[$u], $unazwa[$u], $ucena[$u], $uid_prac[$u], $uid_kontr[$u]) = explode(";",$udane[$u]);}
  6.  
  7. $pplik= "tabele/prac.txt";
  8. $pdane = file($pplik);
  9.  
  10. for($p=0;$p<count($pdane);$p++) {
  11. list($pid[$p], $pimie[$p], $pnazwisko[$p], $ppesel[$p], $padres_m[$p], $padres_ul[$p], $padres_nr[$p], $ptelefon[$p]) = explode(";",$pdane[$p]);}
  12.  
  13. echo 'Liczba wierszy: '.(count($udane)-1).'<br/>';
  14. for($i=1;$i<count($udane);$i++) {
  15. echo $uid[$i].";".$unazwa[$i].";".$ucena[$i].";".$uid_prac[$i].";".$uid_kontr[$i]."<br>";}
  16. echo "<br><br><br>";
  17. echo 'Liczba wierszy: '.(count($pdane)-1).'<br/>';
  18.  
  19.  
  20. for($x=1;$x<count($pdane);$x++) {
  21. echo $pid[$x].";".$pimie[$x].";".$pnazwisko[$x].";".$ppesel[$x].";".$padres_m[$x].";".$padres_ul[$x].";".$padres_nr[$x].";".$ptelefon[$x]."<br>";}
  22.  
  23. echo "<br><br><br>";
  24.  
  25.  
  26. echo '<table border="1">';
  27. echo '<tr><td>Imie</td><td>nazwisko</td><td>zarobione pieniadze</td></tr>';
  28. for ($x=1; $x < count($uid) ; $x++) {
  29.  
  30. for ($i=1; $i < count($uid) ; $i++) {
  31.  
  32. if ($uid_prac[$i]==$x) {
  33. echo $uid_prac[$i]."<br>";
  34. echo $ucena[$i]."<br>";
  35.  
  36. }}}
  37. echo '</table>';
  38.  
  39.  
  40. ?>


Wynik przeglądarki:
Go to the top of the page
+Quote Post
Pyton_000
post 28.05.2018, 19:24:37
Post #8





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


To jest kod pod PHP7
Odpal sobie, zobacz jak wyglądają dane i teraz już możesz sobie wyświetlić...

  1. <?php
  2. // Plik Usług
  3. $uslugi = file('tabele/usluga.txt', FILE_IGNORE_NEW_LINES);
  4. $uslugiDane = [];
  5. foreach ($uslugi as $usluga) {
  6. if(!isset($uslugiDane[$idPracownika])) {
  7. $uslugiDane[$idPracownika] = [];
  8. }
  9. [$id, $nazwa, $cena, $idPracownika, $idKontrahenta] = explode(';', $usluga);
  10. // id;nazwa;cena;id_prac;id_kontr
  11. $uslugiDane[$idPracownika][] = compact('nazwa', 'cena', 'idPracownika', 'idKontrahenta');
  12. }
  13.  
  14. // Plik Prac
  15. $pracownicy = file('tabele/prac.txt', FILE_IGNORE_NEW_LINES);
  16. $pracownicyDane = [];
  17. foreach ($pracownicy as $pracownik) {
  18. [$id, $imie, $nazwisko] = explode(';', $pracownik);
  19. // id;imie;nazwisko;pesel;adres_m;adres_ul;adres_nr;telefon;id_firmy
  20. $pracownicyDane[$id] = compact('imie', 'nazwisko');
  21. }
  22.  
  23. var_dump($uslugiDane);
  24. var_dump($pracownicy);
  25.  
  26. echo '<table border="1">';
  27. echo '<tr><td>Imie</td><td>nazwisko</td><td>zarobione pieniadze</td></tr>';
  28.  
  29. foreach($pracownicy as $id => $pracownik) {
  30.  
  31. }
  32.  
  33. echo '</table>';
  34.  
  35.  
  36. ?>
Go to the top of the page
+Quote Post
tiszok
post 29.05.2018, 16:55:20
Post #9





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 28.05.2018

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


Cytat(Pyton_000 @ 28.05.2018, 20:24:37 ) *
To jest kod pod PHP7
Odpal sobie, zobacz jak wyglądają dane i teraz już możesz sobie wyświetlić...

  1. <?php
  2. // Plik Usług
  3. $uslugi = file('tabele/usluga.txt', FILE_IGNORE_NEW_LINES);
  4. $uslugiDane = [];
  5. foreach ($uslugi as $usluga) {
  6. if(!isset($uslugiDane[$idPracownika])) {
  7. $uslugiDane[$idPracownika] = [];
  8. }
  9. [$id, $nazwa, $cena, $idPracownika, $idKontrahenta] = explode(';', $usluga);
  10. // id;nazwa;cena;id_prac;id_kontr
  11. $uslugiDane[$idPracownika][] = compact('nazwa', 'cena', 'idPracownika', 'idKontrahenta');
  12. }
  13.  
  14. // Plik Prac
  15. $pracownicy = file('tabele/prac.txt', FILE_IGNORE_NEW_LINES);
  16. $pracownicyDane = [];
  17. foreach ($pracownicy as $pracownik) {
  18. [$id, $imie, $nazwisko] = explode(';', $pracownik);
  19. // id;imie;nazwisko;pesel;adres_m;adres_ul;adres_nr;telefon;id_firmy
  20. $pracownicyDane[$id] = compact('imie', 'nazwisko');
  21. }
  22.  
  23. var_dump($uslugiDane);
  24. var_dump($pracownicy);
  25.  
  26. echo '<table border="1">';
  27. echo '<tr><td>Imie</td><td>nazwisko</td><td>zarobione pieniadze</td></tr>';
  28.  
  29. foreach($pracownicy as $id => $pracownik) {
  30.  
  31. }
  32.  
  33. echo '</table>';
  34.  
  35.  
  36. ?>

Serwer zwrócił błąd:
  1. Parse error: syntax error, unexpected '=' in E:\xampp\htdocs\firma\php.php on line 9

Edit: Odpaliłem, przejrzałem, teraz powinienem dać radę smile.gif Dziękuję bardzo

Dla wszystkich, którzy szukaliby rozwiązania problemu w 100%, prześlę gotowy już skrypt wyświetlający ten raport smile.gif

raport.php
  1. <?php
  2. // Plik Usług
  3. $uslugi = file('tabele/usluga.txt', FILE_IGNORE_NEW_LINES);
  4. $uslugiDane = [];
  5. $iloscpracownikow=[];
  6. foreach ($uslugi as $usluga) {
  7. list($id, $nazwa, $cena, $idPracownika, $idKontrahenta) = explode(';', $usluga);
  8. if(!isset($uslugiDane[$idPracownika])) {
  9. $uslugiDane[$idPracownika] = [];
  10. }
  11.  
  12. // id;nazwa;cena;id_prac;id_kontr
  13. $uslugiDane[$idPracownika][] = compact('nazwa', 'cena', 'idPracownika', 'idKontrahenta');
  14. }
  15.  
  16. // Plik Prac
  17. $pracownicy = file('tabele/prac.txt', FILE_IGNORE_NEW_LINES);
  18. $pracownicyDane = [];
  19. foreach ($pracownicy as $pracownik) {
  20. list($id, $imie, $nazwisko, $pesel, $adres_m, $adres_ul, $adres_nr, $telefon, $id_firmy) = explode(';', $pracownik);
  21. if(!isset($pracownicyDane[$idPracownika])) {
  22. $pracownicyDane[$idPracownika] = [];
  23. }
  24. // id;imie;nazwisko;pesel;adres_m;adres_ul;adres_nr;telefon;id_firmy
  25. $pracownicyDane[$id] = compact('imie', 'nazwisko', 'pesel', 'adres_m', 'adres_ul', 'adres_nr', 'telefon', 'id_firmy');
  26. }
  27.  
  28. echo '<table border="1">';
  29. echo '<tr><td>Id Pracownika</td><td>Imię</td><td>Nazwisko</td><td>Zarobione pieniadze</td></tr>';
  30.  
  31.  
  32.  
  33. for ($ile=1; $ile < count($uslugiDane) ; $ile++) {
  34. $iloscpracownikow[0]='';
  35. $iloscpracownikow[$ile]=count($uslugiDane[$ile]);
  36. }
  37.  
  38.  
  39. for ($idd=1; $idd < count($uslugi); $idd++)
  40. {
  41.  
  42.  
  43. $suma=0;
  44. $sumowanie=[];
  45. for ($x=1; $x < count($uslugiDane) ; $x++)
  46. {
  47. for ($i=0; $i < count($uslugiDane[$x]) ; $i++)
  48. {
  49.  
  50. if ($uslugiDane[$x][$i]['idPracownika'] == $idd)
  51. {
  52.  
  53.  
  54. while ($iloscpracownikow[$idd]!=$i+1) {
  55. $sumowanie[$i]=$uslugiDane[$x][$i]['cena'];
  56. $suma=array_sum($sumowanie);
  57. $i++;
  58. }
  59.  
  60. $sumowanie[$i]=$uslugiDane[$x][$i]['cena'];
  61. $suma=array_sum($sumowanie);
  62. $idprac=$uslugiDane[$x][$i]['idPracownika'];
  63. echo "<tr><td>".$uslugiDane[$x][$i]['idPracownika']."</td><td>".$pracownicyDane[$idprac]['imie']."</td><td>".$pracownicyDane[$idprac]['nazwisko']."</td><td> $suma </td>";}}}}
  64.  
  65. echo '</table>';
  66.  
  67.  
  68. ?>



A tutaj wynik przeglądarki:


Ten post edytował tiszok 29.05.2018, 16:55:40
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: 29.03.2024 - 15:47