Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP] Jak ukryć nazwę danej jeśli w bazie nie ma dla niej wartości?
Lukasso
post
Post #1





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 11.09.2013

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


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?

Ten post edytował Lukasso 4.10.2013, 14:22:00
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 14)
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




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
Go to the top of the page
+Quote Post
b4rt3kk
post
Post #3





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

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


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
Go to the top of the page
+Quote Post
Lukasso
post
Post #4





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 11.09.2013

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


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.
Go to the top of the page
+Quote Post
stud3nt
post
Post #5





Grupa: Zarejestrowani
Postów: 46
Pomógł: 7
Dołączył: 6.01.2012

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


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.

Ten post edytował stud3nt 4.10.2013, 16:56:52
Go to the top of the page
+Quote Post
Lukasso
post
Post #6





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 11.09.2013

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


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".
Go to the top of the page
+Quote Post
Turson
post
Post #7





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


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>";
Go to the top of the page
+Quote Post
Lukasso
post
Post #8





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 11.09.2013

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


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"
Go to the top of the page
+Quote Post
Turson
post
Post #9





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


Pokaż cały kod jaki masz, bo takie pisanie na podstawie 2 linijek, które podałeś mija się z celem (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post
Lukasso
post
Post #10





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 11.09.2013

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


  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"; ?>
Go to the top of the page
+Quote Post
b4rt3kk
post
Post #11





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

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


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.
Go to the top of the page
+Quote Post
Lukasso
post
Post #12





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 11.09.2013

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


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?

Ten post edytował Lukasso 5.10.2013, 12:25:43
Go to the top of the page
+Quote Post
nospor
post
Post #13





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




if (!empty($row['wykon'])) {
Go to the top of the page
+Quote Post
Lukasso
post
Post #14





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 11.09.2013

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


TAK! Działa. Super. Dzięki.

Czemu isset działało na localhost?
Go to the top of the page
+Quote Post
nospor
post
Post #15





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




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
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 26.09.2025 - 15:24