P H P  V I E T  N A M  P O R T A L
Xin chào, Khách. Vui lòng đăng nhập hoặc đăng ký tài khoản.
Bạn đã quên email kích hoạt?






     Trang chủ | Download | Tự học PHP | Kho tư liệu | Diễn đàn
Trang: [1] 2
  In  
Current Topic Rating: ***
You have not rated this topic. Select a rating:
Tác giảChủ đề: Sửa Lỗi Khi Lập Trình PHP - Cơ bản  (Đã đọc 22579 lần)
doangia
Administrator
PHP Intermediate
*****
Posts: 1097

Hữu Tâm Ắt Thành Tựu


Xem hồ sơ WWW Email
« on: November 12, 2008, 02:10:24 AM »

Khi đã code, không ai là chưa từng gặp lỗi. Và bài này chỉ nhắm đến các bạn mới bước vào thế giới PHP, chưa có kinh nghiệm sửa lỗi sẽ có một số kỹ năng tối thiểu để có thể tự mình sửa lỗi mà không cần phải nhờ mọi người.

I . Việc làm đầu tiên:

Để sửa lỗi thì phải biết lỗi như thế nào. Vì thế việc đầu tiên bạn cần làm là bật tính năng thông báo lỗi của PHP lên.
1. Sửa php.ini file. Set display_errors thành On. Restart webserver.
- Nếu như bạn đang dùng share host , ko thể tự edit php.ini được thì bạn có thể dùng hàm ini_set để bật tính năng này lúc run-time ( chỉ có tác dụng với script đang chạy)
Code:
ini_set("error_reporting", E_ALL);

2. Ở đầu script , thêm vào :
Code:
error_reporting(E_ALL);

Nếu ko set như thế thì mặc định nó sẽ có giá trị là E_ALL & ~E_NOTICE & ~E_STRICT , và như thế nó sẽ báo trình thông dịch PHP hiện tất cả lỗi ngoại trừ  Notices và Strict Notices.
Danh sách các giá trị bạn có thể truyền cho error_reporting là :
Value - Constant
1 -E_ERROR
2 -E_WARNING
4 -E_PARSE
8 -E_NOTICE
16 -E_CORE_ERROR
32 -E_CORE_WARNING
64 -E_COMPILE_ERROR
128 -E_COMPILE_WARNING
256 -E_USER_ERROR
512 -E_USER_WARNING
1024 -E_USER_NOTICE
6143 -E_ALL
2048 -E_STRICT
4096 -E_RECOVERABLE_ERROR

Bạn có thể dùng giá trị trực tiếp hoặc constant đều được( nên dùng constant cho dễ hiểu)
Bạn có thể xem thêm về hàm này tại đây : http://vn.php.net/error_reporting
Lưu ý :
- Khi website đã hoạt động ổn định thì nên tắt tính năng này đi bằng cách set error_reporting thành 0 :
Code:
error_reporting(0);


Đó chính là bước chuẩn bị cần thiết để "bắt lỗi" với PHP.

Khởi đầu với những lỗi cơ bản - Parse Errors

Parse Error là những lỗi về cú pháp (syntax error) . Lỗi này sẽ xuất hiện khi bạn viết code không theo đúng khuôn dạng php qui định như : thiếu dấu ( , dấu nháy " , sai chính tả từ khóa, sai tên hàm ... Đây là lỗi thuộc dạng thường gặp và dễ sửa . Khi gặp lỗi này PHP sẽ xuất ra những thông báo cho bạn biết xuất hiện lỗi ở dòng nào và lý do lỗi ( khá chung chung)
Bạn xem đoạn code sau :
Code:
<?php


print "Hello World;

?>


Nhìn vào sẽ thấy ngay đoạn code này thiếu dấu nháy cuối chuỗi ở print "Hello World;
Và khi chạy PHP sẽ tặng bạn 1 thông báo thế này :
Code:
Parse error: syntax error, unexpected $end in D:\xampp\htdocs\broken.php on line 5
Và nếu chưa quen bạn sẽ rất ngạc nhiên vì ko biết dòng số 5 có lỗi gì
Code:
?>
Điều này bởi vì PHP sẽ xem dấu nháy trước chữ Hello là đánh dấu bắt đầu 1 chuỗi, nó sẽ dò theo cho đến kí tự nháy tiếp theo để kết thúc 1 chuỗi. Trong trường hợp này nó dò đến tận cùng code vẫn ko gặp, đành phải ... hét lên có lỗi ở đấy .
Và khi PHP báo lỗi ở dòng :
Code:
?>
Bạn nên tìm ngược lên , dò từng dòng xem có chuỗi nào ko được bao trong cặp nháy hay không .
Đây là những cặp dấu bao thông dụng , rất thường bị lỗi unexpected $end .
Quote
[ ]
{ }
" "
' '


Bạn xem đoạn code sau:
Code:
<?php
$yourName 
"Jordan";

if 
$yourName == "Jordan")
{
  echo 
"Hello $yourName";
}
?>

Nhìn vào ta sẽ thấy lệnh if có lỗi thiếu ( . Và đúng như thế PHP sẽ báo lỗi thế này
Code:
Parse error: syntax error, unexpected T_VARIABLE, expecting '(' in D:\xampp\htdocts\broken.php on line 4
Lần này PHP báo chính xác dòng có lỗi .

Một lỗi cũng hay gặp là thiếu dấu ; ở cuối câu lệnh . Với lỗi này thì PHP sẽ báo lỗi ở dòng phía sau dòng có lỗi . Vì thế nên kiểm tra trước sau trên dưới cẩn thận.

Sử dụng var_dump()
Hàm này rất hữu dụng khi ta cần sửa các logic error . Khi cần biết 1 biến đang chứa những gì bên trong và kiểu dữ liệu của nó ta cứ var_dump in nó ra xem xét
VD :
Code:
<?php
$a 
= array(12, array("a""b""c"));
var_dump($a);
?>


Sẽ cho ra :
Code:
array(3) {
  [0]=>
  int(1)
  [1]=>
  int(2)
  [2]=>
  array(3) {
    [0]=>
    string(1) "a"
    [1]=>
    string(1) "b"
    [2]=>
    string(1) "c"
  }
}

... còn tiếp
Logged

Cần Thơ Gạo Trắng Nước Trong
Đến Chơi Mang Dép Chân Không Đi Về ...
vphat28
PHP Starter
*
Posts: 4


Xem hồ sơ Email
« Trả lời #1 on: December 13, 2008, 08:09:24 AM »

cho em hỏi là sao em dùng \t hay \n nhưng nó ko tab hay xuống dòng vậy? xuống dòng thì em còn bik cái <br /> nhưng tab thì là cái gì vậy? Em đang tự học thêm php nên ko rõ lắm
Logged
cmxq
Administrator
PHP Intermediate
*****
Posts: 1330


Xem hồ sơ Email
« Trả lời #2 on: December 13, 2008, 08:33:11 AM »

Nó là một ký tự ẩn, trên trình duyệt thì bạn không thấy, nhưng khi view mã nguồn (HTML) của trang Web thì sẽ thấy.
Logged

Trở về phpvn.org
tvazone
PHP Intermediate
*
Posts: 49

matrix2vn
Xem hồ sơ Email
« Trả lời #3 on: December 13, 2008, 11:02:02 PM »

Reply: vphat28

Nếu bạn đang coding php. Mà tôi nghĩ nhiều người sẽ mắc phải vấn đề này khi dùng các thẻ \t tab \n newline ...
Các thẻ đó sẽ có hiệu lực khi bạn dùng trong cặp dấu nháy " \t \r \n .." . Còn dùng trong cặp dấu nháy ' \t \r \n ..' thì không có tác dụng

Chúc bạnt thành công ^^
Logged

=====================
Music : http://bit.ly/bWgpne
vphat28
PHP Starter
*
Posts: 4


Xem hồ sơ Email
« Trả lời #4 on: December 14, 2008, 06:19:21 AM »

Nó là một ký tự ẩn, trên trình duyệt thì bạn không thấy, nhưng khi view mã nguồn (HTML) của trang Web thì sẽ thấy.

các anh có thể cho em list các thẻ kiểu như xuống dòng là <br /> được ko a? cám ơn các anh..

còn cái single quote thì em mới bik rồi, nó lấy y chang mình gõ vào..
« Last Edit: December 14, 2008, 06:23:45 AM bởi vphat28 » Logged
vphat28
PHP Starter
*
Posts: 4


Xem hồ sơ Email
« Trả lời #5 on: December 16, 2008, 07:51:22 AM »

lại khổ nữa rồi các anh ạ....vào file php.ini chỉnh lại date.timezone = Asia/Saigon rồi nhưng khi echo cái date_default_timezone_get() thì nó lại ra là Asia/Krasnoyarsk thật ko sao hiểu nổi...giúp em với Sad
Logged
BinhPham
Global Moderator
PHP Intermediate
*****
Posts: 113


Xem hồ sơ
« Trả lời #6 on: March 05, 2009, 08:42:40 PM »

Code:
<?php
date_default_timezone_set
('Asia/Saigon');
?>


Dùng hàm date_default_timezone_set để xác định timezone.
Logged
boyvt
PHP Starter
*
Posts: 8


Xem hồ sơ
« Trả lời #7 on: August 13, 2009, 05:53:42 PM »

... còn tiếp


Sao chủ topic ko tiếp tục nhỉ :d
Logged
lamnguyenpy
PHP Starter
*
Posts: 4


Xem hồ sơ
« Trả lời #8 on: May 08, 2010, 08:34:51 PM »

mình mới học PHP ah, và tự học, mình đã cài goi wamp, nhưng khi chạy trang PHP thì bị lỗi, trình duyệt không dịch được code trong the <?php ?>, ma hiển thij luôn phần code đó. các anh chị ở đây, chắc đã thành thạo rồi, chỉ giúp mình nha. mìh đang làm báo cáo thực tập tốt nghiệp mà. Cám ơn nhiều ha. cùng cố gắng cho cộng đồng nguồn mở!!!
Logged
cudenweb
PHP Intermediate
*
Posts: 116


Là cái số... nếu không được thì... hẹn kiếp sau.


Xem hồ sơ WWW
« Trả lời #9 on: May 10, 2010, 08:29:18 AM »

Tình trạng thế nào mà bảo là không chạy được code của php...
Logged

Muốn biết nhân đời trước - Xem hưởng quả đời này - Muốn biết quả tương lai - Xét nhân gieo hiện tại - Người mà tâm chân chánh - Mọi người hướng thiện theo - Việc làm hợp lý lẽ - Khắp nơi được an vui - Người mà hư tâm tà - Tham sân dần phát triển - Làm việc mà tùy tiện - Tự rước họa vào thân.
lamnguyenpy
PHP Starter
*
Posts: 4


Xem hồ sơ
« Trả lời #10 on: May 10, 2010, 04:09:23 PM »

dạ e cài gói WAMP, khi test thư localhost thì đã được, nhưng khi lập trình thì nó không dịch được code php.
ví dụ chương trình đơn giản của em thế này:
<html>
<head><title>bang cuu chuong</title></head>
<body>
   <form>
   <table border="1" width="100%">
   <tr >
      <td height="20" width="423" bgcolor="#CCCCFF" colspan=9>
      <p align="center">BANG CUU CHUONG</td>
   </tr>
   <tr>

         <?
         for ($i=1; $i<=9; $i++)
      {   echo "<tr >";      
            for ($j=2; $j<=10; $j++)
            { echo "<td border=0>";
              echo "$j x $i = ".($i*$j)."&nbsp";
            echo "</td>";}
          echo "</tr>";
        }
      ?>      
   </tr>
</table>

   </form>
   </body>



</html>
và khi chạy với firefox thì lại ra thế này

"; for ($j=2; $j<=10; $j++) { echo "";} echo ""; } ?>
với table 1 dòng là bảng cửu chương, 1 dòng là "; echo "$j x $i = ".($i*$j)." "; echo ".
vậy đó mấy anh chị ah, tình trạng là thế đó. giúp em với nha.
em xin cám ơn nhiều ha.
Logged
doangia
Administrator
PHP Intermediate
*****
Posts: 1097

Hữu Tâm Ắt Thành Tựu


Xem hồ sơ WWW Email
« Trả lời #11 on: May 11, 2010, 02:08:05 AM »

Cái này do PHP không được cấu hình để sử dụng dạng short tag. Cách khắc phục : dùng full tag <?php thay cho <?


Logged

Cần Thơ Gạo Trắng Nước Trong
Đến Chơi Mang Dép Chân Không Đi Về ...
lamnguyenpy
PHP Starter
*
Posts: 4


Xem hồ sơ
« Trả lời #12 on: May 11, 2010, 07:10:59 AM »

em thử rồi mà nó vẫn vậy ah. Còn cách nào khác không ah. mấy ngày nay loay hoay với nó hoài mà không biết đường gỡ rối gí hết.
Logged
cudenweb
PHP Intermediate
*
Posts: 116


Là cái số... nếu không được thì... hẹn kiếp sau.


Xem hồ sơ WWW
« Trả lời #13 on: May 12, 2010, 07:46:57 AM »

Test rồi...
Với code cũ thì bị thật, nhưng sau khi làm theo bác Đoàn thì ổn cả.
Tuy nhiên.... đáng lý phải sai cái thẻ <tr> chứ nhỉ?
Dù sao giờ cũng thấy sợ sợ mấy cái table rồi, hic...  Cry
Logged

Muốn biết nhân đời trước - Xem hưởng quả đời này - Muốn biết quả tương lai - Xét nhân gieo hiện tại - Người mà tâm chân chánh - Mọi người hướng thiện theo - Việc làm hợp lý lẽ - Khắp nơi được an vui - Người mà hư tâm tà - Tham sân dần phát triển - Làm việc mà tùy tiện - Tự rước họa vào thân.
lamnguyenpy
PHP Starter
*
Posts: 4


Xem hồ sơ
« Trả lời #14 on: May 12, 2010, 08:27:03 AM »

Em cũng sửa được rồi, em cảm ơn mấy anh chị nhiều nha. Em còn nhờ mấy anh chị ở diễn đàn giúp đỡ nhiều. Tất cả vì cộng đồng nguồn mở!!!! Cố lên anh em ơi!!!
Logged
Trang: [1] 2
  In  
 
Chuyển sang:  

Powered by SMF 1.1.15 | SMF © 2006-2007, Simple Machines . Modified by PHPVN Members