Elektroda.pl
Elektroda.pl
X
Elektroda.pl
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...

bratnet 10 Sty 2013 10:55 1710 18
  • #1 10 Sty 2013 10:55
    bratnet
    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.

    0 18
  • Pomocny post
    #2 10 Sty 2013 11:30
    arnoldziq
    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.

    0
  • #3 10 Sty 2013 12:00
    bratnet
    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.

    0
  • Pomocny post
    #4 10 Sty 2013 12:18
    arnoldziq
    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.

    0
  • #5 10 Sty 2013 12:34
    bratnet
    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

    0
  • #6 10 Sty 2013 12:46
    arnoldziq
    Moderator Programowanie

    Kurcze. Przyznam Ci się, że nie zrozumiałem jednego zdania z Twojej wypowiedzi.
    Ale może to wina porannej kawy :/

    0
  • #7 10 Sty 2013 13:09
    bratnet
    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.

    0
  • #8 10 Sty 2013 13:27
    arnoldziq
    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.

    0
  • #9 10 Sty 2013 14:07
    bratnet
    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ć.;/

    0
  • #10 10 Sty 2013 14:23
    arnoldziq
    Moderator Programowanie

    Tak na szybko :

    Kod: php
    Zaloguj się, aby zobaczyć kod

    0
  • #11 10 Sty 2013 14:33
    bratnet
    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

    0
  • #12 10 Sty 2013 14:39
    arnoldziq
    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.

    0
  • #13 10 Sty 2013 14:50
    bratnet
    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.

    0
  • #14 10 Sty 2013 15:10
    arnoldziq
    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.

    0
  • #15 10 Sty 2013 15:25
    bratnet
    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|

    0
  • Pomocny post
    #16 10 Sty 2013 15:34
    arnoldziq
    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.

    0
  • #17 10 Sty 2013 15:59
    bratnet
    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ę;/

    0
  • #18 10 Sty 2013 16:14
    arnoldziq
    Moderator Programowanie

    Skrypt robi dokładnie to co mu każesz :)
    Spróbuj tak :

    Kod: php
    Zaloguj się, aby zobaczyć kod

    0
  • #19 10 Sty 2013 16:28
    bratnet
    Poziom 11  

    Jeszcze raz wielkie dzięki;)


    Działa idealnie;)

    0