Kawałek Kodu

Co tu się odskryptala?! Czyli programistyczne porady na luzie

All inclusive... czyli jak unikać dynamicznego budowania zapytania SQL. Part II.

Zdarzyło Ci się pewnie nie raz pracować na więcej niż jednej tabeli (tabeli bazodanowej, a nie wyników meczu). A jeśli tak, to pewnie zdarzyło Ci się również łączyć obydwie przy pomocy złączenia LEFT JOIN. Jeśli nie, to pozwól, że wspomnę pokrótce na czym polega takie złączenie.

Załóżmy, że masz tabele klientów oraz tabele ich zamówień. Jeśli złączysz obydwie poprzez warunek w klauzuli WHERE lub poprzez INNER JOIN, otrzymasz wynik przedstawiający klientów i ich zamówienia. Ale tylko tych klientów, którzy złożyli (tym razem nie złączyli!) zamówienia. Tych, którzy zarejestrowali się w serwisie, ale nie mają zamówień, nie będzie widać w wyniku tego zapytania. Aby wyświetlić wszystkich klientów i zamówienia, należy użyć wspomnianiego złączenia LEFT JOIN. Dla takich klientów w miejscu ich zamówień otrzymasz wartości null.

Wyobraź sobie, że budujesz teraz system, który posiada możliwość filtracji wyników, a dokładnie pokazania wszystkich klientów i tylko tych z zamówieniami (pewnie jest tam jakiś ptaszek w formularzu, którym włączasz i wyłączasz tą opcję).

I tu rodzi się odwieczne pytanie. Czy da się? Czy da się zbudować tak zapytanie, żeby przekazując określoną wartość wybrać daną pulę wyników i wykorzystać tylko jedno złączenie?

Czytaj dalej

To be or not to be, that is the query...czyli jak unikać dynamicznego budowania zapytania SQL w zależności od istnienia wartości.

Czasem masz dobry humor, a czasem zły. W obydwu przypadkach możesz zostać w domu.
Czasem do Twojego zapytania dociera wartość wykorzystywana w klauzuli WHERE, a czasem jej kompletnie brak.

Czy w tym przypadku możesz używać stałej składni zapytania bez potrzeby jej modyfikowania w zależności od istnienia tejże wartości?

Czytaj dalej

Znikający punkt, czyli o przesyłaniu wartości niezaznaczonych checkboxów.

Tworząc formularz z polem typu checkbox, zauważyłeś pewnie (bo ja tak), że takie pole kiedy nie jest zaznaczone, nie jest wysyłane wraz z formularzem.

Czy jest możliwe zmuszenie checkbox'a aby choć raz powiedział "nie", zamiast ciągłego krakania "tak"?

Czytaj dalej

"The tag is out there", czyli DOMXPath S01E01.

Jeśli miałeś kiedyś potrzebę przeszukiwania kod HTML pod kątem wyłuskania jakichś informacji, to pewnie korzystałeś z wyrażeń regularnych, a potem trafiłeś na drogę prowadzącą do narzędzi typu PHP Simple HTML Dom Parser.

Wyrażenia regularne mogą być kłopotliwe same w sobie, a powiązanie ich ze strukturą HTML może przyprawić o ból głowy. Wspomniany parser przenosi nas o poziom wyżej pod względem wygody użytkowania, ale i tak nie spełnia wszystkich pokładanych weń nadziei. Wyszukiwanie elementów, których nie znamy dokładnego położenia (może być zmienne) staje się wprost niemożliwe, trafiamy więc w ślepy zaułek.

Którą z dróg wybrać?

Czytaj dalej

Doctor, doctor, doctor... Czyli jak uzupełnić tablicę do zadanej długości.

Czasem zdarza się, że potrzebujesz dopełnić tablicę lub string do długości innej, większej niż aktualna długość elementu. Np. z jakiegoś powodu chcesz aby tablica miała zawsze 100 elementów.

W przypadku tablicy w PHP używamy funkcji array_pad:

$array = [1, 44, 13, 23];
$array = array_pad($array, 10, 15);

Wynikiem działania tej funkcji będzie tablica dziesięcioelementowa, dopełniona "od prawej strony" sześcioma elementami o wartości 15.
Argument drugi może przyjąć wartość ujemną. Wtedy dopełnienie następuje na początku tablicy.

Czytaj dalej

Palcem po mapach, czyli sitemap dla strony wielojęzykowej.

Jeśli Twój serwis jest wielojęzykowy, to pewnie użyłeś jednego ze sposóbów na przekazywanie wersji językowej w adresie URL:

  1. Zmienna językowa w query string, np.: http://mojadomena.pl/podstrona?lang=pl
  2. Zmienna językowa jako podkatalog, np: http://mojadomena.pl/en/podstrona/
  3. Zmienna językowa jako subdomena, np: http://en.mojadomena.pl
  4. Zmienna językowa przypisana do domeny (odrębna dla każdej domeny), np: http://mojadomena.pl, http://mojadomena.co.uk

O ile w pierwszym i drugim przypadku budowa mapy jest oczywista, bowiem mapa zawiera wszystkie URL niezależnie od języka, tak w przypadku subdomeny lub domeny wyłącznie dla jednego języka, mapa będzie zawierać URL tylko z tej wersji językowej. A skoro serwis fizycznie zajmuje to samo miejsce na serwerze, tak więc i mapa serwisu dla każdej wersji jezykowej będzie w tym samym miejscu.
Ale przecież zgodnie z sugestią Google plik mapy ma mieć ustaloną nazwę, np. sitemap.xml (dla mapy w formcie XML) lub sitemap.txt (dla mapy w postaci pliku tekstowego). Na pewno nie mogą to być pliki o nazwach sitemap_pl.xml dla wersji polskiej i sitemap_en.xml dla wersji angielskiej.

Czytaj dalej