Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Wyświetlanie ilości rekordów w bazie
Forum PHP.pl > Forum > PHP
kamilos809
Witam,
mój problem polega na tym, że koleżanka mnie poprosiła o zrobienie dziennika ale na bazie danych w pliku... Oczywiście dodanie/usuwanie/wyświetlanie prościutko w pół godzinki zrobiłem... ale napisała mi jeszcze, że chce mieć liczoną średnią ocen... wiem jak to sie liczy normalnie, że suma ocen podzielona przez ilość ocen da mi to co szukam... ale nie umiem uzyskać ten wynik :/ mam takie coś:
  1. $nazwisko="Iksiński";
  2. for($i=0;$i<count($nazwisko);$i++) /* przeszukuję tablicę */
  3. {
  4. echo''.$imie[$i].' '.$nazwisko[$i].'';
  5. }

Wyświetla wszystkie rekordy związane z nazwiskiem Iksiński w tabeli "nazwisko" ale co dalej? sad.gif liczę na szybką pomoc bo muszę to napisać niestety do jutra rana :/
darko
Przecież u Ciebie zmienna $nazwisko to nie tablica, a string. Do pobierania ilości rekordów z poziomu mysql służy funkcja count:
  1. SELECT count(nazwa_kolumny) FROM nazwa_tabeli WHERE warunek

edit:
jeśli chodzi o pliki to powinieneś po kolei pobrać wszystkie oceny i je zsumować oraz zliczyć ilość wystąpień każdej oceny, dalej już wiesz, co należy zrobić.
cycofiasz
Stłukła mi się szklana kula, możesz więc napisać jaka jest struktura tej bazy? I dlaczego ma to koniecznie być w pliku tekstowym?
nospor
darko przecież on to ma na pliku.

@kamilos809 skoro masz pętle która leci po userach to weź w tej pętli sumuj ich oceny i po sprawie.
Swoją drogą jak wspomniał darko to w tej chwili coś masz nie tak z tą pętlą.
kamilos809
Nie wiem czemu ma być na tekstowym... Tak mi koleżanka powiedziała, że tak musi mieć :/
a co do do struktury to ogółem środek pliku z bazą wygląda tak:
Imie || Nazwisko || Ocena
  1. Edward || Sobieski || 1
  2. Kamil || Ziomal || 5
  3. Edziu || Iksiński || 6
  4. Dawidek || Iksiński || 5

Imiona i nazwiska przypadkowe.
Wywołanie z bazy:
  1. <?php
  2. if($cmd==""){
  3. /*####################### WYŚWIETLANIE W TABELI #######################*/
  4. $plik = "db.txt";
  5. $dane = file($plik); /* pobieram dane z pliku i zapisuje do tablicy (linia = rekord) */
  6.  
  7. for($i=0;$i<count($dane);$i++) { /* przeszukuję tablicę */
  8. list($imie[$i], $nazwisko[$i], $ocena[$i]) = explode(" || ", $dane[$i]);
  9. /* dziele linię na tablicę i zapisuje dane do odpowiednich zmienncyh */
  10. }
  11. <table width=600 align=left border=1 cellspacing=0 cellpadding=0>
  12. <tr>
  13. <td align=center class=uni_01>Imie</td>
  14. <td align=center class=uni_01>Nazwisko</td>
  15. <td align=center class=uni_01>Ocena</td>
  16. </tr>
  17. ");
  18. for($i=0;$i<count($imie);$i++) /* przeszukuję tablicę */
  19. <tr><td bgcolor=\"".$color[6]."\" class=\"uni_01\" width=\"20\"><font size=\"-1\" color=\"".$color[7]."\">".$imie[$i]."</font></td>
  20. <td bgcolor=\"".$color[6]."\" class=\"uni_01\" width=\"80\"><font size=\"-1\" color=\"".$color[7]."\">".$nazwisko[$i]."</font></td>
  21. <td bgcolor=\"".$color[6]."\" class=\"uni_01\" width=\"80\"><font size=\"-1\" color=\"".$color[7]."\">".$ocena[$i]."</font></td>
  22. </tr>");
  23. echo("</table><br>");
  24. /*####################KONIEC WYŚWIETLANIA W TABELI #####################*/
  25. }
  26. ?>


to akurat wyświetlanie na tabeli, ale chyba będzie dobre ^^
Sorry, że tak wystrzeliłem, ale nie odświeżyłem strony i nie zauważyłem, że już tyle odpowiedzi jest ^^.
Dziękuję bardzo za pomoc, zaraz coś pokombinuje
darko
Najprościej Ci będzie czytać linia po linii (fgets w pętli while), a nie od razu całość. Jeśli jednak uprzesz się, żeby wczytywać od razy całość pliku to możesz zrobić explode na ' || '
edit//
a tak na dobrą sprawę to powinieneś zrobić jedno i drugie, tak na szybko nie sprawdzałem czy działa:
  1. $sum = 0; $ocena = 0;
  2. $handle = @fopen("/tmp/inputfile.txt", "r");
  3. if ($handle) {
  4. while (($buffer = fgets($handle, 4096)) !== false) {
  5. $tmp = explode(" || ", $buffer);
  6. $sum++;
  7. $ocena += $tmp[2];
  8. }
  9. if (!feof($handle)) {
  10. echo "Error: unexpected fgets() fail\n";
  11. }
  12. fclose($handle);
  13. }
  14.  
  15. // echo 'srednia: ' . bcdiv($ocena, $sum);
  16. echo 'srednia: ' . $ocena / $sum;
kamilos809
Nie, nie uprę się... ale ogółem nigdy nie pisałem czegoś takiego... Siedziałem przy PHP wraz z bazą MySQL a nie na plikach budowanej... co do pętli nie wiem, ale sugerowałem się tym:
http://webmade.org/porady/baza-danych-opar...plikach-php.php

edit//

To co napisał Darko świetnie działa... ale jak to przestawić, żeby było zależne od jakiegoś imienia i nazwiska? bo mnie już krew zalewa od pisania tego a główkuję nad tym już 5 godzin dobre
darko
Imię jest przechowywane w $tmp[0], a nazwisko w $tmp[1]. Poczytaj o funkcji explode, Jeśli zrobisz coś takiego:
  1. if($tmp[0] == 'Janek' && $tmp[1] == 'Kowalski')
  2. {
  3. $sum++;
  4. $ocena += $tmp[2];
  5. }

to wyciągnie oceny tylko Janka Kowalskiego.

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.