Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

3 Stron V   1 2 3 >  
Reply to this topicStart new topic
> Najczęstsze błędy, Zanim zapytasz, to sprawdź.
TomASS
post
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:
  1. <?php
  2.  
  3. echo '<pre>';
  4. print_r($tablica);
  5. echo '</pre>';
  6.  
  7. ?>

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:

  1. <?php
  2. $query = "SELECT * FROM tablica";
  3. $result = mysql_query($query);
  4. $row = mysql_fetch_array($result);
  5. echo '<pre>';
  6. print_r($row);
  7. echo '</pre>';
  8. ?>


2. Problemy z zapytaniem SQL
Mamy jakieś zapytanie:
  1. <?php
  2.  
  3. $query = "SELECT * FROM tabela";
  4. $result = mysql_query($query);
  5.  
  6. ?>

I coś niedobrego nam się dzieje. Wtedy można użyć funkcji mysql_error która podpowie nam co robimi źle:
  1. <?php
  2.  
  3. $query = "SELECT * FROM tabela";
  4. $result = mysql_query($query);
  5. echo $query.'<br/>';
  6.  
  7. ?>


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:
  1. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

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:
  1. <?php
  2.  
  3. if(isset($_GET['zmienna'])) $zmienna = $_GET['zmienna'];
  4.  
  5. ?>


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:
  1. <?php
  2. $result = @mysql_query($query);
  3. while ($row2 = @mysql_fetch_array($result2))
  4. ?>




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:

  1. <?php
  2. ini_set('display_errors', 1);
  3. ?>

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
  1. <?php
  2. echo 'zmienna: '.$_GET['zmienna'].' zmienna2:'.$_GET['zmienna2'];
  3. ?>

Dla forma
  1. <form method="post">
  2. <input type="text" name="zmienna" />
  3. </form>

  1. <?php
  2. echo 'zmienna z forma: '.$_POST['zmienna'];
  3. ?>

Mam nadzieję, że to się komuś przyda (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Ten post edytował TomASS 24.05.2008, 09:27:04
Go to the top of the page
+Quote Post
mike
post
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? (IMG:http://forum.php.pl/style_emoticons/default/laugh.gif)

~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 (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)

Temat przypinam, bo warto utworzyć zbiór porad, które pomogą Wam samemu znajdować błędy we własnych skryptach.
Go to the top of the page
+Quote Post
aleksander
post
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%)
-----


http://phppl.ezpublish.no/wortal/artykuly/...ch_programistow

i poprawiam orta w temacie:P
Go to the top of the page
+Quote Post
sf
post
Post #4





Grupa: Zarejestrowani
Postów: 1 597
Pomógł: 30
Dołączył: 19.02.2003
Skąd: Tychy

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


http://php.faq.pl
Go to the top of the page
+Quote Post
adam9870
post
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ć (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
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ć &#322. 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
Go to the top of the page
+Quote Post
TomASS
post
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 ? (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
Że trzeba ustawić kodowanie i w dodatku takie samo kodowanie musi być ustawione w edytorze (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Acha - w notatniku można zapisać niektóre kodowania (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Ten post edytował TomASS 9.04.2006, 23:15:01
Go to the top of the page
+Quote Post
yavaho
post
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?
Go to the top of the page
+Quote Post
emp
post
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 (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) .. no i ogolnie oczywiscie wszystkie zasady programowania obiektowego... wiekszego systemu nie da sie napisac w notatniku... strukturalnie... tzn da sie (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) ale z udogodnieniami i nowymi technikami zrobie to nieporownywalnie szybciej i lepiej
Go to the top of the page
+Quote Post
adam9870
post
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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) I jeszcze troszeczkę dokładniej napisałem o notatniku... (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)
Go to the top of the page
+Quote Post
yavaho
post
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ć :
Kod
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-2">
Wystarczy wstawić odpowiedni wpis (a nawet jest to obowiązkowe) dotyczący kodowania, tylko trzeba się jeszcze do niego zastosować podczas edycji pliku.
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.
Go to the top of the page
+Quote Post
mariuszn3
post
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ę.
Go to the top of the page
+Quote Post
nu_moon
post
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 :

  1. <?php
  2. ?>


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).
Go to the top of the page
+Quote Post
mokry
post
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 (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
yavaho
post
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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Jak by ta czcinke oferowali troche ładniejsza to by było super. Przyzwyczaiłem sie do Lucida Console.
Go to the top of the page
+Quote Post
r_a_d_e_k
post
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
Go to the top of the page
+Quote Post
yavaho
post
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?
Go to the top of the page
+Quote Post
r_a_d_e_k
post
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.
Go to the top of the page
+Quote Post
Hacker
post
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
Go to the top of the page
+Quote Post
PeHaPe
post
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:
  1. <?php ob_start(); ?>

oraz na końcu:
  1. <?php ob_end_flush(); ?>
Go to the top of the page
+Quote Post
strife
post
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? (IMG:http://forum.php.pl/style_emoticons/default/snitch.gif)
Go to the top of the page
+Quote Post

3 Stron V   1 2 3 >
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: 22.08.2025 - 15:17