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.1
2
3
4
5
6
7
8<?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:
1
2
3
4
2
3
4
<?php
error_reporting(E_ALL);
ini_set('display_errors','1');
?>
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:1
2
3
2
3
<?php
echo 'Cos tam $zmienna cos dalej';
?>
echo 'Cos tam $zmienna cos dalej';
?>
1
2
3
4
5
2
3
4
5
<?php
echo "Cos tam $zmienna cos dalej";
//lub
echo 'Cos tam '.$zmienna.' cos dalej';
?>
echo "Cos tam $zmienna cos dalej";
//lub
echo 'Cos tam '.$zmienna.' cos dalej';
?>
1
2
3
4
5
6
2
3
4
5
6
<?php
//nie
echo "$zmienna";
//tak
echo $zmienna;
?>
//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:1
2
3
4
2
3
4
<?php
echo 'cos tam....';
session_start();
?>
echo 'cos tam....';
session_start();
?>
1
2
3
4
2
3
4
<html> blabla....
<?php
header(...); //lub inne naglowkowe funkcje
?>
<?php
header(...); //lub inne naglowkowe funkcje
?>
poprawne:
1
2
3
4
2
3
4
<?php
session_start();
echo 'cos tam....';
?>
session_start();
echo 'cos tam....';
?>
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
header(...); //lub inne naglowkowe funkcje
?>
<html> blabla....
<?php
echo 'a tu inny kod 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:
1
2
3
4
5
2
3
4
5
<?php
ob_start();
echo 'cos tam....';
session_start();
?>
ob_start();
echo 'cos tam....';
session_start();
?>
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
ob_start();
?>
<html> blabla....
<?php
header(...); //lub inne naglowkowe funkcje
?>
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:1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
$sql = 'tu jakies zapytanie do bazy';
$res = mysql_query($sql);
while($row = mysql_fetch_array($res)){
//.....
}
?>
$sql = 'tu jakies zapytanie do bazy';
$res = mysql_query($sql);
while($row = mysql_fetch_array($res)){
//.....
}
?>
1
2
3
4
5
2
3
4
5
<?php
//...
$res = mysql_query($sql) or die('Zapytanie: '.$sql.' --- błąd: '.mysql_error());
//...
?>
//...
$res = mysql_query($sql) or die('Zapytanie: '.$sql.' --- błąd: '.mysql_error());
//...
?>






Heweliusz
2008-07-17 14:25:04