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 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:
  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 smile.gif

Ten post edytował TomASS 24.05.2008, 09:27:04


--------------------
Go to the top of the page
+Quote Post
mike
post 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? 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 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 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%)
-----


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 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%)
-----


http://php.faq.pl


--------------------
Zapraszam na mój php blog, tworzenie stron.
Go to the top of the page
+Quote Post
adam9870
post 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ć 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 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 ? tongue.gif
Że trzeba ustawić kodowanie i w dodatku takie samo kodowanie musi być ustawione w edytorze smile.gif

Acha - w notatniku można zapisać niektóre kodowania smile.gif

Ten post edytował TomASS 9.04.2006, 23:15:01


--------------------
Go to the top of the page
+Quote Post
yavaho
post 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?


--------------------
Książki informatyczneKsiążki biznesowe
Warsztat: notepad hardcore
Go to the top of the page
+Quote Post
emp
post 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 winksmiley.jpg .. no i ogolnie oczywiscie wszystkie zasady programowania obiektowego... wiekszego systemu nie da sie napisac w notatniku... strukturalnie... tzn da sie winksmiley.jpg 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ć.
Go to the top of the page
+Quote Post
adam9870
post 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 smile.gif I jeszcze troszeczkę dokładniej napisałem o notatniku... biggrin.gif
Go to the top of the page
+Quote Post
yavaho
post 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ć :
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.


--------------------
Książki informatyczneKsiążki biznesowe
Warsztat: notepad hardcore
Go to the top of the page
+Quote Post
mariuszn3
post 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ę.
Go to the top of the page
+Quote Post
nu_moon
post 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 :

  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 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 winksmiley.jpg


--------------------
Pomogłem? Podziękuj proszę klikając poniżej "POMÓGŁ" ;)
Go to the top of the page
+Quote Post
yavaho
post 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 smile.gif Jak by ta czcinke oferowali troche ładniejsza to by było super. Przyzwyczaiłem sie do Lucida Console.


--------------------
Książki informatyczneKsiążki biznesowe
Warsztat: notepad hardcore
Go to the top of the page
+Quote Post
r_a_d_e_k
post 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
Go to the top of the page
+Quote Post
yavaho
post 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?


--------------------
Książki informatyczneKsiążki biznesowe
Warsztat: notepad hardcore
Go to the top of the page
+Quote Post
r_a_d_e_k
post 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.
Go to the top of the page
+Quote Post
Hacker
post 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
Go to the top of the page
+Quote Post
PeHaPe
post 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:
  1. <?php ob_start(); ?>

oraz na końcu:
  1. <?php ob_end_flush(); ?>


--------------------
Go to the top of the page
+Quote Post
strife
post 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? 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 Wersja Lo-Fi Aktualny czas: 28.03.2024 - 11:11