Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Skomplikowana Petla w pętli powiazana z formularzem...

10 Sty 2013 10:55 1773 18
  • Poziom 11  
    Witam, Ten temat jest powiązany bardzo z moim poprzednim tematem Link ale tym razem chodzi o zrobienie skomplikowanej jak dla mnie tabelki już tłumaczę:
    mam plik z formularzem:

    Kod: text
    Zaloguj się, aby zobaczyć kod


    I plik odczytujący:

    Kod: text
    Zaloguj się, aby zobaczyć kod


    Baza danych z której pobierane są informacje wygląda w taki sposób:
    Code:

    id | towar | nazwa_towaru_1 | ilosc_towaru_1 | ... | nazwa_towaru_99 | ilosc_towaru_99 |

    Towar - to liczba która podaje ile jest towarów w danym rekordzie czyli jak będzie tu 4 to baza będzie miała zapełnione pola do "nazwa_towaru_4 | ilosc_towaru_4";


    Potrzebuję tabelkę która wyświetli mi wszystkie towary z tych ID które wybrałem (w formularzu) w tabelce tak jak w pliku 2. Czyli powiedzmy, że jak wybrałem z formularza id 1 i 8 gdzie:
    id 1 miał 4 towary, a id 8 miał 2 towary.

    To ma mi się wyświetlić 1 tabelka z sześcioma towarami. Kolejność niema znaczenia ważne by wszystkie się wyświetliły.
    Darmowe szkolenie: Ethernet w przemyśle dziś i jutro. Zarejestruj się za darmo.
  • Pomocny post
    Moderator Programowanie
    A masz możliwość modyfikacji bazy danych?
    To co stworzyłeś z "sztywną" ilością 99 towarów w jednym rekordzie, jest odrobinę bez sensu. Aż się prosi o zmianę tej tabeli, na coś bardzie sprawnego i mniej pożerającego miejsce na dysku.
  • Poziom 11  
    arnoldziq napisał:
    A masz możliwość modyfikacji bazy danych?
    To co stworzyłeś z "sztywną" ilością 99 towarów w jednym rekordzie, jest odrobinę bez sensu. Aż się prosi o zmianę tej tabeli, na coś bardzie sprawnego i mniej pożerającego miejsce na dysku.


    Mam możliwość zmiany tabeli ale w ten sposób w łatwy sposób pobieram do innych plików mniej skomplikowanych, bo każdy rekord to osobny raport. a tera robię raport zbiorczy. czyli np id 1 ma:
    "
    towarów 4
    jabłek 5
    gruszek 3
    wiśni 4
    bananów 8
    "
    id 2 ma:
    "
    towarów 3
    bakłażanów 1
    cebul 8
    jabłek 3
    "

    i tak dalej to przykłady bo tak naprawdę jeszcze mam jeszcze inne dane w tabeli od 1 do 99. jestem samoukiem do wszystkiego dochodzę przez kursy php i fora a teraz piszę dla siebie i kumpli aplikację do raportów z pewnej gry towary to przykład tylko. i najczęściej pobieram tylko 1 rekord ale teraz potrzebuje zbiorczy... najlepiej było by gdyby mi się wyświetlił dany towar tylko 1 raz z sumą czyli w id 1 mam 5 jabłek a w id 2 mam 3 jabłka to by się wyświetliło zamiast 2 wierszy 1 gdzie pisało by jabłek 8.
  • Pomocny post
    Moderator Programowanie
    Musisz się przestawić z myślenia "na kartce" na myślenie "bazodanowe".
    To że coś, na papierze" wygląda w ten sposób, nie koniecznie oznacza, że tak samo ma wyglądać w bazie danych.
    Twój problem można rozwiązać na tysiące sposobów, ale tak na szybko i prosto, to ja stworzyłbym w bazie danych tabelkę :
    1. ID_zbiorcze - to ID, którego teraz używasz, do identyfikacji grupy towarów.
    2. ID_Towaru - unikalne, auto-increment.
    3. Nazwa_towaru - pole z nazwą.
    4. Ilosc_Towaru - ilość konkretnego towaru.

    Zalety :
    1. Masz tabelę z 4 kolumnami, a nie z 200+ = Olbrzymi zysk czasu przy odczycie.
    2. Żadne miejsce w bazie danych się nie marnuje = w obecnej bazie, jeżeli masz jeden towar pod danym ID, to masz 98 pustych nazw i 98 wartości 0, które wbrew pozorom także zajmują miejsce.
    3. Dużo łatwiejsze operowanie na bazie danych = brak potrzeby odwoływania się do "towar_75" itd.
    Wady :
    - ja widzę same zalety :)

    Jeżeli nazwy towarów będą się często powtarzać pod różnymi ID, to nawet pokusiłbym się o dodanie dodatkowej tablicy, tylko z unikalnymi nazwami i w proponowanej przeze mnie tabeli przechowywał tylko odwołania a nie pełne nazwy towarów.
  • Poziom 11  
    Okej ale nie umiem tak zrobić to jedyny sposób jaki znam i mam tak tabelkę jaką mam. załóżmy że zrobię tabelkę na 4 kolumny ale nie umiem, a nie mam czasu na naukę tablic bo muszę jeszcze 2 raporty zrobić ten i jeszcze jeden do poniedziałku. Bo się zaczyna pewien turniej i potrzebujemy to. I tu moje pytanko jak zrobić tą pętelkę na tym co mam;/ plik z odczytu zmieniłem na:
    Kod: text
    Zaloguj się, aby zobaczyć kod


    W ten sposób mam wszystkie potrzebne dane by zrobić tabele:
    1. ilość zaznaczonych rekordów
    2. jakie rekordy są zaznaczone
    3. z czytanie danych w odpowiednim miejscu z rekordu

    teraz tylko pętle w petli wiem że 1 pętla robi się tak długo ile zostało wybranych id a druga tyle razy ile jest towarów w danym rekordzie. przed drugą ale w 1 musi być jakaś zmienna by druga pętla wiedziała ile razy ma się wykonać i z jakimi danymi i tu się zaciąłem bo nie wiem jak to połączyć;p
  • Moderator Programowanie
    Kurcze. Przyznam Ci się, że nie zrozumiałem jednego zdania z Twojej wypowiedzi.
    Ale może to wina porannej kawy :/
  • Poziom 11  
    arnoldziq napisał:
    Kurcze. Przyznam Ci się, że nie zrozumiałem jednego zdania z Twojej wypowiedzi.
    Ale może to wina porannej kawy :/


    ok to graficznie baza danych:

    Skomplikowana Petla w pętli powiazana z formularzem...

    w formularzu wybieram rekordy 1,3,5 i chce mieć tabelkę:

    Skomplikowana Petla w pętli powiazana z formularzem...

    a idealnie było by jak bym dostał taką tabelkę:

    Skomplikowana Petla w pętli powiazana z formularzem...

    kod pliku 2 jest prawie zrobiony brak pętli wyświetlającej towary.
  • Moderator Programowanie
    Teraz rozumiem.
    Chcesz wyświetlić podsumowanie ilości danego towaru z rożnych ID.
    I tu się właśnie kłania budowa tabeli o której wspomniałem. Gdybyś miał prostą tabelę, to można by te obliczenia przeprowadzić pojedynczym zapytaniem SQL, grupując towary wg. nazw czy jakoś podobnie.
    W twoim przypadku, trzeba odczytać całą zawartość tabeli, niezależnie od ID a następnie na piechotę zliczać wartości of 1 do ilosc_towarow w każdym ID.

    1. Odczytaj wszystkie rekordy.
    2. Dla każdego rekordu spadź wszystkie pola, które zawierają jakieś dane.
    3. Jeżeli jakieś dane będą dostępne (ilość >0), to wpisuj je do tablicy (array), używając nazw towarów jako kluczy i dodając każdorazowo ilość:
    $tablica[nazwa_towaruXX]=$tablica[nazwa_towaruXX]+ilosc_towaruXX;
    4. Wyświetlaj dane z utworzonej tablicy.
  • Poziom 11  
    Łatwo mówić;/ prosta tabela ta twoja jest bardziej skomplikowana jak dla mnie a z php prócz pętli, zapisz odczytaj z bazy danych nic nie znam, a mam mało czasu na zrobienie tego. może jakiś szybki kurs byś mi polecił??

    Do problemu to mam tabelkę nr 1 udało mi się zrobić mam taki kod:

    Kod: text
    Zaloguj się, aby zobaczyć kod


    Teraz mam nadzieje że jakoś kodem pomożesz niekoniecznie całym. jak z tego zrobić tabelkę nr 2 my siałem nad zrobieniem zmiennych coś typu jak mam w bazie danych i by nazwy sprawdzało ale nie mam pojęcia jak za to się zabrać.;/
  • Moderator Programowanie
    Tak na szybko :
    Kod: php
    Zaloguj się, aby zobaczyć kod
  • Poziom 11  
    wow ale to skrócone... ale i tak wywala błąd:
    "Parse error: parse error, expecting `'('' in c:\... on line 14"
    14 linijka to : $tablica = array; //deklarujemy tablice
  • Moderator Programowanie
    bratnet napisał:
    wow ale to skrócone... ale i tak wywala błąd:
    "Parse error: parse error, expecting `'('' in c:\... on line 14"
    14 linijka to : $tablica = array; //deklarujemy tablice

    Mówiłem, że "na szybko" :)
    Wpisz tam :
    Kod: php
    Zaloguj się, aby zobaczyć kod

    I tutaj :
    Kod: php
    Zaloguj się, aby zobaczyć kod

    Powinno być $rekord a nie $record :)
    Kod, w poprzednim poście, poprawiłem.
  • Poziom 11  
    Wyświetla się wtedy tylko:

    Array
    (
    )

    bez danych ;/ może jest sposób by na piechotę to sprawdziło i wyświetliło? a to mi zliczy wszystko a ja chce tylko wybrane;/ i wyświetlone;/

    @dodano:

    Array
    (
    [6] => 12
    [8] => 2
    [4] => 2
    [7] => 1
    [nazwa towaru 1] => 0
    [nazwa towaru 2] => 0
    [nazwa towaru 3] => 0
    [nazwa towaru 4] => 0
    [nazwa towaru 5] => 0
    [nazwa towaru 6] => 0
    )

    i co mam z tym zrobić?? sorry ale to dla mnie za skomplikowane słyszałem o tablicach ale nigdy z nich nie korzystałem. pętle/pobieranie/zapis do baz danych jakoś ogarniam ale to już czarna magia.
  • Moderator Programowanie
    To że tak wyświetla, oznacza tylko, że nic się nie pobrało do tablicy $tablica.
    Niestety, nie mam nawet tego jak przetestować na swoim komputerze, z powodu braku twojej bazy danych.
    Problem może być zarówno w zapytaniu SQL, jak i w braku (dosłownie) jednej literki gdzieś w kodzie.
    Dodaj w kodzie taką linię, to chociaż zobaczymy, czy coś odczytujesz z bazy :
    Kod: php
    Zaloguj się, aby zobaczyć kod


    Dodano po 3 [minuty]:

    No dobra. Skoro tablica się wypełnia, to znaczy, że jednak działa.
    Wypełnij swoją bazę jakimiś sensownymi danymi i zobacz czy tablica będzie się wypełniała odpowiednimi obliczeniami.
    Nie pisz jako nazw żadnych cyfr, bo tylko niepotrzebnie wprowadzasz zamieszanie.
  • Poziom 11  
    Array
    (
    [jajko] => 29
    [bekon] => 2
    [cebula] => 2
    [burak] => 1
    [olej] => 10
    [nazwa towaru 1] => 0
    [nazwa towaru 2] => 0
    [nazwa towaru 3] => 0
    [nazwa towaru 4] => 0
    [nazwa towaru 5] => 0
    [nazwa towaru 6] => 0
    )

    pobiera dane ze wszystkich rekordów i zlicza a ja potrzebuje tylko z wybranych i normalnie wyświetlone. w tabeli np: |jajko|29|
  • Pomocny post
    Moderator Programowanie
    No to ślicznie :)
    Zamiast Tych linii :
    Kod: php
    Zaloguj się, aby zobaczyć kod
    Wpisz taki kod :
    Kod: php
    Zaloguj się, aby zobaczyć kod

    To załatwi sprawę wyświetlania.

    Co do wyboru odpowiedniej grupy rekordów, to sprawa jest jeszcze prostsza.
    Wszystko polega na odpowiednim zapytaniu do bazy danych.
    Teraz masz :
    Kod: php
    Zaloguj się, aby zobaczyć kod
    ale jak zmienisz na :
    Kod: php
    Zaloguj się, aby zobaczyć kod
    To odczytasz tylko jeden rekord (lub więcej, jeżeli istnieją), z id = xx i towary z niego.
  • Poziom 11  
    JESTEŚ WIELKI URATOWAŁEŚ MNIE DZIĘKUJE ZA POMOC!!!

    muszę nauczyć się tych tablic jeszcze raz dzięki...

    Dodano po 9 [minuty]:

    mysilałem że wszystko gra ale pojawił się z tym problemik kod:
    Kod: text
    Zaloguj się, aby zobaczyć kod


    Wyświetla mi tyle tabelek ile wybrałem i zlicza z nich a powinno wyświetlić mi 1 podliczoną tabelkę;/
  • Moderator Programowanie
    Skrypt robi dokładnie to co mu każesz :)
    Spróbuj tak :
    Kod: php
    Zaloguj się, aby zobaczyć kod
  • Poziom 11  
    Jeszcze raz wielkie dzięki;)


    Działa idealnie;)