Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]tabela w pętli
Forum PHP.pl > Forum > Przedszkole
brychu
$licznik = 1; // licznik ustawiam na 1
while($r = mysql_fetch_assoc($wynik)) {
echo $r[nazwa]; // wyświetlam rekord z tabeli
$licznik++; // dodaję do zmiennej "licznik" 1

Wszystkie rekordy pokażą się jeden obok drugiego. Jak zrobić, żeby w linii pokazywała się dana liczna rekordów( np. 5) i przeskakiwało niżej?
kombinowałem z funkcją if


  1. $wynik = mysql_query("SELECT * FROM zdjecia WHERE kategoria = '$kategoria'") or die('Błąd zapytania');
  2.  
  3. $licznik = 1;
  4. while($r = mysql_fetch_assoc($wynik)) {
  5. $br = '';
  6. if ($licznik =5){
  7. $br='<br>';
  8. }
  9. echo $r[nazwa];
  10. echo $br;
  11. $licznik++;
  12. }


Rozumiem, że licznik dojeżdża do 5 i zmienia wartość zmiennej br dla każdej "pozycji" w tabeli, stąd rekordy pokazują mi się jeden pod drugim. Nie wiem jak mam to zrobić. Proszę o pomoc i wyjaśnienie.
viking
W if nie porównujesz tylko ustawiasz zawsze licznik na 5 i zawsze jest spełniony warunek.
Poza tym nie używa się już mysql_query i pochodnych tylko pdo lub mysqli.
IAmBoskiM
Skoro chcesz tylko 5 rekordów to lepiej zmienić zapytanie SQL na takie:
  1. SELECT * FROM zdjecia WHERE kategoria = '$kategoria' LIMIT 5


Rozszerzenie MySQL jest zdeprecjonowane przez specyfikację PHP 5 i usunięte w PHP 7.

Co do tego ifa to ty nie użyłeś operatora porównania tylko przypisania, a zatem warunek zawsze będzie prawdziwy.

Swoją drogą zamiast kombinować z while mogłeś użyć for w twoim sposobie, wygodniej.

  1. $wynik = mysql_query("SELECT * FROM zdjecia WHERE kategoria = '$kategoria' LIMIT 5") or die('Błąd zapytania');
  2. while ($r = mysql_fetch_assoc($wynik)) {
  3. echo $r['nazwa'];
  4. }
  5. echo '<br>';


Jeżeli jednak chcesz zapytać bazę nie o 5 zdjęć, a więcej:
  1. $wynik = mysql_query("SELECT * FROM zdjecia WHERE kategoria = '$kategoria'") or die('Błąd zapytania');
  2. for ($licznik = 1; $r = mysql_fetch_assoc($wynik); $licznik++) {
  3. echo $r['nazwa'];
  4. if ($licznik == 5) {
  5. echo '<br>';
  6. }
  7. }
brychu
Teraz przeskakuje do następnej lini, ale tylko raz.
JoShiMa
Bo zapomniałeś wyzerowac licznika wink.gif
Pyton_000
if($i % 5 == 0)
IAmBoskiM
A zatem:
  1. $wynik = mysql_query("SELECT * FROM zdjecia WHERE kategoria = '$kategoria'") or die('Błąd zapytania');
  2. for ($licznik = 1; $r = mysql_fetch_assoc($wynik); $licznik++) {
  3. echo $r['nazwa'];
  4. if ($licznik == 5) {
  5. echo '<br>';
  6. $licznik = 0; // jeżeli 0 będzie robiło odstęp co 6 linii to zmień to na 1, ale nie sądzę aby tak było
  7. }
  8. }


@Pyton_000 Hmm no w sumie tak też można zrobić.
  1. $wynik = mysql_query("SELECT * FROM zdjecia WHERE kategoria = '$kategoria'") or die('Błąd zapytania');
  2. for ($licznik = 1; $r = mysql_fetch_assoc($wynik); $licznik++) {
  3. echo $r['nazwa'];
  4. if ($licznik % 5 == 0) {
  5. echo '<br>';
  6. }
  7. }


Tak w sumie lepiej. Dobrze wiedzieć, gdzie modulo może mieć dobre zastosowanie. Dzięki.
Pyton_000
To teraz kolega niech zobaczy na swój kod, przeczyta go 10x razy i zobaczy gdzie zrobił głupotę.
brychu
  1. <?php
  2. for ($licznik = 1; $licznik < 10; $licznik++) {
  3. for($i = 0; $i<5;$i++)
  4. {
  5. echo 'x';
  6. }
  7. $i=0;
  8. echo '<br>';
  9. }
  10. ?>


WYNIK
Cytat
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx


Wiem już jak przeskoczyć do następnej linii. Lećmy dalej.

TABELA o nazwie "zdjecia".
nazwa (zapisywane nazwy zdjęć w postaci losowych numerów)
kategoria (przypisana kategoria. ustalmy, że mamy "mieszkanie" oraz "testowa")

Chcę wyświetlić w tej tabeli wszystkie zdjęcia z kategorii "mieszkanie". Znam kod, żeby policzyć ile rekordów z tabeli "zdjęcia" ma przypisaną kategorie "mieszkanie".
  1. $wynik=mysql_query ("SELECT COUNT(*) AS ilosc FROM zdjecia WHERE kategoria='$kategoria'");
  2. $wynik2=mysql_fetch_array($wynik);
  3. $ilosc = $wynik2[ilosc];
  4. echo $ilosc;


WYNIK
Cytat
12


Potrafię wyświetlić wszystkie zdjęcia z danej kategorii.
  1. wynik3 = mysql_query("SELECT * FROM zdjecia WHERE kategoria='$kategoria'");
  2. while($r = mysql_fetch_assoc($wynik3)) {
  3. ECHO $r[id].' ';}


WYNIK
Cytat
32 31 28 29 30 33 34 35 36 37 38 39



Nie wiem natomiast jak to wszystko połączyć, żeby wyświetliło mi wszystkie zdjęcia z danej kategorii, w rzędzie po 5.
Dziwne rzeczy mi wychodzą.
Jak by co, to $kategoria biorę z GET z menu.

IAmBoskiM
No to ci kod dałem przecież.
  1. $wynik = mysql_query("SELECT * FROM zdjecia WHERE kategoria = '$kategoria'") or die('Błąd zapytania');
  2. for ($licznik = 1; $r = mysql_fetch_assoc($wynik); $licznik++) {
  3. echo $r['nazwa'] . ' '; // dodam tutaj spację, bo inaczej wyjdzie ci jeden wielki ciąg nazw zdjęć
  4. if ($licznik % 5 == 0) {
  5. echo '<br>';
  6. }
  7. }


Jeżeli dobrze rozumiem, chcesz wyświetlać rzeczy tylko z jednej kategorii jednocześnie, a nie z dwóch bądź więcej.
brychu
Rzeczywiście działa. Nie wiem dlaczego mi wcześniej nie dział. Coś musiałem pomieszać. Bardzo dziękuję. Daję "pomógł".

Mam jeszcze pytanie, bo nie rozumiem warunku zakończenia pętli.
Warunkiem jest zmienna r, która musi się równać tabeli wyników zapytania do bazy.
Jak to działa, skoro $r nie jest liczbą?
viking
Masz wszystko w dokumentacji.

Returns an associative array that corresponds to the fetched row and moves the internal data pointer ahead.

Jeszcze raz powtórzę. Zacznij używać pdo albo Mysqli bo niedlugo jest koniec aktywnego wsparcia PHP 5 co za tym idzie znika to rozszerzenie.
Pyton_000
O php 5 bym się jeszcze nie martwił że tak szybko zniknie z serwerów biggrin.gif
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.