Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]tabela w pętli
brychu
post 20.07.2016, 02:40:44
Post #1





Grupa: Zarejestrowani
Postów: 61
Pomógł: 0
Dołączył: 10.04.2015

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


$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.
Go to the top of the page
+Quote Post
viking
post 20.07.2016, 05:36:12
Post #2





Grupa: Zarejestrowani
Postów: 6 378
Pomógł: 1116
Dołączył: 30.08.2006

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


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.


--------------------
Go to the top of the page
+Quote Post
IAmBoskiM
post 20.07.2016, 18:07:32
Post #3





Grupa: Zarejestrowani
Postów: 72
Pomógł: 11
Dołączył: 8.05.2016

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


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. }


Ten post edytował IAmBoskiM 20.07.2016, 18:08:13
Go to the top of the page
+Quote Post
brychu
post 21.07.2016, 23:07:24
Post #4





Grupa: Zarejestrowani
Postów: 61
Pomógł: 0
Dołączył: 10.04.2015

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


Teraz przeskakuje do następnej lini, ale tylko raz.
Go to the top of the page
+Quote Post
JoShiMa
post 21.07.2016, 23:20:44
Post #5





Grupa: Zarejestrowani
Postów: 1 374
Pomógł: 149
Dołączył: 1.03.2006

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


Bo zapomniałeś wyzerowac licznika wink.gif


--------------------
Go to the top of the page
+Quote Post
Pyton_000
post 22.07.2016, 07:21:22
Post #6





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


if($i % 5 == 0)
Go to the top of the page
+Quote Post
IAmBoskiM
post 22.07.2016, 09:55:23
Post #7





Grupa: Zarejestrowani
Postów: 72
Pomógł: 11
Dołączył: 8.05.2016

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


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.

Ten post edytował IAmBoskiM 22.07.2016, 18:46:50
Go to the top of the page
+Quote Post
Pyton_000
post 22.07.2016, 17:42:26
Post #8





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


To teraz kolega niech zobaczy na swój kod, przeczyta go 10x razy i zobaczy gdzie zrobił głupotę.
Go to the top of the page
+Quote Post
brychu
post 23.07.2016, 00:10:06
Post #9





Grupa: Zarejestrowani
Postów: 61
Pomógł: 0
Dołączył: 10.04.2015

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


  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.



Ten post edytował brychu 23.07.2016, 00:28:10
Go to the top of the page
+Quote Post
IAmBoskiM
post 23.07.2016, 10:34:17
Post #10





Grupa: Zarejestrowani
Postów: 72
Pomógł: 11
Dołączył: 8.05.2016

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


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.
Go to the top of the page
+Quote Post
brychu
post 23.07.2016, 21:19:19
Post #11





Grupa: Zarejestrowani
Postów: 61
Pomógł: 0
Dołączył: 10.04.2015

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


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ą?

Ten post edytował brychu 23.07.2016, 21:27:47
Go to the top of the page
+Quote Post
viking
post 24.07.2016, 07:08:10
Post #12





Grupa: Zarejestrowani
Postów: 6 378
Pomógł: 1116
Dołączył: 30.08.2006

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


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.


--------------------
Go to the top of the page
+Quote Post
Pyton_000
post 24.07.2016, 08:07:35
Post #13





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


O php 5 bym się jeszcze nie martwił że tak szybko zniknie z serwerów biggrin.gif
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: 7.07.2025 - 16:38