Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> 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

Posty w temacie
- TomASS   Najczęstsze błędy   4.04.2006, 22:22:28
- - mike_mech   Skoro debugowanie to proces pozbywania się błądów ...   4.04.2006, 22:29:41
- - aleksander   http://phppl.ezpublish.no/wortal/artykuly/...ch_pr...   5.04.2006, 07:06:07
- - sf   http://php.faq.pl   5.04.2006, 17:01:41
|- - szopen   Cytat(sf @ 5.04.2006, 18:01:41 ) http...   28.08.2008, 23:06:07
- - adam9870   Ja chciałbym trochę wspomnieć o kodowaniu znaków. ...   9.04.2006, 20:43:22
|- - elldiablo   Cytat(adam9870 @ 9.04.2006, 21:43:22 ...   30.05.2009, 20:47:44
- - TomASS   A czy to nie jest napisane w pkt 4 ? Że trzeba us...   9.04.2006, 23:14:26
- - yavaho   Sam pisze w większość w notatniku i problemow z ko...   10.04.2006, 03:20:23
- - emp   mniej błędów sie też popełnia jak sie nie pisze w ...   10.04.2006, 08:53:16
- - adam9870   Cytat("TomASS")A czy to nie jest napisan...   10.04.2006, 14:19:41
- - yavaho   Cytat(adam9870 @ 2006-04-10 15:19:41)nie zaws...   10.04.2006, 14:47:57
- - mariuszn3   Ad. 1 To dużo ładniejsze jest wyjscie z var_dump()...   10.04.2006, 15:16:43
- - nu_moon   Z wlasnego doswiadczenia : Komunikaty zwrotne z ba...   24.05.2006, 15:08:01
- - mokry   yavaho, zobacz tu: http://windows.online.pl/klawia...   7.06.2006, 22:32:48
- - yavaho   Dzieki mokry To mi w zupełności wystarczy do szcz...   7.06.2006, 23:34:45
- - r_a_d_e_k   witam mam problem ze stroną kodową. przy...   21.06.2006, 12:00:42
- - yavaho   Czy baza danych (a raczej tekst w bazie) już istni...   21.06.2006, 12:16:54
- - r_a_d_e_k   zmiana strony kodowej powoduje wyświetlenie innego...   21.06.2006, 12:25:51
- - Hacker   dodatkowo w PHP5 najlepjej stosować E_ALL | E_STRI...   1.07.2006, 19:10:26
- - PeHaPe   Problem: php podczas próby wysłania cookie wyświet...   7.07.2006, 05:47:20
- - strife   » PeHaPe - Czytałeś pkt. 6?   9.07.2006, 14:33:03
- - 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
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 29.03.2024 - 11:16