Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP]Pętla źle zwraca wartości
wojciechu
post 28.09.2012, 08:41:39
Post #1





Grupa: Zarejestrowani
Postów: 30
Pomógł: 0
Dołączył: 6.09.2012
Skąd: Trójmiasto

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


Witam,

Przy pomocy pętli chcę pobrać z bazy dane i wstawić je jako kolejne opcje w polu select. Zmienna $ile_d po wykonaniu zapytania do bazy ma wartość 2, więc powinno mi utworzyć 2 pola select...a wyświetla się tylko jedno.

  1. <?php
  2. //wstawianie z bazy
  3. $connection = @mysql_connect('xxx', 'xxx', 'xxx')
  4. or die('Brak połączenia z serwerem MySQL');
  5. $db = @mysql_select_db('xxx', $connection)
  6. or die('Nie mogę połączyć się z bazą danych');
  7.  
  8. $uzupelnij_d = mysql_query("SELECT * FROM dokumenty GROUP BY dokument ORDER BY id ASC") or die(mysql_error());
  9.  
  10. $ile_d = mysql_num_rows($uzupelnij_d);
  11.  
  12. for($i=0;$i<$ile_d;$i++)
  13. {
  14. $kolumna=mysql_fetch_array($uzupelnij_d);
  15.  
  16. echo '<option value="' . $kolumna[0] . '>' . $kolumna[0] . ' (' . $kolumna[4] . ')</option>';
  17.  
  18. }
  19. mysql_free_result($uzupelnij_d);
  20. ?>

Go to the top of the page
+Quote Post
muniekw
post 28.09.2012, 08:52:32
Post #2





Grupa: Zarejestrowani
Postów: 243
Pomógł: 22
Dołączył: 1.06.2009
Skąd: Warszawa

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


A spróbuj w pętli for tak:
  1. for($i=0;$i<=$ile_d;$i++)
Go to the top of the page
+Quote Post
wojciechu
post 28.09.2012, 08:57:52
Post #3





Grupa: Zarejestrowani
Postów: 30
Pomógł: 0
Dołączył: 6.09.2012
Skąd: Trójmiasto

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


Oprócz kodu php generującego ten jeden select, mam pod nim dobrze opisywany w html drugi select. I jak zrobię, tak jak opisałeś, to te dwa selecty łączą się w jeden...więc jeszcze gorzej sad.gif
Go to the top of the page
+Quote Post
muniekw
post 28.09.2012, 09:12:50
Post #4





Grupa: Zarejestrowani
Postów: 243
Pomógł: 22
Dołączył: 1.06.2009
Skąd: Warszawa

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


Teraz jak robisz to wywołanie:
  1. echo '<option value="' . $kolumna[0] . '>' . $kolumna[0] . ' (' . $kolumna[4] . ')</option>';


To odwołujesz się do jednej konkretnej wartości. Spróbuj uzależnić to od indeksu pętli czyli od $i
Go to the top of the page
+Quote Post
prz3kus
post 28.09.2012, 09:16:58
Post #5





Grupa: Zarejestrowani
Postów: 260
Pomógł: 30
Dołączył: 22.01.2007

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


Ja proponuje się zapoznać jak można wyświetlać rekordy: http://www.php.net/mysql_fetch_array
Go to the top of the page
+Quote Post
b4rt3kk
post 28.09.2012, 09:17:32
Post #6





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

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


Bardziej odpowiednia jest tu pętla while, która automatycznie przesuwa wewnętrzny wskaźnik tablicy.

  1. while($kolumna=mysql_fetch_row($uzupelnij_d)) echo '<option value="' . $kolumna[0] . '>' . $kolumna[0] . ' (' . $kolumna[4] . ')</option>';


--------------------
Jeśli pomogłem, kliknij proszę 'pomógł'. Dzięki.
Go to the top of the page
+Quote Post
wojciechu
post 28.09.2012, 09:41:16
Post #7





Grupa: Zarejestrowani
Postów: 30
Pomógł: 0
Dołączył: 6.09.2012
Skąd: Trójmiasto

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


@b4rt3kk:
while zwraca ten sam wynik, czyli tylko jedną pozycję sad.gif
Go to the top of the page
+Quote Post
muniekw
post 28.09.2012, 09:56:08
Post #8





Grupa: Zarejestrowani
Postów: 243
Pomógł: 22
Dołączył: 1.06.2009
Skąd: Warszawa

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


Moim zdaniem najporściej jak będziesz etapami wyświetlał sobie to co Ci zwraca dane zapytanie i powinieneś dojść co jest nie tak.
Spróbuj powyświetlać sobie wartości np:
  1. echo "<pre>";
  2. print_r($kolumna);
  3. echo "</pre>";
Go to the top of the page
+Quote Post
b4rt3kk
post 28.09.2012, 09:57:20
Post #9





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

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


Cytat(wojciechu @ 28.09.2012, 10:41:16 ) *
@b4rt3kk:
while zwraca ten sam wynik, czyli tylko jedną pozycję sad.gif


Więc sprawdź czy na pewno masz dwa rekordy wynikowe:

  1. $kolumna=mysql_fetch_array($uzupelnij_d);
  2. print_r($kolumna);


--------------------
Jeśli pomogłem, kliknij proszę 'pomógł'. Dzięki.
Go to the top of the page
+Quote Post
wojciechu
post 28.09.2012, 10:41:30
Post #10





Grupa: Zarejestrowani
Postów: 30
Pomógł: 0
Dołączył: 6.09.2012
Skąd: Trójmiasto

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


@b4rt3kk:
Zrobiłem jak napisałeś - wyszło, że tylko 1 pozycja jest w tabeli.... ale skąd w takim razie 2 pozycje, jeśli w PHPmyadmin wrzucę to samo zapytanie, oraz w $ile_d = mysql_num_rows($uzupelnij_d); questionmark.gif
Go to the top of the page
+Quote Post
b4rt3kk
post 28.09.2012, 10:44:46
Post #11





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

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


Prawdopodobnie przez grupowanie:

  1. SELECT * FROM dokumenty GROUP BY dokument ORDER BY id ASC


pewnie pole dokument w obu przypadkach jest takie samo? Zmień zapytanie na takie:

  1. SELECT * FROM dokumenty ORDER BY id ASC


--------------------
Jeśli pomogłem, kliknij proszę 'pomógł'. Dzięki.
Go to the top of the page
+Quote Post
wojciechu
post 28.09.2012, 10:49:09
Post #12





Grupa: Zarejestrowani
Postów: 30
Pomógł: 0
Dołączył: 6.09.2012
Skąd: Trójmiasto

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


No właśnie coś to grupowanie nie działa dobrze. Wg Twojej metody wyświetlą mi się wszystkie wpisy dokumenty, ale część z nich siępowtarza...stąd użyłem polecenia GROUP BY. Jak widać, nie działa ono dobrze, masz jakąs alternatywę, jak wydobyć tylko niepowtarzające się wpisy?
Go to the top of the page
+Quote Post
b4rt3kk
post 28.09.2012, 10:56:06
Post #13





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

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


Przedstaw mi strukturę tabeli, może należy pogrupować po innym polu? Lub dodać jakieś kolejne pole w tabeli wg którego będziesz grupował? Np.

id | costam | klucz_grupowania
====================
1 | wartosc1 | 1
2 | wartosc2 | 1
3 | wartosc3 | 2
4 | wartosc4 | 1
5 | wartosc5 | 3
6 | wartosc6 | 2


--------------------
Jeśli pomogłem, kliknij proszę 'pomógł'. Dzięki.
Go to the top of the page
+Quote Post
wojciechu
post 28.09.2012, 11:01:26
Post #14





Grupa: Zarejestrowani
Postów: 30
Pomógł: 0
Dołączył: 6.09.2012
Skąd: Trójmiasto

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


id | dokument | inne_dane_1 | inne_dane_2 | inne_dane_3
----------------------------------------------------------------------
1 | dok1 | bla1 | bla7 | bla13
2 | dok1 | bla1 | bla8 | bla14
3 | dok2 | bla3 | bla9 | bla15
4 | dok3 | bla4 | bla10 | bla16
5 | dok4 | bla5 | bla11 | bla17
6 | dok4 | bla5 | bla12 | bla18

Czyli - chcę pobrać niepowtarzające się wartości dla dokumentu, oraz odpowiadające im inne_dane_1

Ten post edytował wojciechu 28.09.2012, 11:04:00
Go to the top of the page
+Quote Post
b4rt3kk
post 28.09.2012, 11:04:20
Post #15





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

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


A co chcesz uzyskać? Żeby jak się to wyświetlało w Twoim select?


--------------------
Jeśli pomogłem, kliknij proszę 'pomógł'. Dzięki.
Go to the top of the page
+Quote Post
wojciechu
post 1.10.2012, 07:17:09
Post #16





Grupa: Zarejestrowani
Postów: 30
Pomógł: 0
Dołączył: 6.09.2012
Skąd: Trójmiasto

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


Chcę żeby wyświetliło się w select:

dok1 | bla1
dok2 | bla3
dok3 | bla4
dok4 | bla5

edit:

użyłem teraz polecenia
  1. SELECT DISTINCT dokument, inne_dane_1 FROM dokumenty ORDER BY id ASC
, w phpmyadmin wszystko ładnie wygląda(2 wiersze widoczne....), ale w php wyrzuca jedną pozycję...
___________


Dlaczego w PHPmyadmin jak zadaję zapytanie SQL:
  1. SELECT DISTINCT dokument, nazwa_dokument FROM tabela ORDER BY id ASC

to wyświetla mi tablicę 2x2, czyli taką jakiej potrzebuję...a jak w php zadam to samo zapytanie:
  1. $uzupelnij_d = mysql_fetch_array(mysql_query("SELECT DISTINCT dokument, nazwa_dokument FROM tabela ORDER BY id ASC")) or die(mysql_error());
  2.  
  3. print_r ($uzupelnij_d);


to już powstaje tablica jednowymiarowa....
  1. Array ( [0] => xxx-xxx [dokument] => xxx-xxx [1] => jakaś nazwa [nazwa_dokument] => jakaś nazwa )


czytałem manuale o fetch_array ale nie mogę znaleźć odpowiedzi, czemu mi nie wypluwa wszystkich wartości...

edit:
nieaktualne - wyjaśnione smile.gif echo i zapętlenie było źle zrobione...

Ten post edytował wojciechu 1.10.2012, 11:34:15
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.06.2025 - 08:43