Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] Jak ukryć nazwę danej jeśli w bazie nie ma dla niej wartości?
Forum PHP.pl > Forum > Przedszkole
Lukasso
Pracuję nad katalogiem produktów. Każdy z produktów ma różne cechy takie jak kolor, wysokość, pojemność czy średnicę. Te nazwy cech pojawiają się na karcie produktu na stronie internetowej w układzie cecha: wartość np. kolor: zielony, wysokość:35cm itd. Nie dla wszystkich tych cech przypisana jest w bazie wartość. W takiej sytuacji pojawi się wpis cecha: żadna wartość nie zostanie pokazana.

Chciałbym żeby w takiej sytuacji nie pojawiała się również nazwa tej cechy. Jak to zrobić? Spodziewam się, że trzeba użyć funkcji IF. IF $srednice ma przypisaną wartość to ECHO a jeśli nie ma to nie pokazuj. Nie znam jednak składni, nie wiem jak to powinno zostać poprawnie ujęte i w której części kodu powinno się znaleźć. Proszę o pomoc.

Teraz wygląda to tak:

  1. echo "<p class=\"cat-cat\">Zakres produkowanych średnic</p>";
  2. echo "<p class=\"cat-desc\">".$row['srednice']."</p>";


czy taki fragment kodu jest wystarczający?
nospor
Cytat
Nie znam jednak składni, nie wiem jak to powinno zostać poprawnie ujęte i w której części kodu powinno się znaleźć.
No to skoro nie znasz, to moze warto sie nauczyc?
http://pl1.php.net/manual/en/control-structures.if.php
b4rt3kk
Nie wiesz jak użyć IF? O zgrozo... Cóż, proponuję przefiltrowanie wyników już w momencie pobierania danych z bazy.

  1. SELECT * FROM tabela_atrybutow WHERE id_produktu = $id AND wartosc IS NOT NULL
Lukasso
Cytat(nospor @ 4.10.2013, 15:28:45 ) *
No to skoro nie znasz, to moze warto sie nauczyc?


Chciałbym, ale nie mam wystarczająco dużo czasu. Jestem grafikiem, a moja styczność z php ogranicza się tylko do wprowadzania drobnych zmian w istniejących projektach. Dzięki za link. Kiedyś wezmę się i przerobię wszystko od podstaw, ale tymczasem szukam pomocy doraźnej.

Cytat(b4rt3kk @ 4.10.2013, 15:30:56 ) *
Nie wiesz jak użyć IF? O zgrozo... Cóż, proponuję przefiltrowanie wyników już w momencie pobierania danych z bazy.
  1. SELECT * FROM tabela_atrybutow WHERE id_produktu = $id AND wartosc IS NOT NULL


Głupia odpowiedź. Gdybym wiedział jak użyć IF to bym nie pytał. Chyba po to jest dział przedszkole, a forum służy do dzielenia się swoją wiedzą z tymi, którzy jej jeszcze nie mają. Jeśli nie chcesz odpowiadać na proste pytanie to po prostu nie odpowiadaj, po co te komentarze?

Przefiltrowanie wyników przy pobieraniu z bazy w sposób jaki podałeś nie sprawdzi się w tej sytuacji ponieważ na jednej stronie znajduje się kilkanaście kart produktów. Dla niektórych dana zmienna ma przypisaną w bazie wartość, dla innych nie.
stud3nt
Nie wiem, jak napisałeś tabelę i jaką wartość przyjmuje pole, jeśli nie ma wartości. Jeśli pole ma domyślnie NULL, to:

  1. $value = null;
  2.  
  3. if (!empty($row['srednice']))
  4. {
  5. $value = $row['srednice'];
  6. }
  7.  
  8. echo "<p class=\"cat-cat\">Zakres produkowanych średnic</p>";
  9. echo "<p class=\"cat-desc\">".$value."</p>";


W innym wypadku (np. gdy pole ma parametr DEFAULT 0)

  1. $value = null;
  2.  
  3. if ($row['srednice'] != 0)
  4. {
  5. $value = $row['srednice'];
  6. }
  7.  
  8. echo "<p class=\"cat-cat\">Zakres produkowanych średnic</p>";
  9. echo "<p class=\"cat-desc\">".$value."</p>";


Tak czy siak, nospor podał prawidłowy link. Naucz się ifów w PHP.
Lukasso
Dzięki. To prawda, nauka mnie nie ominie. Muszę jak najszybciej się zorganizować.

Chyba nie dostatecznie jasno opisałem o co mi chodzi. Może inaczej to wytłumaczę: screen
To są trzy przykładowe karty produktów. Poniżej są wypisane cechy np. gatunki stali i ich wartości, normy wykonawcze i ich wartości itd. W środkowej karcie dla cechy "gatunki stali" nie przypisano wartości. W takiej sytuacji chcę żeby napis/nazwa cechy nie była widoczna - czyli bez napisu "gatunki stali".
Turson
Zmodyfikuj kod podany przez kolegę wyzej

  1. if (!empty($row['srednice']))
  2. {
  3. $value = $row['srednice'];
  4. }
  5.  
  6. echo "<p class=\"cat-cat\">Zakres produkowanych średnic</p>";
  7. echo "<p class=\"cat-desc\">".$value."</p>";
Lukasso
W jaki sposób go zmodyfikować? pominąć $value = NULL; Nie, nic to nie daje. W dodatku jak zmienna srednice jest pusta, to na stronie pojawia się tekst jakby z sąsiedniego pola w bazie (kolejnego rekordu).

Tak czy inaczej idziemy chyba w złą stronę. Myślę, że największa modyfikacja powinna znaleźć się tutaj:
  1. echo "<p class=\"cat-cat\">Zakres produkowanych średnic</p>";
  2. echo "<p class=\"cat-desc\">".$value."</p>";


Kiedy $value nie ma wartości w bazie, nie pojawia się ani jej wartość (to jasne) ani napis z pierwszej linijki. Tak jakby tego nie było. Jeśli nie ma informacji o dostępnych gatunkach stali to nie ma też nagłówka "gatunki stali"
Turson
Pokaż cały kod jaki masz, bo takie pisanie na podstawie 2 linijek, które podałeś mija się z celem wink.gif
Lukasso
  1. <?
  2. $query = "SELECT * FROM mstal_katalog ".$where;
  3. $totalResults = getSqlNumber($query." ORDER BY id ASC");
  4. $getValue = getSql($query." ORDER BY id ASC");
  5. if($totalResults>0) {
  6. ?>
  7.  
  8. <?
  9. while ($row=mysql_fetch_array($getValue)) {
  10. $metaPic = "makethumb.php?pic=uplimg/".$row['image']."&w=120&sq=Y&b=N"; ?>
  11.  
  12. <!--produkt-->
  13.  
  14. <?php
  15. echo "<div class=\"catcard\">";
  16. echo "<img class=\"cat-image\" src=\"". $metaPic ."\" border=\"0\" alt=\" " .$row['name']." \">";
  17. echo "<p class=\"cat-nazwa\">".$row['nazwa']."</p>";
  18. echo "<p class=\"cat-cat\">Zakres produkowanych średnic</p>";
  19. echo "<p class=\"cat-desc\">".$row['srednice']."</p>";
  20. echo "<p class=\"cat-cat\">Normy wykonawcze</p>";
  21. echo "<p class=\"cat-desc\">".$row['normy']."</p>";
  22. echo "<p class=\"cat-cat\">Gatunki stali</p>";
  23. echo "<p class=\"cat-desc\">".$row['gatunki']."</p>";
  24. echo "</div>";
  25. ?>
  26. <? } ?>
  27. <? } else echo "Aktualnie brak produktów w ofercie"; ?>
b4rt3kk
Po tym co napisałeś zapytanie, które zaproponowałem wcześniej dalej znajduje zastosowanie, po lekkiej modyfikacji:

  1. SELECT * FROM mstal_katalog WHERE wartosc != ''


Przedszkole, przedszkolem, ale instrukcja warunkowa IF w jakimkolwiek języku programowania jest absolutną podstawą. Odpowiedziałem na proste pytanie. Najprostsze rozwiązanie to pominąć puste wiersze już w momencie pobierania danych z bazy.
Lukasso
Zobaczcie, chodziło mi o coś takiego:
  1. if (isset($row['wykon'])) {
  2. echo 'wykonczenie powierzchni: '.$row['wykon'];
  3. }

czyli w moim skromnym rozumieniu - jeśli pole 'wykon' ma przypisaną w bazie wartość napisz: "wykończenie powierzchni: <wartość z bazy>"

Eksperymentowałem na lokalnym serwerze i to działa. Jeśli pole 'wykon' nie ma wartości, nie pojawia się nic.
Niestety ten sam zapis na serwerze, na którym jest strona nie działa. Mimo braku wartości pojawia się napis "wykończenie powierzchni: ". Jedynie miejsce gdzie powinna pojawić się wartość zostaje puste, a ja nie chcę w ogóle tego napisu/tytułu "wykończenie powierzchni: "

Czy isset użyłem tutaj dobrze? Chyba tak skoro działa na localhost. Czy działanie tego może zależeć od jakichś ustawień serwera?
nospor
if (!empty($row['wykon'])) {
Lukasso
TAK! Działa. Super. Dzięki.

Czemu isset działało na localhost?
nospor
Widac z jakiegos powodu miales tam NULL a nie pustą wartosc. Do sprawdzania czy cos jest puste czy nieuzywa sie empty(). Isset sluzy do sprawdzania czy istnieje index tablicy/zmienna
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.