PHP - FAQ
Przedstawię tu faq odnośnie php. Niby dużo tego jest w sieci, jednak przeglądając fora i zadawane pytania, śmiem twierdzić, że za mało... albo ta nasza "młodzież" zaleniwa jest by do nich zaglądać... tak czy siak "dobrego" faq nigdy za duzo
- 1) Złote myśli kubusia a php
- 2) Przygotowanie środowiska
- 3) Na localu działa ,na serwerze nie... - register_globals
- 4) Parsowanie zmiennych
- 5) Cannot add header information - headers already sent...
- 6) Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource - błąd zapytania
- 7) Wyszukiwarka - zapytanie zależne od zadanych kryteriów
- 8) Grupowanie wyników
1) Złote myśli kubusia a php
Co ma Kubuś Puchatek do php? W zasadzie to nic, ale jego złote myśli - tak.
-
"Myśl, myśl, myśl..." - Kubuś Puchatek
Myślenie w php to bardzo ważna rzecz, o czym początkujące osoby zapominają. Przykład z życia wzięty:
Mam zapytanie, które jeśli id=2 to zmienia mi id na 2. Jednak w bazie nic się nie zmienia - co jest źle?
No i czy osoba, która oto pyta zastanowiła się nad tym? No skoro zmienia id na 2, gdzie id = 2 no to logiczne jest, że nic się nie zmienia. Takich przykładów jest masa. Myślcie więc. -
"Manual, manual, manual..." - Kubuś Programista
Manual to podstawa. 80% rozwiązań waszych początkujących problemów znajdziecie właśnie tam. Manual jest podzielony na działy, dzięki czemu łatwo się w nim poruszać. Posiada również wyszukiwarkę funkcji. Korzystajcie z tego. -
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca
Korzystajcie z wyszukiwarki forum, z którego korzystacie. Większość pytań, które zadajecie, była już nie raz zadana i udzielono na nie odpowiedzi. Wy to tylko powielacie. -
"Debuguj, debuguj, debuguj..." - Kubuś Developer
Jeśli skrypt Wam nie działa, to dlatego że macie coś źle, a Wy myślicie że macie dobrze. Niestety taka prawda - im bardziej początkujący programista - tym bardziej przekonany o poprawności swego kodu. Sprawdzajcie każdą linijkę swego kodu, wyświetlajcie zawartość zmiennych, których myślicie że jest tam np. 2, a w rzeczywistości nie ma tam nic i dlatego wam nie działa. Róbcie echo 'pupa'; by sprawdzić czy wam dochodzi w ogóle do danej lini kodu.<?php //...cos tam echo 'pupa'; //czy to sie wyswietli? //cos tam innego echo $zmienna;// czy $zmienna ma tę wartosc co myslicie ze ma if ($zmienna) inlcude($zmienna.'.php'); ?>
2) Przygotowanie środowiska
Często wasz php skonfigurowany jest domyślnie. Przez to nie wyświetlają wam się wszystkie błędy. Ustawcie tak, by wyświetlało się wszystko, włącznie z NOTICE - te komunikaty, wbrew pozorom, są bardzo ważne - nie ignorujcie ich, tylko je eliminujcie. Poprawnie napisany skrypt nie powinien generować żadnych błędów.
Aby ustawić wyświetlanie wszystkich błędów, napiszcie taki kod:
<?php
error_reporting(E_ALL);
ini_set('display_errors','1');
?>
3) Na localu działa ,na serwerze nie... - register_globals
Domyślne ustawienia php4 mają włączone register_globals - jedna z większych pomyłek php. Opcja ta rejestruje wszystkie zmienne pochodzące z tablic superglobalnych. Zamiast więc odwoływać się do zmiennej np. tak: $_GET['zmienna'], można się do niej odwołać tak $zmienna. Jest to bardzo niebezpieczne i dlatego w php5 jest to już domyślnie wyłączone. Wyłączają to również co lepsze hostingi, dlatego też na jednym serwerze $zmienna działa a na innym już nie. Pamiętajcie więc, by do danych z url odwoływać sie tak: $_GET['zmienna'], z posta tak: $_POST['zmienna'] i analogicznie z innych tablic superglobalnych.
4) Parsowanie zmiennych
Często widzę taki kod:
<?php
echo 'Cos tam $zmienna cos dalej';
?>
i takie pytanie do niego:Czemu nie wyświetla się zawartość zmiennej $zmienna tylko napis $zmienna? No przecież to oczywiste czemu, piszą o tym nawet w manualu (a to ci nie spodzianka ) - zmienne w apostrofach nie są parsowane. Parsowane są zmienne w cudzysłowiach. Tak więc jak chcecie przeparsować zmienną to używajcię cudzysłowi lub łączcie stringi:
<?php
echo "Cos tam $zmienna cos dalej";
//lub
echo 'Cos tam '.$zmienna.' cos dalej';
?>
I jeszcze jedno: jak chcecie wyświetlić tylko zmienną, to nie piszczie "$zmienna", wystarczy $zmienna.
<?php
//nie
echo "$zmienna";
//tak
echo $zmienna;
?>
5) Cannot add header information - headers already sent...
Skrypt nie może dodać nagłówków, gdyż zostały do przeglądarki wysłane już jakieś informacje. Często natrafiacie na taki błąd przy okazji ustawiania ciastek (setcookie()), sesji (session_start()) lub przy bezpośrednim wywołaniu header(). Funkcje wysyłające nagłówki mają to do siebie, że przed ich wywołaniem nie może pójść do przeglądarki żaden tekst, nawet spacja. Przykładowe złe kody:
<?php
echo 'cos tam....';
session_start();
?>
<html> blabla....
<?php
header(...); //lub inne naglowkowe funkcje
?>
poprawne:
<?php
session_start();
echo 'cos tam....';
?>
<?php
header(...); //lub inne naglowkowe funkcje
?>
<html> blabla....
<?php
echo 'a tu inny kod php';
?>
Można również użyć ob_start(), które buforuje dane wysyłane do przeglądarki. Pamiętajcie by dać to na samym początku głównego skryptu:
<?php
ob_start();
echo 'cos tam....';
session_start();
?>
<?php
ob_start();
?>
<html> blabla....
<?php
header(...); //lub inne naglowkowe funkcje
?>
Często wydaje się, że nie ma żadnych danych wysłanych przed nagłówkami. Pamiętajcie, że spacja, enter to też dane. Nawet tzw. BOM, który jest dołączany przez niektóre edytory do plików z kodowaniem utf-8 to też dane.
6) Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource - błąd zapytania
Macie przykładowo taki kod:
<?php
$sql = 'tu jakies zapytanie do bazy';
$res = mysql_query($sql);
while($row = mysql_fetch_array($res)){
//.....
}
?>
I dostajecie błąd jak w tytule. Oznacza to, że macie błąd zapytania. Musicie sprawdzić czy wasze zapytanie jest poprawne: echo $sql a jak to wam nic nie mówi to sprawdźcie, jaki błąd daje wam baza: echo mysql_error(). Przydatne jest stosowanie takiego kodu:
<?php
//...
$res = mysql_query($sql) or die('Zapytanie: '.$sql.' --- błąd: '.mysql_error());
//...
?>
Gdy już trochę "podrośniecie" zapewne będzie to załatwiać inaczej, ale na początek jest a w sam raz.
7) Wyszukiwarka - zapytanie zależne od zadanych kryteriów
Problem dość często spotykany, jednak na tyle duży, że przeniosłem go do oddzielnego artykułu
8) Grupowanie wyników
Problem dość często spotykany, jednak na tyle duży, że przeniosłem go do oddzielnego artykułu