Najczęstsze błędy, Zanim zapytasz, to sprawdź. |
Najczęstsze błędy, Zanim zapytasz, to sprawdź. |
4.04.2006, 22:22:28
Post
#1
|
|
Grupa: Zarejestrowani Postów: 1 660 Pomógł: 13 Dołączył: 9.06.2004 Skąd: Wrocław i okolice Ostrzeżenie: (0%) |
Piszę to w kontekscie wielu ostatnich postów, gdzie ludzie mieli podstawowe problemy z debugowaniem i analizą kodu.
Warto zacząć od: jak pisać? 1. Problemy z tablicami Często pomocną funkcją przy debugowaniu problemów z tablicami jest:
W ten sposób można np. sprawdzić co trzymamy w tablicy $_SESSION, w tablicach $_GET, $_POST oraz $_REQUEST i sprawdzać co zostało nam przesłane np. formularzem. Możesz równie dobrze w ten sposób kontrolować co zwraca Ci zapytanie z bazy danych:
2. Problemy z zapytaniem SQL Mamy jakieś zapytanie:
I coś niedobrego nam się dzieje. Wtedy można użyć funkcji mysql_error która podpowie nam co robimi źle:
3. Problem z session Czasmi, przed użyciem sesji zapominamy o session_start. 4. Problem z kodowaniem/czcionkami Aby wszystko było ze sobą "zgrane", zazwyczaj wystaczy używać edytora który zapisuje pliki w odpowiednim kodowaniu i dać na początku np:
gdzie utf-8 możemy zastąpić naszym kodowaniem. 5. Szukałem na forum ale nie znalazłem W opcjach wyszukiwania najlepiej wybrać: Gdzie szukać->Wszystkie fora oraz Szukaj postów od->kiedykolwiek 6.Cannot add header information - headers already sent Tak jak podał to aleksander w swoim przyczepionym poście, rozwiązanie znajduje się tutaj. 7. Notice: Undefined variable: ... Często serwery php mają ustawione: Cytat error_reporting = E_ALL & ~E_NOTICE w pliku php.ini i ten błąd nie wyskakuje, jednak aby się te błedy nie wyświetlały w wielu przypadkach, przed dokonaniem operacji na jakiejś zmiennej wystarczy użyć pętli oraz funkcji isset:
8. Kod mi nie działa i nie wyświetla żadnego błędu Jeśli kod nie działa i nie wyświetla żadnego błędu, możesz usunąć wszystkie znaki @ (o ile takie są) sprzed funkcji. Np:
9. Nie widać błędów (by strife) Często bywa tak, że nie widzimy błędów w skrypcie i wszystko wydaje nam się dobrze napisane, jednak skrypt działa niepoprawnie. Aby zaradzić temu, i szybko poprawiać napotkane błędy za wczasu, do każdego skryptu na początku dodajemy raportowanie błędów na E_ALL, w taki oto sposób:
Umożliwi to wykrywanie błędów, których nie dostrzegamy normalnie, a które mogą być ukryte poprzez po prostu konfigurację serwera. Jest to bardzo ważne. Dodatkowo (by Hacker) w PHP5 najlepjej stosować E_ALL | E_STRICT. 10. Na localu działa a na serwerze nie... (by nospor) Często takie zdanie słyszymy, gdy ktoś próbuje dobrać się do parametru w linku poprzez $zmienna a nie $_GET['zmienna']. Podobnie z formularzem przesyłanem postem. Zamiast pisać $_POST['zmienna'] piszą $zmienna. Konstrukcję $zmienna można stosować gdy włączone jest register_globals. Ale należy tego unikać gdyż jest to niebezpieczna praktyka i hostingi coraz częściej to wyłączają. Podsumowując: Dla linka: http://jakislink/?zmienna=1&zmienna2=2
Dla forma
Mam nadzieję, że to się komuś przyda Ten post edytował TomASS 24.05.2008, 09:27:04 -------------------- |
|
|
4.04.2006, 22:29:41
Post
#2
|
|
Grupa: Przyjaciele php.pl Postów: 7 494 Pomógł: 302 Dołączył: 31.03.2004 Ostrzeżenie: (0%) |
Skoro debugowanie to proces pozbywania się błądów (bug'ów) to czym jest w takim razie programowanie?
~TomASS podał kilka rzeczy, które sprawdzone na samym początku pozwolą nam od razu wyłapać błędy w aplikacji. Gdyby każdy przed zadanim pytania, zacząłby od powyższych to to forum miałoby połowę mniej postów Temat przypinam, bo warto utworzyć zbiór porad, które pomogą Wam samemu znajdować błędy we własnych skryptach. |
|
|
5.04.2006, 07:06:07
Post
#3
|
|
Grupa: Przyjaciele php.pl Postów: 742 Pomógł: 0 Dołączył: 14.12.2003 Skąd: Gdańsk, Trójmiasto Ostrzeżenie: (0%) |
|
|
|
5.04.2006, 17:01:41
Post
#4
|
|
Grupa: Zarejestrowani Postów: 1 597 Pomógł: 30 Dołączył: 19.02.2003 Skąd: Tychy Ostrzeżenie: (0%) |
-------------------- Zapraszam na mój php blog, tworzenie stron.
|
|
|
9.04.2006, 20:43:22
Post
#5
|
|
Grupa: Zarejestrowani Postów: 32 Pomógł: 0 Dołączył: 6.04.2006 Ostrzeżenie: (0%) |
Ja chciałbym trochę wspomnieć o kodowaniu znaków. Na wielu forach widzę, że są z tym problemy to tu napiszę jak temu zaradzić
Często źle są wyświetlane polskie znaki takie jak ł, ś, ć itp. Aby to naprawić trzeba mieć w dokumencie: Kod <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-2"> a jak będzie źle wyświetlać to tekst można przekonwertować np. programem Ogonki97. Albo wpisywać polskie znaki wg. tej tablicy: http://webdesign.art.pl/atelier/ISO_8859-2.html np. zamiast ł trzeba wpisać ł. I powinno być ok. Często też wielu Webmasterów pisze stronę tylko przy użyciu notatnika. On niestety nie koduje znaków w iso-8859-2 i najlepiej robić strony w jakimś edytorze tekstowym (np. EditPlus 2. W większości programów można ustawić aby kodowało w iso-8859-2). Ten post edytował adam9870 9.04.2006, 20:46:56 |
|
|
9.04.2006, 23:14:26
Post
#6
|
|
Grupa: Zarejestrowani Postów: 1 660 Pomógł: 13 Dołączył: 9.06.2004 Skąd: Wrocław i okolice Ostrzeżenie: (0%) |
A czy to nie jest napisane w pkt 4 ?
Że trzeba ustawić kodowanie i w dodatku takie samo kodowanie musi być ustawione w edytorze Acha - w notatniku można zapisać niektóre kodowania Ten post edytował TomASS 9.04.2006, 23:15:01 -------------------- |
|
|
10.04.2006, 03:20:23
Post
#7
|
|
Grupa: Zarejestrowani Postów: 449 Pomógł: 0 Dołączył: 26.05.2004 Skąd: Nowy Sącz Ostrzeżenie: (0%) |
Sam pisze w większość w notatniku i problemow z kodowaniem juz nie mam, ale moze ktoś wie jak w winXP zrobić sobie nowy skrót klawiszowy pod którym przypisze się znaki, których często się używa, a nie są dostępne wprost z klawiatury?
Gdzieś w końcu znajduje się odpowiedni wpis (w klawiaturze programisty) określający, że Alt+a daje "ą" więc napewno można sobie zrobić inne kombinacje? -------------------- |
|
|
10.04.2006, 08:53:16
Post
#8
|
|
Grupa: Zarejestrowani Postów: 195 Pomógł: 14 Dołączył: 12.01.2006 Skąd: Gotham City Ostrzeżenie: (0%) |
mniej błędów sie też popełnia jak sie nie pisze w notatniku.. i jest podświetlanie składni, przeglądarka klas i wiele pomocnych rzeczy... jak np w phpEclipse... no i najlepiej programowac obiektowo to tez wplywa na to ze mniej sie bledow popelnia w porownaniu ze strukturalnym programowaniem... starac sie zeby metoda klasy nie miala wiecej niz jednej strony A4 .. no i ogolnie oczywiscie wszystkie zasady programowania obiektowego... wiekszego systemu nie da sie napisac w notatniku... strukturalnie... tzn da sie ale z udogodnieniami i nowymi technikami zrobie to nieporownywalnie szybciej i lepiej
-------------------- Temat zamykam i przenoszę do Bangladeszu.
To jest wiadomość śmierci jeśli ją czytasz to znaczy że pozostało ci 30 sekund życia, więc lepiej zacznij się modlić. |
|
|
10.04.2006, 14:19:41
Post
#9
|
|
Grupa: Zarejestrowani Postów: 32 Pomógł: 0 Dołączył: 6.04.2006 Ostrzeżenie: (0%) |
Cytat("TomASS") A czy to nie jest napisane w pkt 4 ? Troszkę jest, ale jak zrobić aby wszytskie znaki polskie były dobrze wyświetlane nie ma bo nie zawsze wystarczy tylko wstawić : Kod <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-2"> często mimo to są źle kodowane niektóre znaki więc wspomniałem w swoim poście o programie Ogonki97 oraz o tablicy I jeszcze troszeczkę dokładniej napisałem o notatniku... |
|
|
10.04.2006, 14:47:57
Post
#10
|
|
Grupa: Zarejestrowani Postów: 449 Pomógł: 0 Dołączył: 26.05.2004 Skąd: Nowy Sącz Ostrzeżenie: (0%) |
Cytat(adam9870 @ 2006-04-10 15:19:41) nie zawsze wystarczy tylko wstawić : Wystarczy wstawić odpowiedni wpis (a nawet jest to obowiązkowe) dotyczący kodowania, tylko trzeba się jeszcze do niego zastosować podczas edycji pliku.Kod <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-2"> A różnica pomiędzy kodowaniem windows-1250 a iso-8859-2 dotyczy tylko trzech znaków: "ą, ś, ź" i oczywiście ich duzych odpowiedników. Z pozostałymi znakami nie ma zadnego problemu. -------------------- |
|
|
10.04.2006, 15:16:43
Post
#11
|
|
Grupa: Zarejestrowani Postów: 352 Pomógł: 0 Dołączył: 22.01.2006 Ostrzeżenie: (0%) |
Ad. 1 To dużo ładniejsze jest wyjscie z var_dump() po zainstalowaniu rozszerzenia xdebug.
Odnosnie ostatnich postów nie bardzo rozumiem po co wracać do iso-8859-2. Przecież utf-8 załatwia sprawę. |
|
|
24.05.2006, 15:08:01
Post
#12
|
|
Grupa: Zarejestrowani Postów: 69 Pomógł: 0 Dołączył: 26.01.2006 Ostrzeżenie: (0%) |
Z wlasnego doswiadczenia : Komunikaty zwrotne z bazy danych wyswietlamy :
kolejna rzecza ktora mnie bardzo irytowala na poczatku bylo ( przy probie uzycia sesji czy tez wyslania naglowka ) wstawianie JAKIEGOKOLIEK znaku na poczatku pliku (czesto ENTER lub SPACJA). |
|
|
7.06.2006, 22:32:48
Post
#13
|
|
Grupa: Zarejestrowani Postów: 374 Pomógł: 23 Dołączył: 3.06.2006 Skąd: Katowice Ostrzeżenie: (0%) |
yavaho, zobacz tu: http://windows.online.pl/klawiat.htm
Ja sobie zainstalowalem i nie mam żadnych problemow, jak chce przelaczam na iso-8859-2 i od razu mam klawiaturke pod tym kodowaniem -------------------- Pomogłem? Podziękuj proszę klikając poniżej "POMÓGŁ" ;)
|
|
|
7.06.2006, 23:34:45
Post
#14
|
|
Grupa: Zarejestrowani Postów: 449 Pomógł: 0 Dołączył: 26.05.2004 Skąd: Nowy Sącz Ostrzeżenie: (0%) |
Dzieki mokry
To mi w zupełności wystarczy do szczęścia Jak by ta czcinke oferowali troche ładniejsza to by było super. Przyzwyczaiłem sie do Lucida Console. -------------------- |
|
|
21.06.2006, 12:00:42
Post
#15
|
|
Grupa: Zarejestrowani Postów: 10 Pomógł: 0 Dołączył: 1.06.2006 Ostrzeżenie: (0%) |
witam
mam problem ze stroną kodową. przy wyświetlaniu tekstu pobranego z bazy MSSQL2000 w miejscu polskich znaków mam krzaczki i inne fajne znaczki. Ustawione mam iso-8859-2. Sprawidziłem, czy strona kodowa w MSSQL jest właściwa - jest. Sprawdziłem też pobierany tekst za pomocą Excel. Jest OK. Polskie litery nie pobierane z bazy danych są prawidłowo wyświetlane. Czy ktoś wie ,jak ten problem rozwiązać. Zmiana bazy danych nie jest możliwa. Mam PHP4. na stronach pl2.php.net znalazłem informację o parametrze mssql.charset dostępnym dla wersji php 5.1.2. Zastanawiam się czy jeżeli nie da się rozwiązać w 4 to przejść na 5 (co wcale nie oznacza, że problem będzie rozwiązany). Ten post edytował r_a_d_e_k 21.06.2006, 12:09:19 |
|
|
21.06.2006, 12:16:54
Post
#16
|
|
Grupa: Zarejestrowani Postów: 449 Pomógł: 0 Dołączył: 26.05.2004 Skąd: Nowy Sącz Ostrzeżenie: (0%) |
Czy baza danych (a raczej tekst w bazie) już istniała wcześniej niż strona, która pobiera z niej tekst?
Jeżeli nie, to jak kodowana jest strona na której znajduje się formularz do wprowadzania danych do bazy? Jeżeli zmienisz kodowanie strony np: na iso-8859-1 lub utf-8 to też są krzaki w tych tekstach, które pobierane są z bazy danych? -------------------- |
|
|
21.06.2006, 12:25:51
Post
#17
|
|
Grupa: Zarejestrowani Postów: 10 Pomógł: 0 Dołączył: 1.06.2006 Ostrzeżenie: (0%) |
zmiana strony kodowej powoduje wyświetlenie innego zestawu znaczków. dla utf-8 w miejsce polskich liter pojawiają się ?. Tekst został wcześniej wprowadzony. nie ma formularza do wprowadzania, gdyż obecnie informacje są statyczne.
|
|
|
1.07.2006, 19:10:26
Post
#18
|
|
Grupa: Zarejestrowani Postów: 225 Pomógł: 0 Dołączył: 1.11.2005 Ostrzeżenie: (0%) |
dodatkowo w PHP5 najlepjej stosować E_ALL | E_STRICT
proszę również o usunięcie mojego posta i ew. dodanie do posta autora tematu -------------------- (\.../)This is Bunny
(O.o)Copy Bunny into your signature to help him... (> <)...on his way to world domination |
|
|
7.07.2006, 05:47:20
Post
#19
|
|
Grupa: Zarejestrowani Postów: 6 Pomógł: 0 Dołączył: 7.07.2006 Ostrzeżenie: (0%) |
Problem: php podczas próby wysłania cookie wyświetla ostrzeżenie podobne do:
Kod Warning: Cannot modify header information - headers already sent by (output started at /sciezka/do/pliku/cos.php:X) in /sciezka/do/pliku/cos.php on line X Rozwiązanie: Na samym początku skryptu (nie mogą być wysłane żadne dane, nawet jedna spacja) dodaj kod: oraz na końcu: -------------------- |
|
|
9.07.2006, 14:33:03
Post
#20
|
|
Grupa: Przyjaciele php.pl Postów: 2 605 Pomógł: 96 Dołączył: 22.10.2004 Skąd: UK Ostrzeżenie: (0%) |
» PeHaPe - Czytałeś pkt. 6?
-------------------- Najczęstsze błędy | Jak poprawnie zadać pytanie? | Serwer PHP - od czego zacząć?
SQL Injection | Hashowanie haseł | Jak działają sesje, przykłady ___ The world is yours ... |
|
|
Wersja Lo-Fi | Aktualny czas: 14.09.2024 - 11:32 |