Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> 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
 
Start new topic
Odpowiedzi
dr_bonzo
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


Cytat
funkcja mysql_fetch_row (i jej alternatywy) ma wewnętrzny wskaźnik, który jest przesuwany po kolejnych wierszach wyniku zapytania. właśnie dlatego pierwsza funkcja zawsze działała

Nie zupelnie.
To rezultat (wynik) zapytania (SELECT ...) ma ten wskaznik nie funkcja.

Poza tym po co ci dwie identyczne funkcje i co chciales osiagnac?
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
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 5.10.2025 - 20:19