Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ Przedszkole _ Najczęstsze błędy

Napisany przez: TomASS 4.04.2006, 22:22:28

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. http://www.php.net/echo '<pre>';
  4. http://www.php.net/print_r($tablica);
  5. http://www.php.net/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 = http://www.php.net/mysql_query($query);
  4. $row = http://www.php.net/mysql_fetch_array($result);
  5. http://www.php.net/echo '<pre>';
  6. http://www.php.net/print_r($row);
  7. http://www.php.net/echo '</pre>';
  8. ?>


2. Problemy z zapytaniem SQL
Mamy jakieś zapytanie:
  1. <?php
  2.  
  3. $query = "SELECT * FROM tabela";
  4. $result = http://www.php.net/mysql_query($query);
  5.  
  6. ?>

I coś niedobrego nam się dzieje. Wtedy można użyć funkcji http://pl2.php.net/mysql_error która podpowie nam co robimi źle:
  1. <?php
  2.  
  3. $query = "SELECT * FROM tabela";
  4. $result = http://www.php.net/mysql_query($query);
  5. http://www.php.net/echo $query.'<br/>';
  6. http://www.php.net/echo http://www.php.net/mysql_error();
  7.  
  8. ?>


3. Problem z session
Czasmi, przed użyciem sesji zapominamy o http://pl2.php.net/manual/pl/function.session-start.php.

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. <http://december.com/html/4/element/meta.html 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ę http://phpedia.pl/wiki.php?title=Cannot_add_header_information_-_headers_already_sent.

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 http://pl.php.net/manual/pl/function.isset.php:
  1. <?php
  2.  
  3. if(http://www.php.net/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 = @http://www.php.net/mysql_query($query);
  3. while ($row2 = @http://www.php.net/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. http://www.php.net/error_reporting(E_ALL);
  3. http://www.php.net/ini_set('display_errors', 1);
  4. ?>

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. http://www.php.net/echo 'zmienna: '.$_GET['zmienna'].' zmienna2:'.$_GET['zmienna2'];
  3. ?>

Dla forma
  1. <http://december.com/html/4/element/form.html method="post">
  2. <http://december.com/html/4/element/input.html type="text" name="zmienna" />
  3. </http://december.com/html/4/element/form.html>

  1. <?php
  2. http://www.php.net/echo 'zmienna z forma: '.$_POST['zmienna'];
  3. ?>

Mam nadzieję, że to się komuś przyda smile.gif

Napisany przez: mike_mech 4.04.2006, 22:29:41

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.

Napisany przez: aleksander 5.04.2006, 07:06:07

http://phppl.ezpublish.no/wortal/artykuly/...ch_programistow

i poprawiam orta w temacie:P

Napisany przez: sf 5.04.2006, 17:01:41

http://php.faq.pl

Napisany przez: adam9870 9.04.2006, 20:43:22

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

Napisany przez: TomASS 9.04.2006, 23:14:26

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

Napisany przez: yavaho 10.04.2006, 03:20:23

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?

Napisany przez: emp 10.04.2006, 08:53:16

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

Napisany przez: adam9870 10.04.2006, 14:19:41

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

Napisany przez: yavaho 10.04.2006, 14:47:57

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.

Napisany przez: mariuszn3 10.04.2006, 15:16:43

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ę.

Napisany przez: nu_moon 24.05.2006, 15:08:01

Z wlasnego doswiadczenia : Komunikaty zwrotne z bazy danych wyswietlamy :

  1. <?php
  2. http://www.php.net/echo http://www.php.net/mysql_error();
  3. ?>


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

Napisany przez: mokry 7.06.2006, 22:32:48

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

Napisany przez: yavaho 7.06.2006, 23:34:45

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.

Napisany przez: r_a_d_e_k 21.06.2006, 12:00:42

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

Napisany przez: yavaho 21.06.2006, 12:16:54

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?

Napisany przez: r_a_d_e_k 21.06.2006, 12:25:51

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.

Napisany przez: Hacker 1.07.2006, 19:10:26

dodatkowo w PHP5 najlepjej stosować E_ALL | E_STRICT

proszę również o usunięcie mojego posta i ew. dodanie do posta autora tematu

Napisany przez: PeHaPe 7.07.2006, 05:47:20

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 http://www.php.net/ob_start(); ?>

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

Napisany przez: strife 9.07.2006, 14:33:03

» http://PeHaPe - Czytałeś pkt. 6? snitch.gif

Napisany przez: Turgon 7.10.2006, 10:12:41

Błąd który ostatnio doprowadził mnie do białej gorączki !
Nigdy nie umieszczajcie zamykania połączenia do bazy danych w DAO w destruktorze, bo zaczynają się dziać dziwne rzeczy.

Napisany przez: mariuszn3 7.10.2006, 13:40:49

Cytat(Turgon @ 7.10.2006, 11:12:41 ) *
Błąd który ostatnio doprowadził mnie do białej gorączki !
Nigdy nie umieszczajcie zamykania połączenia do bazy danych w DAO w destruktorze, bo zaczynają się dziać dziwne rzeczy.

A czym jest u Ciebie DAO? Globalną klasą do opracji na bazie czy raczej klasą dotyczącą jednego obiektu (to znaczy masz wiele klas DAO w aplikacji).
Na czym polegają te dziwne rzeczy? U siebie mam wpisane zamknięcie połączenia w destructor globalnej klasy (singleton) dostępu do bazy i problem miałem jedynie przy obecności innego globalnego singletona posiadającego destructor (jeśli ten inny wywoływał się jako pierwszy i przykładowo wykrzaczał się.. destruktor klasy dostępu do bazy już nie był wykonywany, jeśli jako drugi nie było już dostępu do bazy).

Napisany przez: Turgon 11.10.2006, 13:38:15

Tak mam klasę DAO pozwalająca na dostęp do bazy tzn. Execute, connect etc.
Ale nie udostępnia funkcji query. Więc tak.
Po prostu błąd był z sesjami które mam w mySQL. I tu nagle mi się połączenie zamykało.

Napisany przez: fx69 21.12.2006, 20:13:56

ja w tym tygodniu stoczyłem istną batalię z własnym skryptem, który uparcie nie chciał się poprawnie wykonać... problem polegał na tym, że tworząc 3 funkcje, operujące na tym samym id połączenia (tzn. tym co zwraca np. funkcja mysql_query winksmiley.jpg ), przy wywołaniu tylko jedna (pierwsza) działała poprawnie.

wizualizując:

  1. <?php
  2. function x($id_polaczenia) {
  3. $wartosc_koncowa_x = 0;
  4.  
  5. while($rowx=http://www.php.net/mysql_fetch_row($id_polaczenia))
  6. $wartosc_koncowa_x += $rowx[4] * $rowx[5];
  7.  
  8. return $wartosc_koncowa_x;
  9. }
  10.  
  11. function y($id_polaczenia) {
  12. $wartosc_koncowa_y = 0;
  13.  
  14. while($rowx=http://www.php.net/mysql_fetch_row($id_polaczenia))
  15.  
  16. ...
  17.  
  18. $wartosc_koncowa_y += $a * $rowx[5];
  19.  
  20. return $wartosc_koncowa_y;
  21. }
  22. ?>


i wywołanie:

  1. <?php
  2. $sql = http://www.php.net/mysql_query("SELECT * FROM ...");
  3.  
  4. ...
  5.  
  6. $wart_x = x($sql); //zwracało poprawną wartość
  7. $wart_y = y($sql);  //zwracało 0
  8. ?>


może dla kogoś wydawać się oczywiste gdzie jest błąd, ale pisze to dla tych osób, które mają podobny problem i już są gotowi wyrzucić komputer przez okno, bo całe źródło wygląda dobrze napisane, a błąd jak jest tak jest...

do rzeczy.
operując na tym samym zapytaniu (id połączenia) trzeba pamiętać, że 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. W drugiej wskaźnik był już ustawiony na nieistniejącym wierszu, więc y($sql) zwracało 0.
żeby temu zapobiec należało "ręcznie" ustawiać wskaźnik na pierwszy wiersz. Konkretnie rzecz biorąc, chodziło o funkcję mysql_data_seek:

  1. <?php
  2. function x($id_polaczenia) {
  3. $wartosc_koncowa_x = 0;
  4.  
  5. http://www.php.net/mysql_data_seek($id_polaczenia, 0); //tak samo w pozostałych funkcjach
  6.  
  7. while($rowx=http://www.php.net/mysql_fetch_row($id_polaczenia))
  8. ...
  9. ?>

Napisany przez: dr_bonzo 21.12.2006, 20:44:51

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?

Napisany przez: fx69 22.12.2006, 11:13:05

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


Rzeczywiście... dzięki za uwagę.

Cytat
po co ci dwie identyczne funkcje i co chciales osiagnac?


http://forum.php.pl/niesforny-return-w-funkcji-t58808.html

w końcu (desperacko szukając błędu) zrobiłem z tego klase i 3 funkcje.

te wyżej ( x(), y() ) są po prostu zwykłymi, teoretycznymi przykładami.

edit: faktycznie obie były identyczne smile.gif zmieniłem.

Napisany przez: potreb 26.01.2008, 00:01:06

Już tak często pojawiają się problemy z kodowaniem w utf-8, że mam dość pisania ciąglę to samo.

Dla utf-8 najważniejsze rzeczy:

1. Dla połączenia z bazą ustawic set names:

  1. <?php
  2. http://www.php.net/mysql_connect($DBhost,$DBuser,$DBpass);
  3. http://www.php.net/mysql_query("SET NAMES utf8");
  4. http://www.php.net/mysql_select_db($DBname);
  5. ?>


2. Sprawdzić czy pliki zostały zapisane w utf-8.
Do tego nie służy Notatnik (Notepad) tylko Notepad2 gdzie jest funkcja konwertowania lub UltraEdit 32 i EditPlus i może wiele innych.

3. Skoro mamy już te 2 rzeczy, trzeba pamiętać o najważniejszym, ustawić dla bazy kodowanie utf-8. Jest to możliwe od wersji 4.1 mysql-a. Trzeba pamiętać że tabele powinny mieć porównywanie napisów w utf8_unicode_ci.

4. Kodowanie dla strony:
Jeżeli zwykła meta nie działa:
Kod
<meta http-equiv="content-type" content="text/html; charset=utf-8">


Dodać można jeszcze:
  1. <?php
  2. http://www.php.net/header( 'Content-Type: text/html; charset=utf-8' );
  3. ?>


5. Mam bazę zapisaną w latin2 a kodowanie na stronie utf-8. Jak szybko można przekonwertować bazę na utf-8.

Wykonać punkt pierwszy. Stworzyć nowy plik wyświetlając np metodą backupu bazę, pozamieniać collate na utf8_unicode_ci i charset na utf8 wgrać ją od nowa.

Najlepiej zawsze zrobić sobie kopie bazy, aby uniknąć nieprzyjemności.

I to na tyle. W razie problemów jest forum.

Napisany przez: szopen 28.08.2008, 23:06:07

Cytat(sf @ 5.04.2006, 18:01:41 ) *
http://php.faq.pl

Kod
</P><P>Error connecting to database: Query error: select modyfikacja from faq where modyfikacja is not null order by modyfikacja desc limit 1 - <BR>Line: 119<BR>File: /home/services/httpd/virtuals/faq-php/lib/libsql.inc<BR><BR></P><P>


Wbrew pozorom bardzo pouczająca strona, bo najlepiej uczyć się na błędach -- cudzych smile.gif

Napisany przez: erix 9.12.2008, 22:36:59

Odświeżam, bo ten byk pojawia się nader często.

Jest różnica między umieszczaniem kluczy tablic asocjacyjnych w cudzysłowach a bez nich:

  1. <?php
  2. $tablica = http://www.php.net/array('klucz'=>'wartosc');
  3.  
  4. // z cudzysłowem
  5. http://www.php.net/echo $tablica['klucz'];  // wszystko ok
  6.  
  7. // bez
  8. http://www.php.net/echo $tablica[klucz]; // eee...
  9. ?>

Interpreter wygeneruje błąd typu NOTICE. Dlaczego? Stała a łańcuch tekstowy, to twie różne rzeczy. PHP rozróżnia je od siebie właśnie na podstawie cudzysłowów. Do poczytania: stałe - http://pl2.php.net/manual/pl/language.constants.php - oraz wspomniany przeze mnie błąd w manualu - http://pl2.php.net/manual/pl/language.types.array.php#language.types.array.foo-bar

Niestety, konstrukcja z pseudostałą działa...

Nie ma sensu umieszczać zmiennych w cudzysłowach, jeśli są jedynym parametrem!
Utwórz sobie pusty skrypt i wypróbuj coś takiego:
  1. <?php
  2. $zmienna = 'asdasd';
  3.  
  4. http://www.php.net/print("$zmienna");
  5. http://www.php.net/print($zmienna);
  6. ?>

Widzisz różnicę w działaniu? Tak? Bo ja nie. A kodem z cudzysłowami (w tym przypadku) tylko niepotrzebnie maltretujesz interpreter.

Napisany przez: elldiablo 30.05.2009, 20:47:44

Cytat(adam9870 @ 9.04.2006, 21:43:22 ) *
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 <span style="font-weight: bold;">ł</span> trzeba wpisać <span style="font-weight: bold;">&#322</span>. 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).



Witam,
Osobiście polecam programować w NOTEPAD++. Następnie plik który zapiszemy w formacie np. index.php w opcjach wybieramy "Format/Koduj w utf-8 (bez BOM)" i zaraz po połączeniu z bazą danych wpisać polecenie: mysql_query ("SET NAMES utf8");

Działa na 100%

Napisany przez: Chelo 23.08.2009, 01:03:58

Dobrze mówi, polecam notepad++ i ked'a.

Napisany przez: thomson89 29.10.2009, 15:58:36

Gdy błąd jest w linijce, w której nie ma błędu?

Najczęstszym błędem początkujących jest zapominanie o średniku, na końcu instrukcji. PHP wywali wtedy błąd w linijce 2, a nie 1. Bardziej kumaci to poprawią - mniej: nie.

Wyświetlanie HTML

Jeżeli wyświetlamy instrukcje HTML, należy pamiętać o średnikach, cudzysłowach.

  1. http://www.php.net/echo '<font color='red'>'; //źle!
  2. http://www.php.net/echo '<font color=\'red\'>'; //zadziała
  3. http://www.php.net/echo "<font color='red'>"; //poprawnie
  4. http://www.php.net/echo '<font color="red">'; //chyba najlepiej


Uwaga organizacyjna, dot. baz danych

Najlepiej jest sobie zrobić plik: polacz.php, config.php. W pliku config dać:
  1. $login = "";
  2. $haslo = "";
  3. $baza = "";
  4. $serwer = "";


Zaś w pliku polacz.php:
  1. include('config.php');
  2.  
  3. function polacz($serwer, $baza, $login, $haslo)
  4. {
  5. $polaczenie = http://www.php.net/mysql_connect($serwer, $uzytkownik, $haslo);
  6. if(!$polaczenie)
  7. return false;
  8. else
  9. {
  10. http://www.php.net/mysql_select_db($baza, $polaczenie);
  11. http://www.php.net/mysql_query('SET NAMES utf8');
  12. http://www.php.net/mysql_query('SET CHARACTER_SET utf8_unicode_ci');
  13. return $polaczenie;
  14. }
  15. }
  16.  
  17. $polaczenie = polacz($serwer, $baza, $login, $haslo);
  18. if(!!polaczenie)
  19. http://www.php.net/echo 'Połączenie z bazą danych NIE powiodło się!';


Potem wystarczy zaincludować plik, polacz.php, tam gdzie używamy bazy danych mysql.

Napisany przez: kupilemsobieksiazke 24.12.2009, 12:32:25

Mam propozycję - może ktoś umieściłby tutaj sposób na przetwarzanie formularza i wysyłanie maila? Szukałem na forum, lecz nie ma takiego rozwiązania, co by mi pomogło na moim localhost z xamppem (chodzi o konfigurację adresów e-mail). Poza tym na serwerze 110mb.com wyskakuje błąd, że funkcja mail nie jest obsługiwana - skąd można się dowiedzieć, które serwery hostingowe ją obsługują, a które nie? Z góry dzięki. Ten pierwszy to na pewno częsty błąd ;p

Napisany przez: lnn 24.12.2009, 15:03:06

Cytat(kupilemsobieksiazke @ 24.12.2009, 12:32:25 ) *
Mam propozycję - może ktoś umieściłby tutaj sposób na przetwarzanie formularza i wysyłanie maila? Szukałem na forum, lecz nie ma takiego rozwiązania, co by mi pomogło na moim localhost z xamppem (chodzi o konfigurację adresów e-mail). Poza tym na serwerze 110mb.com wyskakuje błąd, że funkcja mail nie jest obsługiwana - skąd można się dowiedzieć, które serwery hostingowe ją obsługują, a które nie? Z góry dzięki. Ten pierwszy to na pewno częsty błąd ;p

na XAMPP mozesz sobie skonfigurowac lokalny serwer pocztowy, jest tam Mercury, a maile sa w postaci:
nazwausera@localhost, pop3/smtp: localhost
minus tego jest taki, że jesli masz walidacje na adres12_Jakis@serwer.com.pl to wyskoczy Ci błąd bo wiadomo, że @localhost nie ma .pl/.com itd

co do bezpłatnych serwerów to odradzam, lepiej zainwestowac te 100 zł i mieć poodblokowywane różne opcje, a co do opcji które są poblokowane to zwykle w specyfikacji konta hostingowego jest napisane.

http://img687.imageshack.us/i/xampp.jpg/
http://img38.imageshack.us/i/skrinx.jpg/

Napisany przez: melkorm 24.12.2009, 16:29:15

Odnośnie punktu pierwszego, może troche więcej informacji:  

  1. http://www.php.net/var_dump($zmienna); // może to być tablica, obiekt, text, no dosłownei wszystko.


Można dodać <pre>, aby ładnie wyglądało lub podejrzeć źródło strony gdzie są prawidłowo wygenerowane wcięcia.

Trochę więcej o debugowaniu: (bardzo polecam super się pracuje z tym)



Ładne, czyż nie?

Otóż jest to moduł o nazwie "http://xdebug.org/download.php" teraz krótki poradnik jak go uruchomić i jakie plusy daje on nam prócz ładnie sformatowanego kodu:

1. Z powyższego linku ściągamy odpowiadającą naszej wersji PHP dll'kę.

Wrzucamy go do katalogu "apache/php/ext/"

I path do niej wpisujemy w linijce (patrz niżej) 

Kod
zend_extension="D:/xampp/php/ext/php_xdebug-2.0.5-5.3-vc6.dll"</P><P>


2. Wchodzimy do php.ini :

Szukamy "[Zend]" lub "[XDebug]", następnie komentujemy cały blook [Zend] (niestety bez tego XDebug nie ruszy).

powinno to wyglądać mniej więcej tak:

Kod
[Zend]
;zend_extension_ts = /php/modules/php_xdebug-4.4.1-2.0.5.dll"
;zend_extension_manager.optimizer_ts = "\xampp\php\zendOptimizer\lib\Optimizer"
;zend_optimizer.enable_loader = 0
;zend_optimizer.optimization_level=15
;zend_optimizer.license_path =
; Local Variables:
; tab-width: 4
; End:
  
  [XDebug]
  zend_extension="D:/xampp/php/ext/php_xdebug-2.0.5-5.3-vc6.dll"
  xdebug.remote_enable=1
  xdebug.remote_host=127.0.0.1
  xdebug.remote_port=9000
  xdebug.remote_handler=dbgp
  xdebug.profiler_enable=1
  xdebug.profiler_output_dir="D:\xampp\tmp"
  xdebug.var_display_max_children = 256
  xdebug.var_display_max_data = 4000
  xdebug.var_display_max_depth = 12


Pod tym linkiem mamy wszystkie odstępne opcje Debuggera http://xdebug.org/docs/all_settings

W taki oto sposób uzyskujemy ładnie sformatowany debug.




Teraz to co rushowe-mysie-pysie lubią najbardziej:

Otóż profiler tworzy nam pewne pliki, w katalogu zadeklarowanym w:

Kod
</P><P>xdebug.profiler_output_dir="D:\xampp\tmp"</P><P>


Otworzyć je można za pomocą programu który znaleźć można pod adresem:

http://sourceforge.net/projects/wincachegrind/

Możliwości daje wielkie, pokazuje czasy wykonań co po czym itp, bardzo dobre narzędzie do profilowania większych aplikacji smile.gif



http://elrems.wordpress.com/2008/02/12/profiling-php-with-xdebug-and-wincachegrind/ trochę większy opis możliwości i guide jak zainstalować.

Napisany przez: kupilemsobieksiazke 24.12.2009, 23:36:24

Widzę, widzę. Wszystko ustawiłem, tylko teraz błąd jest taki: Warning: mail() [function.mail]: Failed to connect to mailserver at "smtp.o2.pl" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in...

Z góry dzięki.

Napisany przez: Eagle 25.12.2009, 00:56:22

@kupilemsobieksiazke

Cytat
Od 1 grudnia 2009 następuje zmiana portów serwera poczty wychodzącej (SMTP) z 25 na 587

http://pomoc.o2.pl/poczta/zmiana_portow/

Napisany przez: tomaszs2 26.01.2010, 12:45:13

Cytat(Eagle @ 25.12.2009, 00:56:22 ) *
@kupilemsobieksiazke

http://pomoc.o2.pl/poczta/zmiana_portow/


Dzięki tego właśnie szukałem

Napisany przez: AdamAdax 23.03.2010, 19:02:40

Witam po raz pierwszy tak w ogóle;)

Ja przedstawię dosyć częsty błąd programistyczny, który nie jest tak łatwo zlokalizować.

  1. $zmienna = 'Hello World';
  2.  
  3. if ($zmienna = 'Hello PHP') {
  4. http://www.php.net/echo $zmienna;
  5. }
  6.  


W takim wypadku nie dostaniemy powiadomienia o błędzie bowiem zmiennej został przypisany ciąg 'Hello PHP', a nie to było celem. Często z powodu szybkiego pisania, nie wpisujemy dwóch znaków równości w celu porównania ciągów.
Aby nigdy więcej nie zaszła taka pomyłka dobrym sposobem jest porównywać w ten sposób:
  1. ...
  2. if ('Hello PHP' == $zmienna) {
  3. http://www.php.net/echo $zmienna;
  4. }


W takim wypadku gdybyśmy się pomylili i wstawili jeden znak równości, PHP zwróci błąd a my łatwo zidentyfikujemy miejsce gdzie nastąpiło złe porównanie.


Napisany przez: erix 23.03.2010, 23:48:37

Hmm, właściwie to nie tyczy się tylko PHP; wszystkie języki bazujące na składni C "umożliwiają" coś takiego. biggrin.gif

it's not a bug, it's a feature winksmiley.jpg

Napisany przez: thek 24.03.2010, 00:06:49

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ę http://papercut.codeplex.com/. 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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)