Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Najczęstsze błędy, Zanim zapytasz, to sprawdź.
TomASS
post
Post #21





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

Posty w temacie
- TomASS   Najczęstsze błędy   4.04.2006, 22:22:28
- - Turgon   Błąd który ostatnio doprowadził mnie do białej gor...   7.10.2006, 10:12:41
|- - mariuszn3   Cytat(Turgon @ 7.10.2006, 11:12:41 ) ...   7.10.2006, 13:40:49
- - Turgon   Tak mam klasę DAO pozwalająca na dostęp do bazy tz...   11.10.2006, 13:38:15
- - fx69   ja w tym tygodniu stoczyłem istną batali...   21.12.2006, 20:13:56
- - dr_bonzo   Cytatfunkcja mysql_fetch_row (i jej alternatywy) m...   21.12.2006, 20:44:51
- - fx69   CytatTo rezultat (wynik) zapytania (SELECT ...) ma...   22.12.2006, 11:13:05
- - potreb   Już tak często pojawiają się problemy z kodowaniem...   26.01.2008, 00:01:06
- - erix   Odświeżam, bo ten byk pojawia się nader często. J...   9.12.2008, 22:36:59
- - Chelo   Dobrze mówi, polecam notepad++ i ked'a.   23.08.2009, 01:03:58
- - thomson89   Gdy błąd jest w linijce, w której nie ma błędu? ...   29.10.2009, 15:58:36
- - kupilemsobieksiazke   Mam propozycję - może ktoś umieściłby tutaj sposób...   24.12.2009, 12:32:25
- - lnn   Cytat(kupilemsobieksiazke @ 24.12.2009, 12...   24.12.2009, 15:03:06
- - melkorm   Odnośnie punktu pierwszego, może troche więcej inf...   24.12.2009, 16:29:15
- - kupilemsobieksiazke   Widzę, widzę. Wszystko ustawiłem, tylko teraz błąd...   24.12.2009, 23:36:24
- - Eagle   @kupilemsobieksiazke CytatOd 1 grudnia 2009 następ...   25.12.2009, 00:56:22
- - tomaszs2   Cytat(Eagle @ 25.12.2009, 00:56:22 ) ...   26.01.2010, 12:45:13
- - AdamAdax   Witam po raz pierwszy tak w ogóle;) Ja przedstawi...   23.03.2010, 19:02:40
- - erix   Hmm, właściwie to nie tyczy się tylko PHP; wszystk...   23.03.2010, 23:48:37
- - thek   To może dla mniej zaznajomionych z obsługą serweró...   24.03.2010, 00:06:49


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: 9.02.2026 - 03:27