Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Problem z wyświetleniem całej tablicy
Forum PHP.pl > Forum > Przedszkole
mefistofeles
  1. $sql = 'SELECT id,tytul,,link FROM `tabele` WHERE `tytul` LIKE \'%'.$nazwa'%\' LIMIT 100';
  2. $result123 = mysql_query($sql);
  3. $rekordow = mysql_num_rows($result123);
  4. $rekordow2 = mysql_fetch_row($result123);


Chciałbym wyświetlić po kolei wszystkie rekordy pasujące do zapytania, ale

  1. var_dump($rekordow2);


zwraca mi tylko jeden wynik więc nawet nie ma tu opcji zastosowania pętli...

Jak wyświetlić, lub chociaż załadować do jakiejś zmiennej wszystkie rekordy zwracane przez SELECT ?
nospor
http://pl2.php.net/manual/en/function.mysql-fetch-array.php
w przykladach masz pętle
thek
Całość informacji o rekordach masz w zmiennej $result123. Na tym etapie możesz z niej wyciągać informacje o kolejnych używając mysql_fetch_* (gdzie * to row lub array bądź assoc i kilka innych. Odsyłam do manuala). Istnieje też mysql_result, ale tam się już posługujesz offsetami i możesz wtedy wyciągnąć informację z konkretnego pola w konkretnym rekordzie.
mefistofeles
Zrobiłem taką pętlę:


  1. while ($row = mysql_fetch_array($result123, MYSQL_NUM)) {
  2. printf("ID: %s Name: %s", $row[0], $row[1]);
  3. }


i mam taki wynik

ID: 387808 Name: white 05 - Sunday morning Sunday ID: 309601 Name: white - SHREKID: 384322 Name: white 02 - blue down ID: 210698 Name: white - Miss ID: 215228 Name: Pill ID: 388345 Name: white - Room

Jak w tym momencie wyświetlić tylko wynik 1 lub np tylko 5 questionmark.gif

Próbowałem coś w tym stylu:

  1. printf("ID: %s Name: %s", $row[0][0], $row[1][0]);


ale to nie zwraca mi danego wiersza tylko kolejna litere...

Proszę o pomoc


thek
Czy Ty choć wiesz co chcesz robić? Bo mam wrażenie że nie. Pętla WHILE robi wypisanie WSZYSTKICH rekordów jakie dostała w wyniku. Jeśli chcesz podac dane tylko jednego z wierszy a nie wszystkich to zapomnij o pętli i popatrz lepiej na to która z podanych funkcji może działać z użyciem OFFSETu, który wskaże jaki rekord ma zostać podany. Bo użycie pętli i sprawdzanie wewnątrz czegoś przy użyciu IF to zwykła głupota. No chyba, że nie wiesz czego dokładnie szukasz to wtedy jakis sens jest. Ale Ty pytasz o konkretny rekord na pozycji X, więc łap za manual i tam szukaj o czym wspomniałem.
mefistofeles
Sory, ale jestem początkujący. Sporo szukałem rozwiązania w manualu, ale nie mogę sobie z tym poradzić
chociaż próbowałem naprawdę długo i na wiele sposobów.

Jakby ktoś mógł to bardzo bym prosił o pokazanie jak za pomocą tego:

  1. $sql = 'SELECT id,tytul,link FROM `tabele` WHERE `tytul` LIKE \'%'.$nazwa'%\' LIMIT 100';
  2. $result123 = mysql_query($sql);
  3. $rekordow2 = mysql_fetch_row($result123);


dobrać się do n-tego wyniku i tylko ten wynik wyświetlić.
Naprawdę użeram się z tym już od dobrych kilku godzin :/
nospor
a jeszcze pytanie: skoro chcesz wyswietlic tylko n-ty rekord to po co pobierasz wiecej niz jeden rekord?
mefistofeles
Ponieważ ten kod odpowiada za wyszukiwanie.

Użytkownik wpisuje co chce znaleźć i na tej podstawie są pobierane wszystkie rekordy pasujące do wzorca.
Nie mogę jednak uzyskać dostępu do poszczególnych rekordów i danych na ich temat, żeby później móc wyświetlić je jako listę.
Po kliknięciu na konkretny wynik z listy mają się pojawić dane dotyczące tego właśnie wyniku.

Po krótce o to chodzi...

Chciałbym po prostu mieć możliwość dobrania się do konkretnego rekordu zwracanych w wyniku zapytania.
nospor
cos przekombinowales.

Skoro chcesz miec liste to musisz pobrac rekordy i w petli je wyswietlic.
Mając już te liste, ktos klika na dany rekord z listy i przenosi go do strony, która wyswietla pelne informacje o tym rekordzie. Majac ID tego rekordu mozesz bez problemu pobrac ten jeden rekord.
mefistofeles
Próbowałem tak:

  1. $sql = 'SELECT id,tytul,link FROM `tabele` WHERE `tytul` LIKE \'%'.$nazwa'%\' LIMIT 100';
  2. $result123 = mysql_query($sql);
  3. $rekordow2 = mysql_fetch_row($result123);
  4.  
  5.  
  6. while($row123 = mysql_fetch_assoc($result123))
  7. {
  8. $res = tytul($row123['tytul']);
  9. echo $res;
  10. }
  11.  



Ale to wyświetla mi wszystko w jednym ciągu.
Jak więc wyświetlić tylko 2 wynik ?


Jezu, taka prosta rzecz a nikt nie wie jak to zrobić ...
Ludzie: "CO WY TU ROBICIE questionmark.gif?"

P.S. Ranking Alexa: 49,558
i co z tego jak każdy użytkownik tylko kombinuje jak tu nabić posta i nie podpowiedzieć...

Jak tak się boicie zdradzać swoich tajemnic (m.in . NOSPOR) to ok., oby tak dalej.
Ciągle zasłaniajcie się swoim MANUALEM, i tak nigdy nie potraficie pomóc tylko nabijacie posty a można tak łatwo to zrobić innym sposobem
(penie tak też robicie:)

Dobra nie to nie.
TO JEST FORUM DLA PROFESJONALISTOW A WSZYSTKICH INNYCH ZMIESZAJA Z BLOTEM

Pozdrawiam całą załoge!!!
thek
Jezu... Taka prosta rzecz, że aż wszystkim ręce opadły winksmiley.jpg Jezu... Taka prosta rzecz i sam jej nie potrafisz... Jezu... Manual dokładniej przejrzyj winksmiley.jpg No i nie ma sensu pobierać 100 rekordów gdy chcesz wyświetlić jeden. Określ go dokładniej bo tylko bazę zarzynasz niepotrzebnie.

Edit: Jeśli nie zauważyłeś to mysql_fetch_rowi mysql_fetch_assoc wyciągają jeden rekord z wyników pobranych zapytaniem, ale inaczej się do nich odnosisz. Zresztą w Twoim przykładzie możliwe błędnie. Samo $row123['tytul'] wystarcza i żadnej dodatkowej funkcji nie trzeba.No chyba, że coś jeszcze z pobraną daną wyprawiasz.

Edit2: Co do konkretnego wiersza i konkretnego pola to użyj mysql_data_seek. I nie mów następnym razem że nie ma czegoś w manualu przy okazji sam nie sprawdziwszy dokładnie. Nie siedzaą tu ludzie 24h/dobę żeby szanownemu panowi odpowiedzieć bo oto żąda odpowiedzi. Nikt Nam za to nie płaci i nie mamy moralnego obowiązku być na zawołanie. To forum publiczne i odpowiada kto chce i kiedy chce.

Edit3: Skoro pierwsze zapytanie jest zbiorem odpowiedzi na wyszukiwanie użytkownika to logiczne że musisz mu dać jakoś wybór i chcąc, nie chcąc wyświetlisz wszystkie dane, a nie tylko rekord 2 lub 5. W pętli i tak wyświetlisz wszystkie wyniki. Na tej samej zasadzie co tematy w dziale na forum. Link zrobi przejście do dokładniejszej informacji o wyborze usera na zasadzie przejścia do tematu. Nadal nie widzisz gdzie masz błąd logiki? Skąd masz wiedzieć co jest lepsze dla usera? rekord 2 czy 15? To on wybierze ostatecznie i na tym etapie podanie mu wszystkich danych jest bezsensem. Jesli chcesz mu pokazać w wyniku tematy to cały artykuł będziesz ściągać z bazy? biggrin.gif
mefistofeles
Do THEK


Tak jak już mówiłem KOCHASZ swojego manuala i tak uwielbiasz nabijać sobie posty bo nie masz dostępu do bazy.
Pterodaktyl!

Nie wnosisz nic do tematu to MILCZ !
thek
Czytaj posta to znajdziesz odpowiedź na swoje pytanie w nim. Ale widać złość po pierwszym kpiącym moim zdaniu nie pozwoliła Ci czytać dalej. Podpowiem więc: Zajrzyj do Edit2 i ochłoń. I PW z wyzywaniem od pedałów powinienem zgłosić. Jak widzę na sarkazm reagujesz obelgami. Z bazami danych mam już do czynienia od około 10 lat, więc takie teksty są dla mnie zabawne smile.gif Obsługuję zaś więcej baz na różnych hostingach niż masz palców u obu rąk i obu nóg smile.gif
Spyder
Cytat(mefistofeles @ 24.09.2009, 11:15:10 ) *
  1. $sql = 'SELECT id,tytul,,link FROM `tabele` WHERE `tytul` LIKE \'%'.$nazwa'%\' LIMIT 100';
  2. $result123 = mysql_query($sql);
  3. $rekordow = mysql_num_rows($result123);
  4. $rekordow2 = mysql_fetch_row($result123);


Chciałbym wyświetlić po kolei wszystkie rekordy pasujące do zapytania, ale

  1. var_dump($rekordow2);


zwraca mi tylko jeden wynik więc nawet nie ma tu opcji zastosowania pętli...

Jak wyświetlić, lub chociaż załadować do jakiejś zmiennej wszystkie rekordy zwracane przez SELECT ?


Wiec tak w pedli w korej wykonujesz zapytanie i wyswietlasz dane, rezultat wpisujesz do array() potem uzywasz funkcji join() zeby z array() zrobic jedna zmienna jak juz masz to mozesz uzyc funkcji explode do wybrania tej wartosci jaka cie interesuje np 2, 6, 8.

Przyklad nie na select ale da sie z tego przerobic bardzo latwo:

  1. $i = 1;
  2. while ($i <= 11){
  3.  
  4. $rec = "check".$i;
  5. $app[$i] = intval($_POST[$rec]);
  6.  
  7. $i++;
  8. }
  9.  
  10. $status = join( ',', $app);


Petla powyrzej to przyklad odbierania 11 POSTOW i wpisywania je do jednej zmiennej jak juz to masz to robisz cos jak tu:

  1.  
  2. $pizza = "piece1,piece2,piece3,piece4,piece5,piece6";
  3. $pieces = explode(",", $pizza);
  4. echo $pieces[0]; // piece1
  5. echo $pieces[1]; // piece2
  6.  
thek
Jeśli jest już zapis wielu danych do jednej, to o wiele lepszym będzie przypisanie rekordów do tablicy. Choćby dlatego, że bezpieczniejsze. Użycie , jako łączenia może być fatalne w skutkach gdy sama zmienna jest tekstem i może je zawierać. Lepiej użyć wewnątrz pętli składni w stylu: $wynik[] = $row pamiętając by $wynik był zmienną widoczna w całym fragmencie kodu, a nie tylko w samej pętli. Wtedy do konkretnego wiersza możesz dobrać na zasadzie $wynik[id_wiersza] co zwróci tablicę wyników Tylko nie widze sensu tego, jeśli i tak w kodzie możesz używać funkcji mysql_* a przechowuje dane cały czas result123, czyli niejako dubla tworzysz.
Co do wyciągania rekordu konkretnego z result123 powtórzę jeszcze raz, ale jaśniej odpowiedź -> mysql_data_seek i przesunięcie wskaźnika na właściwą pozycję.
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.