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
3 Stron V  < 1 2 3  
Start new topic
Odpowiedzi (40 - 40)
thek
post 24.03.2010, 00:06:49
Post #41





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




To może dla mniej zaznajomionych z obsługą serwerów SMTP na Windowsie... Wiele osób testuje mailingi, a temat się przewija i przewija a ludzie tylko mnożą sobie problemy. Istnieje bardzo okrojona wersja serwera SMTP, która w zasadzie służy tylko do "przechwytywania maili idących sobie po localhoście". Uruchamia się go i tylko sprawdza co przez niego próbowało się przebić. Pomaga więc to w testowaniu wysyłki e-maili bez faktycznego wysyłania ich w świat. Programik nazywa się PaperCut. Myślę, że wiele osób powinno go polubić podczas testów smile.gif

EDIT: Bym zapomniał: Autor udostępnia na stronie kod źródłowy, a sam programik jest na licencji Apache 2.0


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post

3 Stron V  < 1 2 3
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: 5.06.2024 - 10:27