Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Baza danych TXT w PHP - dwa pliki, rapot
Forum PHP.pl > Forum > PHP
tiszok
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.
Pyton_000
No to pokaż co już zrobiłeś.
tiszok
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. ?>
Pyton_000
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.
tiszok
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
Pyton_000
Jak widać chęci i efekty to i pomoc się znajdzie.
tiszok
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:
Pyton_000
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. ?>
tiszok
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:
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.