Thứ Ba, 29 tháng 5, 2012

Một vài địa chỉ mua khung tranh , ảnh ở tp HCM

1. đường Trần Phú P.4 Quận 5 khúc gần Trung Tâm cước của Bưu Điện

2. Thế Giới Khung Tranh, 413 Điện Biên Phủ, Q3

3. đường Nguyễn Văn Cừ, kế bên Nhà sách hoặc đường Trần Phú, từ ngã tư Lê Hồng Phong và Trần Phú, dọc xuống bùng binh Minh Khai

4. Đoạn giữa Võ Văn Tần - Điện Biện Phủ
112 Cao Thắng, quận 3, thành phố Hồ Chí Minh, Việt Nam

Chủ Nhật, 27 tháng 5, 2012

Nếu bạn yêu một cô gái có nhóm máu O

Đọc qua bài viết để hiểu thêm về người ấy nào :

I . Khởi động nào :

Con gái nhóm máu O nhà mình thì hiền, nhưng có vẻ không được dịu dàng và uyển chuyển lắm. Nét yểu điệu là sự khó tìm nhất ở các O nữ. Yêu cầu chúng mình nhẹ nhàng, thướt tha còn khó hơn là bắt chúng mình lên trời. Thỉnh thoảng mình lại tự thấy chúng mình cứ bành bạch và quàng quạc như vịt vậy.
Phần nữ tính chúng mình thể hiện ra ngoài không nhiều (hoặc không thể hiện), nhưng hãy để ý một chút, về bản chất, trong tâm hồn thì thực sự - cực kỳ nữ tính: nhạy cảm, dễ xúc động, dễ mềm lòng, dễ thương người... và dễ khóc...
Đặc biệt rất thích nữ công gia chánh. Dù bề ngoài hơi vụng về nhưng nấu ăn, may vá hay đan lát O nữ nhà mình có thể đều có thể học và làm tốt.

O những con người thường sống thiên về nội tâm hơn.
Luôn có điều gì đó đằng sau mỗi O-ers mà nhiều người chưa hiểu được. Bề ngoài có thể rất vui vẻ nhưng trong lòng họ lại có rất nhiều suy nghĩ mà người khác không biết. O-ers sống tình cảm nhưng họ lại khó có thể bộc lộ cảm xúc này ra. Yêu thương của họ là kiểu thầm lặng quan tâm, cảm thấy ngại khi phải bộc lộ bằng lời.

Sự tưng tửng hòa đồng thường thấy của O có thể làm một số người tưởng chừng hiểu O rất nhiều nhưng thực sự hiếm có người nào có thể hiểu thấu được tâm tư của O. O có rất dễ để kết "bạn" nhưng để là "bạn thân" đủ để giãi bày tâm sự thì rất ít người.

Tình yêu của nhóm máu này luôn rõ ràng, minh bạch. Khi chia tay với tình yêu cũ, họ sẽ không nảy sinh bất cứ tình cảm nào nữa. Mặc dù họ vẫn còn chút ký ức về tình yêu đã qua nhưng tuyệt đối sẽ không tìm về quá khứ ấy nữa. Họ luôn lạc quan nhìn về phía trước, không hối hận chính là thái độ sống của nhóm máu O. Sau khi trải qua nỗi đau chia tay, người có nhóm máu O vẫn dũng cảm để đối mặt với cuộc sống mới.

Xét ở góc độ nào đó, người có nhóm máu O này luôn lạnh lùng với người yêu cũ, cho dù đã yêu nhau thế nào nhưng khi kết thúc tình cảm, cả hai bên đều rất khó để giữ mối quan hệ bạn bè. Không liên lạc cũng không có bất cứ sự hỏi thăm nào chính là thái độ của người nhóm máu O đối với tình cảm cũ. Cho dù bạn đi tìm, họ cũng giữ một khoảng cách nhất định. Nhưng điều đó không có nghĩa là người có nhóm máu O tuyệt tình mà họ muốn cuộc sống của mọi người được tốt hơn nên mới có thái độ lạnh lùng như thế.

-Với O, không gì tuyệt đối và O luôn muốn phá vỡ sự tuyệt đối điều gì đó.

- O khi đã tin tưởng thì luôn dành hết niềm tin cho điều đó nhưng mất niềm tin cũng rất nhanh. 
- Khi bạn đã thật sự bước vào trái tim O, sẽ là rất khó để bạn có thể xóa tan hình bóng mình hoàn toàn trong nó. O sẽ nhớ tận sâu trong tim.

- Và cũng như thế, khi bạn đã thật sự rời khỏi trái tim O, sẽ là rất khó để bạn có thể bước vào lần nữa.
O sẽ quên bạn sạch sẽ và lạnh lùng mãi mãi.


II . Note :
 
1. O nhiều lúc rất 3 phải. Không phải O không biết theo ai,mà O cũng chả biết theo thế nào. Và trong mọi cuộc chiến, O luôn chọn cách sống trung lập nhưng vẫn luôn bày tỏ quan điểm rõ ràng.

2. O thấy ai im lặng thì kiểu gì cũng bắt đối phương, nói ra mới thôi. Nhưng bản thân có khi dùng xà beng cũng không cạy nổi miệng.

3. O có lối sống " 1 mình 1 kiểu", ai thích thì chơi, không thích cứ việc goodbye :)).Và O với tính thẳng thắn của mình thà để mất lòng còn hơn là sống trong giả dối. Nói dối O sẽ thấy bứt rứt không thôi.

4. Chơi với O, đừng giả tạo. Không O giả tạo lại đấy. Nhìn cái miệng toe toét thế kia, không biết O đang nghĩ gì đâu đấy :-".

5. Ở O luôn có kiểu chống đối. Rất thích chống đối và cách chống đối rất kute, rất con nít và nhìn không thể nhịn cười được. Còn khi chống đối thực sự 1 mất 1 còn thì thực sự rất đáng sợ. O sẵn sàng chiến đấu đến không còn mảnh giáp nhưng còn sức là còn oánh :)).

6. Nếu B mang chủ nghĩa cá nhân nhiều thì O mang chủ nghĩa cộng đồng. Tính cộng đồng của O cực cao, ở đâu O cũng có thể vào nói chuyện như chuyện của mình dù chả hiểu đang nói cái gì.

7. O đôi lúc khi thích hành động thì sẽ bắt chước nhưng bắt chước hoài không được. Kiểu người ta búng 1 phát là vào rổ thì O kiên trì, O rất kiên trì búng búng búng nhưng mãi không được. Và O sẽ cáu lắm nếu làm không được.

8. Khi O không liên lạc được với ai, O sẽ để trong đầu mình cả đống câu hỏi về người đó và lo lắng, lăn tăn liệu mình có làm gì sai, người đó có làm sao ...v...v..

9 .O luôn có thái độ nhân nhượng và khoan dung ngay cả với kẻ thù của mình.

10. Với O im lặng không chỉ là là sự tức giận tột cùng mà có khi là sự khinh thường không nói bằng lời.1 người hay nói như O mà im lặng là không đùa được >:)


Note 2 :
1. O là những người tự tin và mang bầu nhiệt huyết ngút trời. O chính là người truyền năng lượng và sức mạnh cho người khác.

2. O có tinh thần quật khởi vô cùng. O giống như các chiến binh vậy. Họ là những người không ngại khổ, ngại khó, sẵn sàng xông pha và chiến đấu.

3. O cũng là những người mang tham vọng lớn và hoài bão. Họ có thể sống hết mình cho những lý tưởng. Với O, mọi thứ đều có thể đạt được nếu có sự quyết tâm và ý chí kiên cường.

4. O sống khá vui vẻ, chan hòa nhưng cũng dễ xúc động. O rất nhạy cảm và cảm xúc có thể theo thế mà dẫn tới vui hay buồn rất nhanh.

5. O rất dễ thoát khỏi nghịch cảnh nhanh chóng, chỉ là lúc nào O muốn thôi :-"

6. O trong tình yêu là người khá cầu toàn trong tình yêu. O thà ế chứ không chấp nhận 1 tình yêu gượng ép. O thà chấp nhận buông tay chứ không muốn níu giữ sự thương hại.

7. Tình yêu của O giống như nồi súp với đầy đủ gia vị : hết lòng, tận tâm, cuồng nhiệt, nhiệt tình và 1 tình yêu sẵn sàng hi sinh cho người mình yêu. Nhưng chỉ cần phản bội O, O sẵn sàng lạnh lùng quay lưng. Không níu kéo !

8. O buông tay nhưng luôn nặng tình cảm nên dễ bị ràng buộc, khó chấm dứt trong 1 thời gian ngắn. Với O, không có sự tàn nhẫn và vô tình. Có chăng, chỉ là bề ngoài của O.


9. O là con người của những đam mê và ý tưởng không ngừng. Ở O, ý tưởng không bao giờ dừng, O có thể thức thâu đêm ngồi vẽ ý tưởng và phát triển nó.

10. O là người hay che giấu cảm xúc. Những điều O nói chưa chắc đã là điều O nghĩ, mà O chỉ dành nó cho riêng mình hoặc chia sẻ với ai đó thân thuộc nhất mà thôi.

O là con người tình cảm , vì thế O rất đáng để trân trọng và yêu thương ♥ 


Note 3 :  
1. O không cần sự thương hại, cũng không cần ai phải giả tạo cho mình sự quan tâm giả tạo. Nếu yêu O thì yêu bằng cả con tim, không đừng làm tổn thương nó. Nó lâu và khó lành lắm.

2. O sống ồn ào nhưng tĩnh vô cùng. Bề ngoài O là người sôi nổi, vui vẻ, đầy tính hướng ngoại nhưng bên trong O là cả 1 thế giới đầy phức tạp. Có lẽ chính O cũng không hiểu nổi cảm xúc của mình.

3. O là người có thể hi sinh vì bạn bè nhưng ai phản O, O cũng sẵn sàng đáp trả.

4. O sống nặng tình nghĩa nên luôn bị chữ " tình" đè bẹp. Làm gì O cũng nghĩ cho người khác.

5. O giống như trái bom nổ chậm. Chỉ cần chọc không đúng lúc, không đúng chỗ là nó bùng luôn. Nhưng O không bao giờ thù hận hay ghét bỏ được ai cả.

6. O khi cáu ai đó, sẽ phải giải thỏa bằng sạch, không ấm ức, không khó chịu vô cùng, và người nghe lĩnh đủ =)).

7. O nhìn có vẻ hay để ý nhưng lại khá dễ dàng bỏ qua lỗi lầm người khác vì O sống khá hiền hòa và tốt bụng. O chỉ nổi sung khi cần thiết và vượt qua chịu đựng O mà thôi.

8. O sống khá bản lĩnh và biết cách chấp nhận cuộc sống. Họ có thể chọn dừng lại 1 thời gian để chiêm nghiệm mọi thứ trước khi làm tiếp bước tiếp theo.

9.O có khả năng kết nối mọi người lại với nhau.

10. O không bao giờ hành động theo cảm tính, mà O thường suy nghĩ theo nhiều chiều. O thường đưa ra quyết định cuối cùng sau nhiều cuộc thăm dò.

Không mâu thuẫn không phải là O ;) ♥
  

 
III. O cứng đầu, bướng bỉnh.

1. O đã nhất định làm gì thì phải làm kì được, người ngoài nói gì cũng không xi nhê với O. Ta làm là việc của ta.

2. Chơi với O, càng rắn với O, O càng rắn lại cho biết tay.

3.Học với O, khi làm bài O sẽ luôn tìm cách bảo vệ cho ý kiến về bài vở của mình.

4. Độ cứng của O phải so với đá tảng cỡ bự. Muốn đập tan độ cứng đầu của O phải linh hoạt, mềmmỏng và phải thật.

5. O Khi la mắng O, có khi O vâng vâng dạ dạ nhưng rồi đâu lại vào đấy. O vẫn lẳng lặng và âm thầm làm theo suy nghĩ của mình.

6. Trong tình yêu, cứng đầu với O là không xong. Và yêu O thì cần yêu luôn cả sự cố chấp, cứng đầu của O. Đừng bắt O bỏ nó, O sẽ bỏ bạn trước đó :)

7. Cãi nhau với O, bạn chỉ có thua. Bạn có cãi nữa, thì độ cãi của O càng tăng cao và O sẽ cãi đến khi bạn giương cờ trắng thì thôi. O là chuyên gia cãi lí vs lý luận mà ;).

8. Trong tình yêu, O sẽ luôn cứng đầu bảo vệ cái Tôi, chính kiến của mình. Đừng bắt O phải rập khuôn theo 1 khuôn mẫu nào bạn muốn, O sẽ cho bạn nghe " danh ca vọng cổ" hoài luôn =)). O sẽ luôn là O mà thôi.



IV. NHƯỢC ĐIỂM CỦA O


1. Cứng đầu, ngang ngạnh.

2. Lời nói đi trước suy nghĩ.

3. Quá tham công tiếc việc.

4. Tùy hứng.

5. Không giỏi bộc lộ tình cảm.

6. Cả thèm chóng chán.

7. Đôi khi hoài niệm quá khứ.

8. Nói nhiều.

9. Bốc đồng, nóng tính quá.

10. Không giỏi nói khéo.


Tập 2 :
1. Thất thường

2. Rất dễ mềm lòng

3. Tin người, nhẹ dạ

4. Ngoài lạnh trong nóng.

5. Cả nể, ngại từ chối.

6. Khó mở lòng.

7. Hay chú ý đến những điều nhỏ nhặt

8. Dễ nổi khùng.

9. Dễ đau lòng bởi chuyện tình cảm.

10. Luôn tạo cho bản thân 1 vỏ bọc .
 


V . MỨC ĐỘ LƯỜI CỦA O

1. Làm việc tùy hứng, nước đến chân mới nhảy, thậm chí có khi đến cổ mới nhảy =))

2. Mùa đông, đã lên giường là chỉ muốn ngủ, chẳng muốn xuống.

3. Khi đã yên vị chỗ nào đó, chỉ muốn ngồi yên một chỗ, ngại di chuyển.

4. Khi đang ngủ ngon bị dựng dậy thì mãi mới dậy, có khi phải gọi nhiều lần mới mở mắt bò dậy.

5. Đồng hồ reo, tắt đi, tự nhủ với bản thân, ngủ thêm tí nữa thôi, cuối cùng ngủ luôn :))

6. Gặp lại bài cũ, y hệt bài đã từng làm, có khi lôi bài cũ ra chép, đỡ nghĩ nhiều :”)

7. Học hay làm việc một lúc thấy mệt, coi phim tí đã, đọc truyện tí đã, máy tính tí rồi học tiếp :)

8. Đọc truyện có thể đọc bao lâu không thấy mỏi mắt, có thể đọc liền tù tì nhưng đọc sách tí cái đã gục xuống

9. Đang học thấy buồn ngủ, lên giường bảo ngủ chút thôi, cuối cùng ngủ luôn đến sáng.

10. Tự bảo với bản thân, phải chăm chỉ, nhưng rồi lại tự nhủ, lười nốt ngày hôm nay thôi, rồi mai chăm =))



VI . O SỐNG ĐỀ PHÒNG, CÓ VỎ BỌC

1. Có cảm giác không nên nói hết những điều mình nghĩ.

2. Sợ tổn thương, tạo cho mình vỏ bọc.

3. Không muốn người khác lo lắng, nên tự bảo vệ chính mình.

4. Không dám tin tưởng quá nhiều.

5. Sống với phương châm: tự túc là hạnh phúc, nên đôi khi không bộc lộ nhiều, chỉ tự mình làm việc mình.

6. Tùy từng người mà có cách biểu hiện cảm xúc khác nhau, có cái gọi là những con người khác nhau bên trong O.

7. Càng bị tổn thương nhiều, vỏ bọc càng dày. Nhưng khi đã yêu thương ai, bạn sẽ thấy, O chẳng giấu bạn điều gì.
 


VII . NHỮNG ĐIỀU TRÁI NGƯỢC CỦA O

1. O ghét sự ràng buộc, yêu sự tự do nhưng lại có tính sở hữu cực cao.

2. O ghét sự sai hẹn, nhưng lại hay cao su trong giờ giấc.

3. O ghét sự cứng đầu và ngang ngược, ghét người khác phản đối ý kiến của mình, nhưng lại cứng đầu ương bướng vô cùng.

4. O ghét người khác bỏ quên mình, không quan tâm đến mình, nhưng đôi lúc lại thờ ơ, bàng quan đến vô cảm.

5. O ghét bị làm phiền, nhưng đôi khi O lại nói nhiều kinh khủng, khiến người đối diện đau đầu.

6. O ghét những kẻ hay phức tạp hóa vấn đề, lúc nào cũng bé xé ra to, nhưng O lại là kẻ suy nghĩ quá nhiều.

7. O ghét sự khuôn phép, ghét sự bó buộc, nhưng O lại là kẻ yêu sự hoàn hảo đến mức tuyệt đối, và trọng trách nhiệm kinh khủng.

8. O ghét những kẻ hay soi mói, xét nét bản thân, nhưng lại hay tò mò, và thích soi người khác :”)

9. O ghét bản thân bị coi thường, nhưng đôi khi, O lại vì cái sĩ diện, cái tôi cực lớn của bản thân mà làm người khác cảm thấy bị tổn thương vì bị coi thường.

10. O ghét bạn bè giấu giếm nỗi đau, không chịu chia sẻ, nhưng đôi khi, O lại làm bạn bè cuống lên vì chính sự khó hiểu và sự giữ chặt nỗi đau của mình. Tất cả chỉ vì O sợ sẽ làm người khác lo lắng.

Vậy đấy, đôi khi, O thật mâu thuẫn. Và có nhiều lúc, O đã tự ghét chính bản thân mình.


VIII. O THẤT THƯỜNG

1. Có thể sáng rất vui, nhưng trưa đã ủ dột, tối lại phởn bình thường.

2. Thay đổi tâm trạng nhanh, đơn giản chỉ nghe một bài hát buồn cũng có thể buồn, đơn giản chỉ vì 1 câu nói của ai đó cũng có thể buồn, hoặc đơn giản có thể chỉ đọc một câu chuyện buồn cũng có thể kéo tâm trạng xuống không phanh.

3. Đang buồn, nghe được tin vui có thể lên tinh thần nhanh chóng, hoặc chỉ cần nghe được lời động viên từ một ai đó quan trọng, hoặc giản dị hơn là sự hạnh phúc hay niềm vui của ai đó mà O yêu thương.

4. Thời tiết cũng có thể ảnh hưởng đến tâm trạng của O.

5. Đang nói chuyện vui vẻ, có ai đó O ghét hoặc có ai đó nói câu gì đó động vào lòng tự ái, tự trọng làm tổn thương O, O sẽ lạnh lùng rời cuộc nói chuyện hoặc tâm trạng sẽ tối lại ngay.

6. Sự chuyển biến giữa buồn sang vui và ngược lại nhiều lúc diễn ra rất nhanh, có khi chính O còn không nhận ra.

7. Tâm trạng thay đổi nhanh, bất thường, khó lường trước và có thể khi nóng lên thì bùng phát bất cứ lúc nào, như một ngọn núi lửa chỉ chực phun trào.
 


IX. SỰ KHÁC BIỆT GIỮA YÊU VÀ GHÉT ♥

1.
Khi O yêu thương bạn, O có thể vì bạn mà làm rất nhiều việc, có thể vì bạn mà đón nhận nhiều thứ của bạn, cả tốt lẫn xấu, dù không thích, nhưng vì đó là bạn, nên O không hối hận.
Khi O căm ghét bạn, O có thể vì sự căm ghét đó mà bỏ đi rất nhiều thứ, kể cả những thứ O đã từng nghĩ sẽ không bao giờ buông tay. Trong đó, có cả bạn. Và, cũng tuyệt đối quay đầu không hối hận.

2.
Khi O yêu thương bạn, O sẽ bảo vệ bạn, bất chấp cả bản thân mình.
Khi O căm ghét bạn, O sẽ làm mọi thứ khiến bạn hối hận.

3.
Khi O yêu thương bạn, O sẽ chia sẻ mọi thứ và lắng nghe những tâm sự của bạn, vô điều kiện.
Khi O căm ghét bạn, với O, bạn vô hình. Sự quan tâm, chia sẻ của O không dành cho bạn. Sự lo lắng, tâm sự của bạn không thuộc phạm vi quan tâm của O.

4.
Khi O yêu thương bạn, O sẽ dõi theo bạn, mọi lúc, mọi nơi, để khi nào bạn cần sự giúp đỡ, O sẽ xuất hiện.
Khi O căm ghét bạn, O sẽ dõi theo bạn, mọi lúc, mọi nơi, để xem bạn ngã khi nào và đau ra sao.

5.
Khi O yêu thương bạn, O sẽ rất vị tha, sẽ vô cùng mềm lòng và sẽ giúp bạn luôn luôn.
Khi O căm ghét bạn, O sẽ vô cùng khắc nghiệt, vô cùng cứng đầu, và sẽ không có khái niệm giúp bạn.
 

6.
Khi O yêu thương bạn, bạn ghét O, O sẽ lo lắng và làm mọi cách để tìm lý do, và sẽ tìm cách để mọi thứ trở lại như xưa.
Khi O căm ghét bạn, bạn ghét O, tùy thôi, muốn ghét sao thì ghét, không quan tâm.

7.
Khi O yêu thương bạn, khi có người khác hại bạn, O sẽ liều mình với kẻ đó, và tìm mọi cách bảo vệ bạn.
Khi O căm ghét bạn, khi có người khác hại bạn, O sẽ lặng lẽ dõi theo, và không động tĩnh.

8.
Khi O yêu thương bạn, khi bạn sai lầm, O sẽ ngăn cản, bằng mọi giá, kể cả khiến bạn ghét, O cũng sẽ làm.
Khi O căm ghét bạn, khi bạn sai lầm, O sẽ không nói, thậm chí, nếu thù hận sâu, O còn có thể sẽ khiến bạn sai càng thêm sai.

9.
Khi O yêu thương bạn, O hiểu rằng, bạn là một phần quan trọng của O, và O trân trọng.
Khi O căm ghét bạn, O hiểu rằng, bạn là một phần tổn thương của O, và O thù ghét.

10. Kết.
O yêu ghét rõ ràng. O không đơn giản và chưa bao giờ đơn giản cả. O đã yêu thương ai thì sẽ yêu thương tận lòng, hết lòng, hết sức vì người đó, thậm chí, có thể bất chấp cả bản thân. Nhưng khi O đã thù ghét ai thì thù cho đến tận cuối cùng. Có thể có người nói O thù dai, tàn nhẫn, có người nói O không quân tử, nhưng đừng nhầm lẫn, O không ném đá sau lưng, O không tiểu nhân. O chỉ cho họ thấy rằng khiến O căm ghét thì sẽ có kết quả như nào thôi. Vì vậy, đừng để O phải ghét, nếu không, bạn sẽ hối hận đấy ;)

P/S: Căm ghét ở đây khác hoàn toàn với giận dỗi thông thường. Nó ở mức độ cao nhất của sự ghét.
Vì thế, đừng vội hiểu sai stt :D
 

Thứ Hai, 21 tháng 5, 2012

Using MarkerImage in Maps Javascript API v3

When creating custom markers, you need to supply two images, the icon and the shadow. While you can supply a simple URL for each property, using MarkerImage allows you more flexibility and improves performance.

1. Creating a simple image:

The simplest marker is one made of individual icon and shadow images, with the anchor point (The point used to position the marker) located in the middle of the bottom edge of the image, like the standard marker using by the API.
In this situation, you only need to speficy the image URL such as:

var icon = new google.maps.MarkerImage("http://domain/path/image.png");

2. Specifying an anchor point

Depending of the shape of the marker, you may not want the middle of the bottom edge to be used as the anchor point. For example, in this sample, the anchor point of the beach flag is at the bottom left corner.
In those situation, you need to specify the anchor point of the image as the fourth parameter. This is a value of type Point, relative to the top left corner of the image with positive X going right and positive Y going down.
For example, if the image "beach_flag.png" is 20*32 pixels, we would use:

var icon = new google.maps.MarkerImage("http://domain/path/beach_flag.png", null, null, new google.maps.Point(0, 32));


3. Resizing the image

If you need to display the image larger or smaller than its original size, supply the scaledImage parameter:

var icon = new google.maps.MarkerImage("http://domain/path/image.png", null, null, null, new google.maps.Size(64, 64));

Note that if you use both size and anchor, the anchor value needs to be specified after scaling.
Combining the two previous examples, we would have:

var icon = new google.maps.MarkerImage("http://domain/path/beach_flag.png", null, null, new google.maps.Point(0, 64), new google.maps.Size(40, 64));

Note the change to the anchor from 0, 32 to 0, 64.

4. Using a sprite image

One simple way to imrove the performance of your website is to use sprite images. It means using a single image that contains many of the images you need of the site then using a section of it as required. The browser only makes a single call to download the image where before it would have made many.
To create a MarkerImage from a sprite image, you need to specify the origin and size of the section of the image you want to use to create the icon.

var icon = new google.maps.MarkerImage("http://domain/path/sprite.png", new google.maps.Size(12, 20), new google.maps.Point(100, 34));

You can, if you need, also provide the anchor point. The valoue of the anchor is relative to the section of the image, not the whole image.
For example, to use the center of the sprite image above as the anchor point, we would have:

var icon = new google.maps.MarkerImage("http://domain/path/sprite.png", new google.maps.Size(12, 20), new google.maps.Point(100, 34), new google.maps.Point(6, 10));

5. Using a scaled sprite image

To combine spriting and scaling, you need to supply a scaled section size as well as the scaled image size.
For example, if we want to display the section in the previous example of size 12*20 pixels, but display it 24*40 pixels, from an image originally 200*300 in size we would have:

var icon = new google.maps.MarkerImage("http://domain/path/sprite.png", new google.maps.Size(24, 40), new google.maps.Point(200, 68), new google.maps.Point(12, 20), new google.maps.Size(400, 600));

To display a scaled image or a scaled prite image, just supply the size, origin, anchor and scaledSize parameters with the scale factor applied.

6. Improving performance

They are two ways to improve the performance of MarkerImage:

- When you know the size of the image, specify it. If the size is not supplied, we make a call to download the image and read its size. While most browsers will cache the image and not download it again, this is not true in all cases and it may trigger the download of the image earlier than required, delaying the display of the map.
- When displaying multiple markers with the same shadow or icon, reuse the MarkerImage for all the markers:

var icon = new google.maps.MarkerImage(...);
for (...) {
var marker = new google.maps.Marker({
icon: icon,
...
};
}

Thứ Bảy, 19 tháng 5, 2012

Khắc phục lỗi Invalid URL khi vào facebook

Vào facebook thật đơn giản với addons :
vào fixefox -> tools -> addons , cài anonymoX là xong, nhanh gọn lẹ ^^

Thứ Ba, 15 tháng 5, 2012

Bình yên mỗi khi được bên anh

Em không nghĩ ngợi nhiều những điều người ta nói về anh: một người từng trải như anh thì thiếu gì phụ nữ, với lại tính chất công việc của anh lại có nhiều cơ hội để có thể vui chơi. Có thể là thoáng qua và đọng lại trong giây lát để em ngẫm nghĩ, buồn đôi chút nhưng nó không làm em nản lòng.

Từ: yu
Đã gửi: 15 Tháng Năm 2012 10:49 SA

Em không phải thích so sánh giữa anh và người ấy, nhưng anh biết không, ở bên anh, em mới thật sự cảm thấy rằng mình hạnh phúc. Có lẽ sẽ không công bằng với người ấy vì dù sao em từng yêu người ta một quãng thời gian quá dài, quãng thời gian mà nước mắt bằng với niềm hạnh phúc. Vì bằng tuổi nên suy nghĩ của người ấy còn trẻ con hay vì tình cảm người ấy dành cho em quá nhiều, nhiều đến nỗi em không thể nào tiếp nhận được. Nhiều khi lại cảm thấy bế tắc trong cuộc tình ấy.

Yêu không phải là cái tội nhưng có điều phải làm sao cho tình cảm hai người ngày càng gắn bó và lớn dần lên đúng không? Còn với người ấy thì tình cảm của em ngày một phai nhạt dần vì vốn tính cách và quan niệm sống quá gò bó, không lối thoát chính bản thân và kể cả người yêu.

Cũng không biết có là tình yêu hay đó là trách nhiệm mà em có thể ở bên người ta từng ấy năm. Quen người ấy, em luôn là người lắng nghe để chia sẻ. Khi quen anh thì toàn là những điều ngược lại. Em được anh chia sẻ những rắc rối trong cuộc sống hằng ngày và những khó khăn trong cuộc tình mình.

Cảm giác bình yên lắm khi ở bên nhau, hay vì anh đủ lớn và chững chạc để hiểu cuộc sống và mang lại cho em cảm giác bình yên đó hả anh? Mặc dù mình ít gặp nhau nhưng sao em vẫn cảm thấy đủ để tin tưởng vào anh.

Em không nghĩ ngợi nhiều những điều người ta nói về anh: một người từng trải như anh thì thiếu gì phụ nữ, với lại tính chất công việc của anh lại có nhiều cơ hội để có thể vui chơi. Có thể là thoáng qua và đọng lại trong giây lát để em ngẫm nghĩ, buồn đôi chút nhưng nó không làm em nản lòng. Em tin anh nhiều và niềm tin đó hy vọng sẽ được anh đáp trả một cách xứng đáng anh nhỉ!

Thời gian là liều thuốc hữu hiệu nhất cho em và anh lúc này phải không? Hạnh phúc có lúc ở quá gần nhưng lại không với tới, có những điều mình muốn nhưng lại chưa thể làm được. Chúng ta quen nhau không quá lâu để hiểu hết được nhau nhưng em vẫn luôn có niềm tin ở anh, tin vào một gia đình hạnh phúc ấy. Vì nhau mà cố gắng anh nhé!

Lần đầu tiên em sống thật với cảm xúc của chính mình và viết lên những dòng chữ này để gửi đến anh. Em rất thích câu nói: “Cám ơn đời mỗi sớm mai thức dậy cho ta ngày nữa để yêu thương”. Chúc anh luôn vui và công việc gặp nhiều may mắn nhé. Yêu anh thật nhiều.

Thứ Sáu, 11 tháng 5, 2012

50 sự thật về đàn ông phụ nữ nên biết

Bản chất của đàn ông thường ít nói, lầm lì, xù xì và gai góc. Khoa học cũng chỉ ra rằng, ở cùng một độ tuổi thì phụ nữ luôn có suy nghĩ chín chắn và tâm lý hơn.

Thực ra, không phải tâm hồn người đàn ông không có mà chỉ là khó để nhận ra. Bởi họ luôn vụng về khi muốn thể hiện ra cảm xúc của mình. Dưới đây là những suy nghĩ mà đàn ông thường không nói ra nhưng nếu bạn hiểu cho họ, thì chắc chắn rằng anh ấy sẽ không bao giờ muốn rời xa bạn.

• Nếu bạn muốn tình dục, cứ việc đề nghị. Đàn ông luôn là những kẻ hào phóng trong chuyện này.

• Đừng cáu khi anh ta từ chối giới thiệu cô bạn “không xinh xắn lắm” của bạn với cậu bạn đẹp trai của anh ta. Chả có gã đàn ông nào thích một cô nàng xấu xí cả.

• Đàn ông chỉ muốn lăn ra ngủ sau khi quan hệ. Không phải họ không tôn trọng bạn mà chỉ vì họ quá mệt thôi.

• Đa phần đàn ông không tin vào tâm linh và những điều mê tín.

• Chẳng có người đàn ông nào thích bị đem ra làm con tốt để bạn thỏa mãn sự hiếu thắng của mình trước mặt bạn bè.

• Đàn ông có xu hướng chiếm hữu với mối quan hệ mà anh ta nghiêm túc. Điều này thì họ nên thay đổi và học hỏi theo phái đẹp.

• Đàn ông thật sự không thích nhìn một cô gái phì phèo điếu thuốc.

• Đàn ông thích những cô gái biết tự lo cho bản thân.

• Đàn ông thường không khéo léo trong cách diễn tả, do vậy nếu không muốn nghe sự thật mất lòng, phụ nữ tốt nhất đừng hỏi điều gì cả.

• Khi kết thúc một cuộc khẩu chiến, những câu nói như “Tùy” hay “Thế nào cũng được” … Không có nghĩa là đàn ông đồng ý hay chấp nhận.

• Đừng bao giờ hy vọng người đàn ông của bạn sẽ tuôn ra những lời ngọt ngào như trên phim ảnh. Theo thống kê thì phải mười cặp đôi mới có một cặp là may mắn được như trên phim ảnh.

• Đàn ông thường ít chú ý đến trang phục. Họ cho rằng chỉ có mấy anh chàng người mẫu trên báo mới đủ kiên nhẫn mà khoác lên người hàng tá thứ lỉnh kỉnh.

• Nếu một gã đàn ông thích bạn, họ chỉ muốn là người duy nhất mà bạn sẽ nói chuyện cùng.

• Đàn ông sẵn sàng nhịn cả bữa trưa chỉ để mua cho bạn một bó hoa hồng.

• Khi yêu đàn ông giống một đứa trẻ, họ thích được quan tâm.
Đàn ông sẵn sàng làm điều gì chỉ để người yêu của họ hạnh phúc, chỉ cần bạn nói ra mà thôi. 

• Nếu bạn từng cắm sừng hay lừa dối gã đàn ông của mình, thì xin tạm biệt. Lòng tự trọng của đàn ông không cho phép họ tiếp tục nữa.

• Đàn ông sẵn sàng làm điều gì chỉ để người yêu của họ hạnh phúc, chỉ cần bạn nói ra mà thôi.

• Đàn ông đa cảm hơn là những gì phụ nữ nghĩ về họ. Khi thực sự yêu một ai đó, họ sẽ mất nhiều thời gian hơn phụ nữ để quên đi. Và cảm giác đó sẽ dằn vặt họ từng giây từng phút.

• Để có thể thu hút sự chú ý của bạn, đàn ông sẵn sàng làm những việc ngu ngốc nhất.

• Đàn ông không quá để ý đến những chuyện nhỏ nhặt. Do vậy đừng mong rằng chàng sẽ nhận ra những thay đổi nho nhỏ ở bạn ngay lập tức.

• Đàn ông lúc nào cũng nghĩ đến tình dục.

• Với sự bảo thủ thiên phú của mình, khi đàn ông đã nghĩ nó là không thể chấp nhận được thì mọi ý kiến đều không có tác dụng.

• Khi họ nói “cuộc chơi bắt đầu”, có nghĩa họ đang cố gắng trì hoãn vấn đề trong một cuộc nói chuyện nghiêm túc.

• Đàn ông nghĩ những người phụ nữ biết nấu ăn sẽ quyến rũ hơn.

• Đừng nghĩ đến việc cố gắng kiểm soát một chàng trai, nhưng nếu họ là người kiểm soát thì được.

• Trò chơi điện tử giúp phát triển các kỹ năng trên ngón tay của một người đàn ông. Nó còn khiến họ chơi ngày càng nhiều hơn nữa.

• Phê bình khả năng lái xe của họ là điều không thể chấp nhận được.

• Đi chơi đêm là một thứ gì đó thiêng liêng với đàn ông. Đừng tìm cách chất vấn họ đã làm gì khi đó nếu bạn không muốn hối hận.

• Bạn có thể tin hoặc không, nhưng đàn ông không bao giờ có ý muốn làm tổn thương bạn.

• Đàn ông có thể tán tỉnh nhiều cô gái, nhưng trước khi đi ngủ, họ chỉ nghĩ về mộtngười mà họ thực sự quan tâm.

• Chả có gã nào thích nghe bạn kể chuyện về người yêu cũ của bạn đâu.

• Khi đàn ông kể với bạn về vấn đề của bản thân, bạn không cần phải đưa ra lời khuyên cho họ. Họ chỉ cần có người lắng nghe thôi.

• Đừng giận khi anh ý có thể khóc vì một bộ phim nói về thể thao, trong khi lại cười một cách khả ố khi cùng bạn xem một bộ phim tình cảm.

• Để lại những lời nhắn đại loại như “ Anh biết gì không? Hmm …. Thôi không quan trọng” sẽ khiến cho anh ta nghĩ ngợi cả ngày nhưng rốt cuộc điều mà họ nghĩ ra sẽ chả liên quan đến vấn đề bạn quan tâm đâu.

• Hành động rõ ràng nhất thể hiện hắn ta thích bạn là thường xuyên trêu ghẹo bạn.

• Khi yêu, đàn ông dành nhiều tình cảm hơn phụ nữ.

• Cho dù đàn ông cứ hay lải nhải về sự gợi cảm hay quyến rũ thì tính cách mới thực sự là thứ quyết định tình cảm của họ.

• Khi đàn ông nói họ đang phát điên vì một người phụ nữ, thì hãy tin vào điều đó. Họ ít khi hạ lòng tự trọng của mình để thú nhận một điều gì đó.

• Khi đàn ông nói chuyện một cách nghiêm túc, hãy lắng nghe họ. Nó không thường xuyên xảy ra đâu, nên nếu biết tận dụng bạn có thể sẽ biết rõ thêm điều gì đó.

• Đàn ông có nhiều vấn đề hơn là những gì bạn có thể thấy bằng mắt thường.

• Bạn thích thú khi được chàng mời đi ăn tối và trả tiền cho bạn phải không? Đàn ông cũng thích được như thế đây.

• Nếu bạn thấy ánh mắt của chàng tỏ vẻ lơ đễnh thì đó chỉ là vấn đề tự nhiên.

• Một chàng trai sẵn sàng lao tâm khổ tứ để có thể hiểu được suy nghĩ của một cô gái.

• Đàn ông không phải ai cũng ngu ngốc. Đừng vơ đũa cả nắm.

• Đàn ông thích một người phụ nữ biết suy nghĩ hơn là một cô gái chỉ biết diện váy ngắn.

• Một chàng trai sẵn sàng ngồi hàng tiếng đồng hồ để chơi điện tử hoặc đá bóng, cũng như phụ nữ thích đọc tiểu thuyết và đi làm đẹp.

• Nếu như đã thực sự yêu bạn, thì không cần biết là bao lâu, anh ta vẫn luôn mong bạn quay về.

• Không phải đàn ông không muốn làm cho người yêu của họ hạnh phúc, chỉ là vì họ không biết phải làm gì cả.

• Khi chấp nhận hy sinh giấc ngủ của mình để thức cùng bạn, đừng nghĩ rằng anh ta chỉ nhăm nhăm muốn quan hệ với bạn. Điều đó chứng tỏ anh ta yêu bạn hơn những gì bạn nghĩ.

Thứ Năm, 10 tháng 5, 2012

Quy tắc tâm linh của người Ấn Độ

1. Quy tắc đầu tiên: “Bất cứ người nào bạn gặp cũng đúng là người mà bạn cần gặp

Điều này có nghĩa rằng không ai xuất hiện trong cuộc đời chúng ta một cách tình cờ. Mỗi người xung quanh chúng ta, bất cứ ai chúng ta giao lưu, gặp gỡ đều đại diện cho một điều gì đó, có thể là để dạy chúng ta điều gì đó hoặc giúp chúng ta cải thiện tình hình hiện tại. Vì vậy, hãy tôn trọng và coi trọng những người mà chúng ta gặp gỡ!

2. Quy tắc thứ hai: “Bất cứ điều gì xảy thì đó chính là điều nên xảy ra

Không có điều gì tuyệt đối, không có điều gì chúng ta trải nghiệm lại nên khác đi cả. Thậm chí cả với những điều nhỏ nhặt ít quan trọng nhất.

Không có: “Nếu như tôi đã làm điều đó khác đi…, thì nó hẳn đã khác đi. “

Những gì đã xảy ra chính là những gì nên xảy ra và phải xảy ra giúp chúng ta có thêm bài học để tiến về phía trước. Bất kỳ tình huống nào trong cuộc đời mà chúng ta đối mặt đều tuyệt đối hoàn hảo, thậm chí cả khi nó thách thức sự hiểu biết và bản ngã của chúng ta.

3. Quy tắc thứ ba: “Trong mỗi khoảnh khắc, mọi sự đều bắt đầu vào đúng thời điểm

Mọi thứ bắt đầu vào đúng thời điểm, không sớm hơn hay muộn hơn.

Khi chúng ta sẵn sàng cho nó, cho điều gì đó mới mẻ trong cuộc đời mình, thì nó sẽ có đó, sẵn sàng để bắt đầu.

4. Quy tắc thứ tư: “Những gì đã qua, cho qua

Quy tắc này rất đơn giản. Khi điều gì đó trong cuộc sống của chúng ta kết thúc, thì có nghĩa là nó đã giúp ích xong cho sự tiến hoá của chúng ta. Đó là lý do tại sao, để làm phong phú thêm trải nghiệm của mình, tốt hơn hết là chúng ta hãy buông bỏ và tiếp tục cuộc hành trình.

Tôi nghĩ là không phải là tình cờ mà bạn đang đọc những dòng này.Nếu bài viết này đánh động tâm hồn bạn, đó là bởi vì bạn đáp ứng được những yêu cầu và hiểu rằng không một bông tuyết nào lại tình cờ rơi xuống sai chỗ cả.

Hãy đối xử tốt với chính bản thân bạn!
Hãy yêu thương với tất cả tâm hồn bạn!
Hãy luôn hạnh phúc

Chủ Nhật, 6 tháng 5, 2012

Căn bản lập trình web voi PHP - Bài 4(X) : PHP Căn Bản

X. "Headers Already Sent " : Thực trạng và giải pháp

Lỗi "Headers Already Sent " là 1 lỗi thông dụng đến khó tin, và tui đã nhận được rất rất nhiều câu hỏi về nó dạng như " Nó là cái gì ?, Sao lại như thế" , vì vậy tui quyết định đưa nó lên bàn mổ nhằm làm sáng tỏ vấn đề

Một HTTP response ( trả về ) thông thường bao gồm 2 phần là header( đầu) và content (nội dung), Phần header trong 1 HTTP response chỉ ra bản chất của response và  cách xử lý với chúng. Ví dụ, 1 response có chỉ ra "Location" trong header , cái này báo cho trình duyệt để tự động chuyển đến Url được chỉ ra trong header.Hoặc 1 response có "Content-type" trong header, trình duyệt sẽ xử lý nội dung theo loại nội dung :image xử khác , text xử khác, Flash xửa khác
Header cũng được sử dụng khi bạn làm việc với session, có thể bạn ko thấy rõ được điều này, nhưng trong những hàm về session của PHP nó đều dùng thông qua cookie. Vì thế ngay khi bạn dùng session bạn đã tạo ra 1 HTTP header. Hàm session_start() khởi tạo 1 tập cookie và vì thế nó gửi 1 HTTP header xuống trình duyệt.
Phần còn lại của HTTP response là nội dung (content), cái này chắc bạn nhìn thấy nó dễ dàng rồi. Phần này phải được gửi đi sau headers, và một khi nội dung đã được gửi đi thì sẽ ko có header nào có thể được gửi xuống trình duyệt nữa. Nội dung bao gồm các đoạn mã HTML hoặc bất cứ thứ gì được tạo ra trong script của bạn. Khi bạn gọi echo() bạn đã xuất nội dung xuống trình duyệt rồi đấy.

Thế thì liên quan gì đến lỗi "Headers Already Sent"? Lỗi này xuất hiện khi bạn cố gắng gửi 1 HTTP header xuống trình duyệt sau khi nội dung đã được gửi xuống. Trong một HTTP response đều này là phạm pháp , ko được phép bởi vì " gạo đã nấu thành cơm"  , trình duyệt đã xử lý xong phần nội dung được gửi xuống rồi, header ko còn tác dụng gì nữa cả .

Và như tớ đã nói ở trên, session_start() gửi header xuống client, hàm header() cũng gửi header xuống ... vì thế 2 thằng này là dễ gặp lỗi "Headers Already Sent" nhất nếu như đã gửi nội dung xuống trình duyệt trước khi gọi chúng.

Giải pháp cho vấn đề này đơn giản chỉ là : hãy chắc chắn rằng bạn không gửi bất cứ nội dung gì xuống trình duyệt trước khi gọi các hàm có làm việc với header.Nói thì như thế nhưng thực tế cũng khá khó khăn vì ... chúng ta là người Việt, chúng ta phải viết tiếng Việt trong code , chúng ta phải dùng Unicode ... và đa số các Editor PHP , khi bạn chọn encoding cho file là Utf-8 nó sẽ vô tư kèm theo cho bạn 3 kí tự ở đầu file gọi là BOM (byte order mark) ( dịch ra là gì thì tớ ko biết ), các kí tự này thuộc dạng vô hình nên chúng ta sẽ ko nhìn thấy chúng , nhưng máy tính thì thấy.... vì thế cho nên bạn có bỏ ra cả tháng trời để ngồi mò mẫm trong code xem có kí tự nào được xuất ra hay chưa thì cũng vô vọng . Cách đơn giản nhất là hãy chọn Utf-8 witthout BOM trong Editor của bạn .

Nhưng có một giải pháp khác an toàn nhàn nhã hơn là hãy giao tất cả những gì bạn xuất ra cho bộ đệm (output buffering ) nắm giữ, sau khi xử lý xong tất cả sẽ được cho vào đại pháo bắn 1 lần xuống trình duyệt ... không cần lo sau trước thứ tự gì nữa cả . Hãy thêm vào đầu code của bạn ob_start() và cuối code ob_end_flush(), bạn có thể vừa code vừa ngủ , để biết thêm về những hàm output buffering  hãy tìm đến PHP Manual .
 

Căn bản lập trình web voi PHP - Bài 4(IX) : PHP Căn Bản

IX. Sử dụng Session trong PHP

Trang web HTML thông thường sẽ ko thể truyền dữ liệu từ trang này sang trang khác. Nói 1 cách khác là : tất cả thông tin trở thành quên lãng khi một trang web mới được tải . Điều này gây khó khăn cho một số công việc như là mua hàng ( shopping carts) - những thứ cần thiết dữ liệu ( sản phẩm người dùng đã chọn) ghi nhớ từ trang này sang trang khác

Khái niệm về Sessions trong PHP

PHP session giải quyết vấn đề này bằng cách cho phép lưu trữ dữ liệu của người dùng trên server để sử dụng về sau ( như username, món hàng ...)Tuy nhiên những thông tin session này chỉ là tạm thời và thường bị xoá đi ngay khi người dùng rời khỏi trang web đã dùng session.
Chính vì tính tạm thời này mà nếu bứng dụng của bạn cần thiết lưu trữ dữ liệu 1 cách lâu dài , bạn hãy dùng các cách lưu trữ khác như là csdl Mysql

Session hoạt động bằng cách tạo 1 chuỗi unique (UID) cho từng vistore và chứa thông tin dựa trên ID đó. việc này sẽ giúp tránh tình trạng dữ liệu bị xung đột giữa các user
Lưu ý: Nếu bạn vẫn còn ít kinh nghiệm về việc dùng session trong ứng dụng thì ko nên dùng nó trên các website đòi hỏi bảo mật cao vì rất dễ gây ra các lỗ hổng bảo mật nguy hiểm
Bắt đầu với PHP Session
Việc đầu tiên trước khi bạn làm bất cứ việc gì với session là bạn phải chạy nó trước, và nó dc đặt ngay trên đầu trong code của bạn, trước khi HTML dc xuất ra

Dưới đây là 1 ví dụ đơn giản về việc tạo session trong PHP

PHP Code:
Code:
<?php
session_start
(); // start up your PHP session! ?>

đoạn mã ngắn trên sẽ đăng kí cho ng dùng 1 session ở trên Server, cho phép bạn lưu thông thông tin của ng dùng và đưa nó vào UID cho session của user đó

Lưu giá trị của session

Khi bạn muốn lưu trữ 1 thông tin nào đó ở session, dc dùng như 1 mảng kết hợp. đó là nơi bạn lưu và lấy dữ liệu ra. sau đây là 1 ví dụ đơn giản cho việc đơn giản này ^^

PHP Code:
Code:
<?php
session_start
(); $_SESSION['views'] = 1// lưu viewsecho "Pageviews = "$_SESSION['views']; //lấy views và hiện thị?>
output:
Pageviews = 1

trong ví dụ này, chúng ta đã học dc cách lưu trữ của biến session thông qua mảng kết hợp $_SESSION và cũng như cách lấy nó ra

Sử dụng SESSION

Bây giờ chúng ta đã biết cách lưu và lấy dử liệu từ biến $_SESSION, mọi chuyện thật dễ dàng phải ko , và tiếp theo ta sẽ tìm hiểu 1 vài hàm liên qua đến session.
Khi bạn tạo 1 biến và lưu nó vào 1 session, bạn có lẽ muốn dùng nó sau này, tuy nhiên, trước khi bạn dùng biến session đó, bạn nên kiểm tra nó đã dc khởi tạo hay chưa.

Thao tác này được thực hiện thông qua hàm isset, isset là 1 hàm kiểm tra bất kì biến nào và nó đã dc khởi tạo và gán giá trị hay chưa.

Qua nhưng ví dụ trên, chúng ta có thể tạo 1 bộ đếm đơn giản cho 1 trang bằng cách sử dùng isset để kiểm tra nó đa dc tạo hay chưa và gán giá trị cho nó. Đây là 1 ví dụ:

PHP Code:
Code:
<?php
session_start
();
if(isset(
$_SESSION['views']))
    
$_SESSION['views'] = $_SESSION['views']+ 1;
else
    
$_SESSION['views'] = 1;

echo 
"views = "$_SESSION['views']; ?>

Trong lần chạy đầu tiền của trangm câu lệnh If sẽ trả về false vì chưa có biến session [views] nào được tạo cả. tuy nhiên, khi bạn refresh lại trang đó, thì câu lệnh if sẽ trả về giá trị true và biến đếm counter sẽ tăng lên 1 đơn vị. và sẽ tăng cho mỗi lần chạy của trang đó lên 1.

Xóa và Hủy Session

Mặt dù dữ liệu trong session chỉ mang tính chất tạm thời và nó ko yêu cầu phải xóa sau khi sử dụng, nhưng có thể trong trường hợp nào đó bạn phải xóa dữ liệu của nó cho mục đích của bạn.
Hãy tưởng tượng bạn đang điều hành 1 doanh nghiệp online, và 1 thanh viên đang dùng website của bạn mua 1 món hàng. Thành viên đó đã hoàn tất việc mua hàng (phiên giao dịch) trên website, do đó , bạn phải xóa mọi thứ trong session sau khi việc này hoàn tất.

PHP Code:
Code:
<?php
session_start
();
if(isset(
$_SESSION['cart']))
    unset(
$_SESSION['cart']); ?>

Bạn cũng có thể hủy hoàn toàn các session bằng cách gọi hàng session_destroy

PHP Code:
Code:
<?php
session_start
(); session_destroy();?>

Destroy sẽ reset session của bạn, do đó không nên gọi hàm này trước khi bạn còn muốn thao tác lên dữ liệu chứa trong session đó. 

Căn bản lập trình web voi PHP - Bài 4(VIII) : PHP Căn Bản

VIII. Làm Việc Với CSDL MySQL

D. PHP & MYSQL

Bài viết này sẽ tập trung vào việc khai thác hệ quản trị CSDL miễn phí MySQL.

Các bước xây dựng chương trình có kết nối tới CSDL My SQL:

Thông thường, trong một ứng dụng có giao tiếp với CSDL, ta phải làm theo bốn trình tự sau:
Bước 1: Thiết lập kết nối tới CSDL.
Bước 2: Lựa chọn CSDL.
Bước 3: Tiến hành các truy vấn SQL, xử lý các kết quả trả về nếu có
Bước 4: Đóng kết nối tới CSDL.

Nếu như trong lập trình thông thường trên Windows sử dụng các chương trình điều khiển trung gian (ADO, ODBC...) để thực hiện kết nối và truy vấn, thì trong PHP, khi lập trình tương tác với CSDL, chúng ta thường sử dụng thông qua các hàm.

Chú ý: Trước khi sử dụng PHP để lập trình với MySQL, hãy sử dụng chương trình quản lý phpMyAdmin để tạo trước một CSDL, vài bảng cũng như người dùng... để tiện thực hành. Bài hướng dẫn sử dụng phpMyAdmin sẽ được trình bày sau.

Trong bài viết này, tôi sử dụng MySQL chạy trên nền máy chủ localhost, người sử dụng của CSDL này có username là mysql_user, mật khẩu là mysql_password

Thiết lập kêt nối tới MySQL.

Để kết nối tới MySQL, ta sử dụng hàm mysql_connect()
Cú pháp:
mysql_connect(host,tên_truy_cập,mật_khẩu);
trong đó:
host là chuỗi chứa tên (hoặc địa chỉ IP) của máy chủ cài đặt MySQL.
tên_truy_cập là chuỗi chứa tên truy cập hợp lệ của CSDL cần kết nối
mật_khẩu là chuỗi chứa mật khẩu tương ứng với tên truy cập
Ví dụ:
<?
mysql_connect ("localhost", "thu_mot_ti","thu_hai_ti");
?>
Khi kết nối tới MySQL thành công, hàm sẽ trả về giá trị là một số nguyên định danh của liên kết, ngược lại, hàm trả về giá trị false.
Ta có thể dùng hàm if để kiểm tra xem có kết nối được tới MySQL hay không:

<?php
    $link = mysql_connect("localhost", "mysql_user", "mysql_password");
    if (!$link)
     {
         echo "Không thể kết nối được tới CSDL MySQL";
     }
?>

Lựa chọn CSDL

Để lựa chọn một CSDL nào đó mà người sử dụng có tên là tên_truy_cập" có quyền sử dụng, ta dùng hàm mysql_select_db:
mysql_select_db (tên_CSDL);
Hàm này thường được dùng sau khi thiết lập kết nối bằng hàm mysql_connect. Hàm này trả về true nếu thành công, false nếu thất bại.
VD:
<?php
    $link = mysql_connect("localhost", "mysql_user", "mysql_password");
    if (!$link)
     {
         echo "Không thể kết nối được tới MySQL";
     }
    if (!mysql_select_db ("Forums"))
     {
         echo "Không thể lựa chọn được CSDL Forums";
     }
?>

Đóng kết nối tới CSDL:
Để đóng kết nối tới CSDL, ta dùng hàm mysql_close.
Hàm này có nhiệm vụ đóng kết nối tới CSDL có mã định danh được tạo ra bởi hàm mysql_connect().
Cú pháp: mysql_close(mã_định_danh_kết_nối).

Ví dụ:
<?php
    $link = mysql_connect("localhost", "mysql_user", "mysql_password");
    if (!$link)
     {
         echo "Không thể kết nối được tới MySQL";
     }
    mysql_close($link);
?>

Trong bài viết này, tôi sử dụng MySQL chạy trên nền máy chủ localhost, người sử dụng có username là mysql_user, mật khẩu là mysql_password.
CSDL có tên là CMXQ_Forum, trong đó có một bảng là CMXQ_Users để lưu thông tin về những thành viên của diễn đàn. Bảng CMXQ_Users có các trường sau:
User_ID: Autonumber.// mã số của người dùng
User_Name: Varchar [20] // tên truy cập của người dùng
User_Pass: Varchar[64] //mật khẩu của người dùng
User_IP: Varchar [15] //Địa chỉ IP của người dùng.
User_Post: Number // Số bài viết của người dùng.

Bây giờ tôi sẽ tiến hành một số thao tác thêm, sửa và xóa dữ liệu trên bảng đó. Xin xem lại bài Căn bản về SQL.
Để thực thi một câu lệnh SQL bất kỳ trong PHP tác động lên MySQL, ta dùng hàm mysql_query (chuỗi_câu_lệnh_SQL)

I. Thêm một bản ghi vào bảng.
Ví dụ tôi muốn chèn thêm một người sử dụng có User_Name là "CMXQ", User_Pass là "123456", User_Post=0 ta làm như sau:
<?
$sql = "INSERT INTO CMXQ_Users (User_Name, User_Pass) VALUES ("CMXQ","123456",0);
mysql_query ($sql);
?>

II. Xóa một bản ghi khỏi bảng.
Trong trường hợp này, ta sử dụng câu lệnh SQL DELETE FROM:
VD: tôi muốn xóa khỏi bảng CMXQ_Users tất cả những người có User_Name="CMXQ":
<?
$sql = "DELETE FROM CMXQ_Users WHERE User_Name='CMXQ'";
mysql_query ($sql);
?>

III. Sửa thông tin của bản ghi trong bảng.
Trong trường hợp này, tôi sử dụng cú pháp UPDATE:
VD: Tôi muốn cập nhật địa chỉ IP cho người có User_Name="CMXQ" với địa chỉ IP được lấy từ trình duyệt:
<?
$sql = "UPDATE CMXQ_Users SET User_IP ='" . $_SERVER['REMOTE_ADDR'] . "' Where User_Name='CMXQ'";
mysql_query ($sql);
?>
(Biến $_SERVER['REMOTE_ADDR'] chứa địa chỉ IP của trình duyệt. Xin xem lại ở bài trước)


Chúng ta đã biết cách dùng hàm mysql_query() để tiến hành các truy vấn sửa, thêm và xóa. Bài này tập trung vào việc ứng dụng PHP để lấy thông tin từ CSDL.

Qua những phần ở trên, chúng ta đã biết cách làm việc với các câu truy vấn SELECT. Bây giờ, kết hợp với hàm mysql_query() để lấy thông tin.

Cú pháp hàm mysql_query như sau:

mysql_query(câu lệnh sql).

VD: Để lấy tất cả các bản ghi trong bảng "Members", ta sẽ gọi hàm mysql_query() như sau:

<?
mysql_query ("Select * from Members")
?>

Vấn đề là khi thực hiện truy vấn này, dữ liệu sẽ được trả về dưới dạng một bảng. Ta sẽ tiến hành lấy từng dòng của bảng đó ra dưới dạng một mảng (sử dụng hàm mysql_fetch_array()), tiếp đó, việc xử lý các phần tử của mảng đó như thế nào là tùy ý các bạn.

Xem ví dụ sau:

<?php
    $result = mysql_query("SELECT id, name FROM mytable");
    while ($row = mysql_fetch_array($result, MYSQL_ASSOC))
    {
        printf ("ID: %s  Name: %s", $row["name"]);
    }

    mysql_free_result($result);
?>

Đoạn lệnh trên lặp duyệt qua bảng kết quả result, đối với mỗi dòng của bảng, hàm mysql_fetch_array() sẽ đảm nhiệm việc tách dòng đó rồi đưa vào một mảng có tên là $row. Mỗi phần tử của mảng này sẽ là giá trị của cột có tên tương ứng.

Như vậy, trước khi xác định dữ liệu cần lấy là gì, chúng ta phải thiết kế câu truy vấn SQL sao cho hợp lý và đảm bảo rằng truy vấn đó chỉ lấy ra những thông tin gì cần sử dụng. Nếu lấy ra nhiều quá sẽ gây quá tải hệ thống dẫn đến treo máy.

Sau khi đã có được câu truy vấn SQL, ta chỉ việc kết hợp với hàm mysql_query() để trả kết quả về dưới dạng một biến nào đó.

Phần tiếp theo, chúng ta sẽ dùng một hàm có tên là mysql_fetch_array () để lấy từng dòng dữ liệu ra để xử lý.

Hàm mysql_fetch_array có hai tham số:
- Tham số đầu tiên xác định biến nắm giữ kết quả trả về bởi hàm mysql_query()
- Tham số thứ hai xác định kiểu định danh trường:
+ MYSQL_ASSOC: Đưa ra một mảng với chỉ số của mảng là tên trường
+ MYSQL_NUM: Đưa ra một mảng với chỉ số của mảng là số thứ tự của trường được liệt kê trong câu truy vấn SQL
+ MYSQL_BOTH: Đưa ra một mảng với chỉ số kết hợp giữa hai loại trên

Thông thường, ta dùng MYSQL_ASSOC để sử dụng chỉ số bằng tên các trường.

Khi truy vấn CSDL MySQL, ta có thể sử dụng thêm một số hàm phụ trợ:
mysql_num_rows(biến kết quả): trả về số các dòng lấy được từ biến kết quả.

VD:

<?php
$link = mysql_connect("localhost", "mysql_user", "mysql_password");
mysql_select_db("database", $link);
$result = mysql_query("SELECT * FROM table1", $link);
$num_rows = mysql_num_rows($result);
echo "Có $num_rows bản ghi được tìm thấy\n";
?>

Tương tự ta có:
mysql_num_fields (biến kết quả): Trả về số trường (cột) trong tập kết quả

mysql_affected_rows (): Trả về số bản ghi bị ảnh hưởng bởi các câu lệnh SQL INSERT, UPDATE, DELETE.

Ví dụ:

<?php
    mysql_pconnect("localhost", "mysql_user", "mysql_password") or
        die ("Could not connect");
    mysql_query("DELETE FROM mytable WHERE id < 10");
    printf ("Số bản ghi bị xóa: %d\n", mysql_affected_rows());
?>

mysql_data_seek ( nguồn kết quả, dòng cần truy cập): Hàm này chuyển con trỏ dòng của nguồn kết quả đến một dòng nào đó. Dòng đầu tiên trong bảng kết quả được đánh số là 0, dòng cuối cùng chính là mysql_num_rows()-1. Hàm trả về TRUE nếu thành công, ngược lại là FALSE

Chú ý rằng hàm này chỉ sử dụng cùng với hàm mysql_query
Ví dụ:
<?php
    $link = mysql_pconnect("localhost", "mysql_user", "mysql_password")
        or die("Could not connect");

    mysql_select_db("samp_db")
        or exit("Could not select database");

    $query = "SELECT last_name, first_name FROM friends";
    $result = mysql_query($query)
        or die("Query failed");

    /* fetch rows in reverse order */
    for ($i = mysql_num_rows($result) - 1; $i >= 0; $i--) {
        if (!mysql_data_seek($result, $i)) {
            echo "Cannot seek to row $i\n";
            continue;
        }

        if(!($row = mysql_fetch_object($result)))
            continue;

        echo "$row->last_name $row->first_name<br />\n";
    }

    mysql_free_result($result);
?>

Phân trang trong ứng dụng PHP/MySQL 

Khi truy vấn dữ liệu mà nhận được một danh sách kết quả quá dài, người ta thường phải phân trang ứng dụng cho phù hợp (ít nhất là về mặt thẩm mỹ).

Nguyên tắc của việc phân trang ứng dụng như sau:

- Bước 1: Tính tóan số lượng bản ghi thỏa mãn điều kiện trả về ( thường sử dụng hàm count trong câu lệnh SQL).
- Bước 2: Xác định số lượng bản ghi sẽ hiển thị trên một trang.
- Bước 3: Dựa trên các thông tin có được từ bước 1 và 2, xác định được số trang cần hiển thị.
- Bước 4: Tính tóan số lượng bản ghi sẽ hiển thị tính từ trang nào đó do NSD lựa chọn (Sử dụng câu lệnh LIMIT).

Dưới đây tôi sẽ cung cấp cho các bạn 2 function,
- Function GetPageLinks ($Sql, $PageSize): Trả về một chuỗi văn bản chứa số trang hiển thị, với dữ liệu vào bao gồm câu lệnh SQL ($Sql) xác định số lượng bản ghi thỏa mãn điều kiện tìm kiếm, và "kích thước" của một trang ($PageSize)

Code:
function GetPageLinks($Sql,$PageSize)
{
 
$result=mysql_query ($Sql);
 
if (!$result or mysql_num_rows ($result)==0)
 
{
 
 
 

 
}
 
else
 
{
 
 
$line=mysql_fetch_array($result);
 
 
$Pages=ceil($line[0]/$PageSize);
 
 
if ($Pages>1)
 
 
{
 
 
 
$PageLink="Trang ";
 
 
 
for ($i=0;$i<=$Pages-1;$i++)
 
 
 
{
 
 
 
 
$j=$i+1;
 
 
 
 
if ($j==$_GET["page"])
 
 
 
 
 
{
 
 
 
 
 
 
$PageLink.=" {$j} | ";
 
 
 
 
 
}
 
 
 
 
else
 
 
 
 
 
{
 
 
 
 
 
 
$NewGet="";
 
 
 
 
 
 
reset ($_GET);
 
 
 
 
 
 
while (list($key, $val) = each($_GET))
 
 
 
 
 
 
{
 
 
 
 
 
 
 
 
 
 
 
 
 
   if ($key!='page')
 
 
 
 
 
 
 
 
 
 
 
 
 
   {
 
 
 
 
 
 
 
 
$NewGet.="&{$key}={$val}";
 
 
 
 
 
 
   }
 
 
 
 
 
 
 
 
 
 
 
 
 
}
 
 
 
 
 
 
$NewGet.="&page={$j}";
 
 
 
 
 
 
$NewGet=substr($NewGet,1);
 
 
 
 
 
 

 
 
 
 
 
 
$PageLink.=" <a href='?{$NewGet}'>{$j}</a> | ";
 
 
 
 
 
}
 
 
 
}
 
 
 
$PageLink=substr($PageLink,0,-2);
 
 
}
 
}
 
return $PageLink;
}

Hàm tiếp theo sẽ hiển thị danh sách các record của một trang nào đó, đồng thời demo cách sử dụng hàm GetPageLinks ở trên:
(VD dưới đây sử dụng một câu truy vấn lấy dữ liệu từ một bảng dulieu với một Category có id xác định:

Code:
function LoadList()
{
 
if (isset($_GET["CatId"]) and is_numeric ($_GET["CatId"]))
 
 
 
$Dieukien="where CatId={$_GET["CatId"]}";
 

// Cau lenh truy van chinh khi chua phan trang:
 
 
$Sql="Select * from dulieu {$Dieukien} ";
// Tinh toan so luong ban ghi tra ve:
 
 
$PageSize=20;
 
 
$CountSQL="Select count(*) from dulieu {$Dieukien}";
 
 
$PageLinks= GetPageLinks ($CountSQL,$PageSize);
 
 

 
 
if (isset ($_GET["page"]) and is_numeric ($_GET["page"]))
 
 
{
 
 
 
$StartNum=$PageSize * ($_GET["page"]-1); // Xac dinh vi tri ban ghi bat dau
 
 

 
 
}
 
 
else
 
 
{
 
 
 
$StartNum=0;
 
 
}
//Tiep tuc xay dung cau lenh truy van de lay du lieu theo trang
 
 
$Sql.= " Limit {$StartNum}, {$PageSize}";
 
 

 
 
$result=mysql_query ($Sql);
 
 
if (!$result or mysql_num_rows ($result)==0)
 
 
 
{
 
 
 
 
$tmp="Híc, tui chẳng mò được chi cả!";
 
 
 
}
 
 
else
 
 
 
{
 
 
 
 
$tmp="{$PageLinks}";
 
 
 
 
//========== Hiển thị dữ liệu, các bạn tự viết cho phù hợp với yêu cầu
 
 
 
 
$tmp.="{$PageLinks}";
 
 
 
}
 

 
 
return $tmp;
}

Căn bản lập trình web voi PHP - Bài 4(VIII) : PHP Căn Bản

VIII. Làm Việc Với CSDL MySQL

C.  Giới thiệu ngôn ngữ truy vấn CSDL SQL

I. Một số khái niệm cơ bản về CSDL
Cơ sở dữ liệu (database) có thể hiểu là nơi chứa dữ liệu. Có nhiều loại cơ sở dữ liệu khác nhau như cơ sở dữ liệu quan hệ, CSDL hướng đối tượng, CSDL phân tán...
Hiện nay, trong phần lớn các ứng dụng, người ta thường sử dụng CSDL quan hệ.
Trong mô hình CSDL quan hệ, dữ liệu thường được chia thành các bảng có liên quan với nhau.

VD: ta có 2 bảng:

Bảng 1 chứa các thông tin về Mã hàng, tên hàng, ngày nhập hàng, giá nhập hàng
Bảng 2 chứa các thông tin về Mã hàng, ngày bán hàng, giá bán.

Hai bảng này có quan hệ với nhau thông qua mã hàng, tức là chỉ cần có mã hàng ở bảng 2, ta có thể tìm ra tên hàng dựa trên mối liên hệ giữa mã hàng và tên hàng lưu ở bảng 1.

Hệ quản trị CSDL là chương trình dùng để quản lý một CSDL nào đó. Chẳng hạn như chương trình Access là một hệ quản trị CSDL để quản lý CSDL Access. Thông thường thì tên của hệ quản trị CSDL gắn liền với tên của loại CSDL. VD như: CSDL Access <-> Hệ quản trị CSDL Access, CSDL MySQL <-> Hệ quản trị CSDL MySQL, CSDL Oracle <-> Hệ quản trị CSDL Oracle. Trong trường hợp này thì người ta thường nhầm lẫn giữa khái niệm CSDL và cấu trúc (dạng nhị phân) của một CSDL do hệ quản trị CSDL quy định.

Người ta gọi các cột trong một bảng là các trường, các dòng trong một bảng là các bản ghi.

Mỗi trường sẽ có một kiểu dữ liệu xác định. Đó có thể là kiểu số, kiểu chuỗi, kiểu ngày tháng...

VD về một bảng có chứa thông tin người dùng. Bảng này sẽ có tên là NSD, các cột (trường) là: Ma_ND, Ten_ND, Tuoi_ND, Matkhau_ND; trong đó Ma_ND có kiểu nguyên, Ten_ND có kiểu chuỗi, Tuoi_ND có kiểu số, Matkhau_ND có kiểu chuỗi.

II. Ngôn ngữ truy vấn CSDL SQL

SQL là một ngôn ngữ được sử dụng trong các ngôn ngữ lập trình để truy vấn thông tin trong CSDL. Điểm mạnh của ngôn ngữ này là cấu trúc đơn giản, có thể nhập lệnh vào dưới dạng các chuỗi văn bản, sau đó chuyển câu lệnh tới các chương trình điều khiển trung gian để truy vấn dữ liệu rồi trả về cho chương trình. Như vậy, mọi thao tác kết xuất, truy vấn hoàn tòan dễ dàng thông qua việc điều khiển chuỗi văn bản có chứa câu lệnh SQL.

Bài viết này tập trung vào việc trình bày cú pháp của ngôn ngữ SQL, có thể sử dụng PHP để biểu diễn một số thao tác để mọi người dễ dàng hình dung.

1. Câu lệnh chèn dữ liệu vào một bảng.
Cú pháp của câu lệnh này có dạng:
Code:
INSERT INTO tên_bảng (danh_sách_trường) VALUES (danh_sách_giá_trị)

Trong đó:

Các từ khóa cố định là INSERT, INTO và VALUES.
tên_bảng là tên của một bảng quan hệ trong CSDL.
danh_sách_trường là danh sách các trường trong bảng quan hệ được sử dụng để chèn giá trị vào, mỗi trường cách nhau một dấu phảy.
danh_sách_giá_trị là danh sách các giá trị tương ứng với các trường, có bao nhiêu trường thì phải chèn vào bấy nhiêu giá trị.

Chú ý:
Thông thường, các giá trị chuỗi phải được đặt trong cặp dấu nháy hoặc dấu ngoặc kép tùy thuộc vào ngôn ngữ biểu diễn và kiểu dữ liệu của trường. Mỗi giá trị cách nhau bởi một dấu phẩy.

VD, với bảng dữ liệu ở trên (Bảng NSD có các cột (trường) là: Ma_ND, Ten_ND, Tuoi_ND, Matkhau_ND), ta có thể dùng câu lệnh SQL để chèn thông tin vào như sau:

Code:
INSERT INTO NSD (Ten_ND,MatKhau_ND) VALUES('Sinh','123456')

Hoặc ta có thể chèn nhiều thông tin hơn:

Code:
INSERT INTO NSD (Ten_ND,Tuoi_ND,MatKhau_ND) VALUES('Sinh',30,'123456')

2. Câu lệnh chỉnh sửa dữ liệu trong bảng
Để chỉnh sửa (cập nhật) thông tin trong bảng, ta dùng câu lệnh UPDATE với cú pháp sau:

Code:
UPDATE tên_bảng SET tên_trường1=giá_trị1[, tên_trường_i=giá_trịi] WHERE điều_kiện

Chẳng hạn, nếu ta muốn đổi mật khẩu của những người có trường Ten_ND là Sinh thành 'JQKA' trong bảng trên, ta sẽ làm như sau:

Code:
UPDATE NSD SET Matkhau_ID = 'JQKA' WHERE Ten_ND='Sinh'

Chú ý mệnh đề điều kiện WHERE. Mệnh đề này sẽ được mô tả chi tiết hơn ở phía dưới.

3. Câu lệnh xóa dữ liệu trong bảng
Để xóa dữ liệu trong bảng, ta dùng câu lệnh DELETE với cú pháp sau:
Code:
DELETE FROM tên_bảng WHERE điều_kiện.

Câu lệnh này sẽ xóa tất cả những bản ghi thỏa mãn điều kiện nằm sau mệnh đề WHERE.
VD:
Quote
DELETE FROM NSD WHERE Ten_ND='Sinh'

4. Câu lệnh truy vấn (tìm kiếm) dữ liệu trong bảng
Đây là câu lệnh phức tạp nhất trong nhóm các câu lệnh của SQL.
Cú pháp của lệnh này như sau:
SELECT [danh_sách_trường] FROM [danh_sách_bảng] WHERE [danh_sách_điều_kiện] [ORDER BY]


Câu lệnh SELECT

Câu lệnh SELECT được dùng để truy xuất dữ liệu từ một bảng. Kết quả trả về dưới dạng bảng được lưu trong 1 bảng, gọi là bảng kết quả - result table (còn được gọi là tập kết quả - result set).

Cú pháp

Cú pháp của câu lệnh SELECT như sau:

    SELECT tên_các_cột
    FROM tên_bảng

Ví dụ, để truy xuất các cột mang tên LastName và FirstName từ một bảng có tên là Persons, ta dùng một câu lệnh SELECT như sau:

    SELECT LastName, FirstName FROM Persons

Ta có thể dùng dấu * để thay thế cho tất cả các cột:
    SELECT * FROM Persons
Kết quả trả về từ một câu truy vấn SQL được lưu trong 1 tập kết quả (result set). Tập kết quả này sau đó sẽ được lập trình viên tìm cách đưa ra dưới dạng một bảng hoặc một hình thức nào đó. Xin xem chi tiết ở phần lập trình với php


Mệnh đề WHERE

Mệnh đề WHERE được dùng để thiết lập điều kiện truy xuất.
Để truy xuất dữ liệu trong bảng theo các điều kiện nào đó, một mệnh đề WHERE có thể được thêm vào câu lệnh SELECT.

Cú pháp mệnh đề WHERE trong câu lệnh SELECT như sau:

    SELECT tên_cột FROM tên_bảng
    WHERE tên_cột phép_toán giá_trị

Trong mệnh đề WHERE, các phép toán được sử dụng là

    Phép toán      Mô tả
    =               So sánh bằng
    <>             So sánh không bằng
    >               Lớn hơn
    <               Nhỏ hơn
    >=             Lớn hơn hoặc bằng
    <=             Nhỏ hơn hoặc bằng
    BETWEEN    Nằm giữa một khoảng
    LIKE           So sánh mẫu chuỗi

Lưu ý: Trong một số phiên bản của SQL, phép toán <> có thể được viết dưới dạng !=

Ví dụ để lấy danh sách những người sống ở thành phố Sandnes, ta sử dụng mệnh đề WHERE trong câu lệnh SELECT như sau:

    SELECT * FROM Persons
    WHERE City = 'Sandnes'

Tóan tử AND và OR

Hai toán tử AND và OR nối hai hoặc nhiều điều kiện trong mệnh đề WHERE lại với nhau.
Toán tử AND sẽ hiển thị 1 dòng nếu TẤT CẢ các điều kiện đều thoả mãn. Toán tử OR hiển thị một dòng nếu BẤT KỲ điều kiện nào được thoả.

Ví dụ: Sử dụng AND để tìm những người có tên là Tove và họ là Svendson:

    SELECT * FROM Persons
    WHERE FirstName = 'Tove'
    AND LastName = 'Svendson'

Ví dụ: Sử dụng OR để tìm những người có tên là Tove hoặc họ là Svendson:

    SELECT * FROM Persons
    WHERE firstname = 'Tove'
    OR lastname = 'Svendson'

Ví dụ: Sử dụng kết hợp AND và OR cùng với dấu ngoặc đơn để tạo nên các câu truy vấn phức tạp:

    SELECT * FROM Persons WHERE
    (FirstName = 'Tove' OR FirstName = 'Stephen')
    AND LastName = 'Svendson'

Từ khoá DISTINCT

Từ khoá DISTINCT được dùng để lọc ra các giá trị khác nhau.

Câu lệnh SELECT sẽ trả về thông tin về các cột trong bảng. Nhưng nếu chúng ta không muốn lấy về các giá trị trùng nhau thì sau?

Với SQL, ta chỉ cần thêm từ khoá DISTINCT vào câu lệnh SELECT theo cú pháp sau:

    SELECT DISTINCT tên_cột FROM tên_bảng

Ví dụ: Tìm tất cả các công ty trong bảng đặt hàng, câu lệnh SQL thông thường sẽ như sau:

    SELECT Company FROM Orders

Để tìm tất cả các công ty khác nhau trong bảng đặt hàng, ta sử dụng câu lệnh SQL sau:

    SELECT DISTINCT Company FROM Orders

Mệnh đề ORDER BY:
Mệnh đề ORDER BY được dùng để sắp xếp các dòng.
Cú pháp: Select..... ORDER BY tên các cột [ASC/DESC]
ORER BY có thể đi kèm từ khóa DESC để sắp xếp theo chiều giảm dần, hoặc ASC để sắp xếp theo chiều tăng dần của các cột

VD: Để lấy danh sách các công ty theo thứ tự chữ cái (tăng dần):

    SELECT Company, OrderNumber FROM Orders
    ORDER BY Company

VD 2: Lấy danh sách các công ty theo thứ tự chữ cái (tăng dần) và hoá đơn đặt hàng theo thứ tự số tăng dần:

    SELECT Company, OrderNumber FROM Orders
    ORDER BY Company, OrderNumber

VD 3: Lấy danh sách các công ty theo thứ tự giảm dần:

    SELECT Company, OrderNumber FROM Orders
    ORDER BY Company DESC


 

Căn bản lập trình web voi PHP - Bài 4(VIII) : PHP Căn Bản

VIII. Làm Việc Với CSDL MySQL

1. Giới Thiệu MYSQL

My SQL là gì?

MySQL là một phần mềm quản trị CSDL mã nguồn mở, miễn phí nằm trong nhóm LAMP (Linux - Apache -MySQL - PHP)

Tại sao lại sử dụng MySQL?

MySQL là phần mềm miễn phí hoàn toàn, ổn định, an toàn.

Hiện nay trong số các Website có lưu lượng truy cập lớn thuộc hàng "top" trên Internet, có rất nhiều Website sử dụng liên minh LAMP này.

"Liên minh" mã mở LAMP đang được coi là một đối trọng với các sản phẩm mã đóng "đắt vãi..." (vãi gì thì tôi không biết ) của Microsoft (Windows, IIS, SQL Server, ASP/ASP.NET).

Một số đặc điểm của MySQL

MySQL là một phần mềm quản trị CSDL dạng server-based (gần tương đương với SQL Server của Microsoft).
MySQL quản lý dữ liệu thông qua các CSDL, mỗi CSDL có thể có nhiều bảng quan hệ chứa dữ liệu.
MySQL có cơ chế phân quyền người sử dụng riêng, mỗi người dùng có thể được quản lý một hoặc nhiều CSDL khác nhau, mỗi người dùng có một tên truy cập (user name) và mật khẩu tương ứng để truy xuất đến CSDL.

Khi ta truy vấn tới CSDL MySQL, ta phải cung cấp tên truy cập và mật khẩu của tài khỏan có quyền sử dụng CSDL đó. Nếu không, chúng ta sẽ không làm được gì cả.

2. Sử dụng PHPMyAdmin

Hiện nay hầu hết các host đều sử dụng phpmyadmin để quản lý database vì nó free , hiệu quả, dễ dùng, tuy nhiên không phải host nào cũng có , một số host không cài sẵn , bạn phải tự cài. Bạn tải phpMyadmin và upload lên host .
Có thể vào trang chủ http://www.phpmyadmin.net hay nhấn vào đây để download :
http://sourceforge.net/project/s ... mp;release_id=63838

Sau khi upload phpmyadmin lên host xong bạn mở file config.inc.php ra sửa ( có thể sửa xong rùi upload lên ).

Tìm đoạn code :


$cfgPmaAbsoluteUri = ' '

Thêm vào :
$cfgPmaAbsoluteUri = 'http://yoursite.com/duong_dan_den_thu_muc_phpmyadmin/'


Tìm đoạn :
$cfgServers[1]['user'] = 'root';

$cfgServers[1]['password'] = '';

$cfgServers[1]['only_db'] = '';

Thêm vào :
$cfgServers[1]['user'] = 'tên login của bạn';
$cfgServers[1]['password'] = '*******'; //PASWORD CỦA BẠN
$cfgServers[1]['only_db'] = 'tên login của bạn';


Sau đó save lại và mở trình duyệt gõ :
http://yoursite.com/duong_dan_den_thu_muc_phpmyadmin/index.php

Sau đây là cách sử dụng :

Sau khi bạn nhập username và password ,đã vào trong phpmyadmin

Bây giờ bạn hãy click vào tên database , ( dưới chữ home , bên trái )

Bây giờ ví dụ bạn muốn tạo table , thì sẽ có 2 trường hợp , 1 là người ta đã viết sẵn câu lệnh cho bạn và save các câu lệnh thành 1 tập hợp các lệnh dưới dạng ví dụ như shoutbox.sql , hoặc là nuke.sql , trong trường hợp này bạn kích vào SQL sau đó nhấn vào nút browers của phpmyadmin,chọn file tập hợp lệnh trong máy ( như trong hình là nuke.sql ) sau đó nhấn vào run để tạo table

Trường hợp thứ 2 là người ta kô có làm sẵn tập hợp lệnh cho bạn mà chỉ cho bạn các lệnh tạo table, thực ra cũng tương tự, bạn cứ copy hết tất cả các lệnh ấy và paste vào ô Run SQl Query/ queries . sau đó nhấn go để chạy lệnh. vậy là xong.

Bây giờ tới phần backup ,restore dữ liệu , bạn có một forum đông khách , nhưng bạn sợ một ngày kia bị mất thành viên , bài gửi khi bạn đổi host hoặc host có vấn đề .? cách tốt nhất là bạn dùng phpmyadmin backup toàn bộ database mỗi ngày hoặc mỗi tuần tùy bạn . Sau đó nếu forum có chuyện gì thi bạn có thể khởi tạo lại forum mà vẫn giữ được bài viết , thành viên.

trong phpmyadmin bạn sẽ thấy hình sau :

Bây giờ bạn hãy click chọn Export sau đó chọn save as file, sau đó nhấn Go . rồi save database vào máy tính . điều này có nghĩa là TOÀN Bộ database của bạn đã được save vào máy tính )

Trong trường hợp bạn chuyển host khác, hoặc là forum có trục trặc cần sử dụng lại database cũ thì bạn phải restore database , tức là lấy database bạn đã save trong máy tính bây giờ đem chép ngược nó lên web host của bạn .
Bạn hãy nhấn vào Import -> Browse để chọn file database bạn đã save sau đó nhấn go . vậy là database của bạn đã được phục hồi như cũ .

To Be Continued ...

Căn bản lập trình web voi PHP - Bài 4(VII) : PHP Căn Bản

VII. HTML Form - Gửi Và Nhận Dữ Liệu Qua HTML Form

Dữ liệu của người dùng từ trình duyệt sẽ được gửi lên máy chủ dưới dạng từng cặp biến=giá_trị và có thể đi theo 3 con đường khác nhau. Tuỳ theo từng con đường cụ thể, trên máy chủ ta cũng có các cách khác nhau để lấy dữ liệu được gửi lên.. 3 con đường đó là: GET, POST và COOKIES. Vậy GET, POST và COKIES là gì?

1. Truyền dữ liệu thông qua phương thức GET
Dữ liệu gửi từ trình duyệt lên qua phương thức GET là phần dữ liệu được nhập trực tiếp theo sau địa chỉ URL do trình duyệt gửi lên, được phân biệt với tên file script bằng dấu hỏi chấm (?). Ví dụ, khi ta gõ vào trình duyệt địa chỉ URL sau:

http://www.phpvn.org/topic.php?TOPIC_ID=161
Khi đó, trình duyệt sẽ gửi theo địa chỉ trên một cặp biến = giá trị, trong đó biến có tên là TOPIC_ID và giá trị là 161 (TOPIC_ID=161).
Chúng ta cũng có thể đưa lên nhiều cặp biết=giá_trị bằng cách phân cách chúng bởi dấu &:
http://www.phpvn.org/index.php?method=Reply&TOPIC_ID=161&FORUM_ID=20
Với địa chỉ URL trên, chúng ta sẽ gửi lên 3 cặp biến=giá_trị theo phương thức GET, đó là: method=Reply, TOPIC_ID=161 và FORUM_ID=20.
Khi trình duyệt gửi các thông tin này lên máy chủ, PHP sẽ tự động sinh ra một mảng có tên là $_GET[] để nắm giữ tất cả các cặp biến và giá trị đó, trong đó, chỉ số của mảng chính là một chuỗi mang tên của tên biến và giá trị của chỉ số đó chính là giá trị của biến do trình duyệt gửi lên. Ví dụ, với địa chỉ URL sau:

http://www.phpvn.org/post.php?method=Reply&TOPIC_ID=161&FORUM_ID=20

Thì PHP sẽ tự động sinh ra một mảng $_GET có nội dung sau:
$_GET["method"] = "Reply" // tương ứng với cặp method=Reply
$_GET["TOPIC_ID"] = 161 // tương ứng với cặp TOPIC_ID=161
$_GET["FORUM_ID"] = 20 // tương ứng với cặp FORUM_ID=20

Sau đó, trong trang web của mình, các bạn có thể tha hồ sử dụng các biến này. Ví dụ, tôi làm một đoạn chương trình sau để khi người dùng nhập vào biến user=sinh thì cho hiển thị "Hello, my Boss", còn nếu biến user khác sinh thì "Hello " + giá trị của biến:

Code:
<?
// Hàm isset được sử dụng để kiểm tra xem một biến đã được thiết lập hay chưa
if (isset ($_GET["user"]))
{
    if ($_GET["user"]=="sinh")
    {
        echo "Hello, my boss. Good morning!";
    }
    else
    {
        echo "Hello, " . $_GET["user"] . ". Good morning!";
    }
}
else
{
echo "Hello, guest. How do you do?";
}
?>

OK, bây giờ hãy save lại. Giả sử tôi lưu với tên là welcome.php trong thư mục www. Mở trình duyệt lên, gõ vào ô Address dòng chữ sau:
http://localhost/welcome.php?user=sinh

Hãy xem kết quả hiển thị trên màn hình, sau đó thay chữ sinh bằng một cái tên gì đó xem kết quả ra sao.



II. Phương thức POST

Post là phần dữ liệu được gửi qua các form HTML có method ="POST" (xin xem lại bài về HTML).

Để lấy các biến theo kiểu POST, PHP sẽ tự động sinh ra mảng có tên là $_POST[]. Mảng này có chỉ số chính là tên của các phần tử trong form (các thẻ input, select... có thuộc tính name) và giá trị là nội dung giá trị do người sử dụng nhập vào các phần tử có tên tương ứng. Chẳng hạn với mẫu biểu HTML sau:

Code:
<form method="POST">
<p>
  User Name:<input type="text" name="T1" size="20"> </p>
<p>
  Password:
  <input type="password" name="T2" size="20"></p>
<p>Sex: <Select name ="sex">
<option value =1>Male </option>
<option value =0>Female </option>
</select>
</p>
<input type="submit" value="Gui di" name="B1">
</form>

Khi người dùng nhập user name (giả sử là Sinh), password (giả sử là 123456) và chọn sex là Male, khi đó, mảng $_POST sẽ có các phần tử sau:
$_POST["T1"] = Sinh
$_POST["T2"] = 123456
$_POST["sex"] = 1

Sau khi lấy được các giá trị này rồi, các bạn có thể thoải mái sử dụng.

Đây là ví dụ một chương trình giải phương trình bậc nhất (cho nó đơn giản)

Code:
<form method="POST">
<p style="margin-top: 0; margin-bottom: 0">
  Nhập a:<input type="text" name="a" size="20"></p>
  <p style="margin-top: 0; margin-bottom: 0">Nhập b:<input type="text" name="b" size="20"></p>
  <p style="margin-top: 0; margin-bottom: 0">
  <input type="submit" value="Tính" name="B1"></p>
</form>
<?
      $a=0;
      $b=0;
      if (isset ($_POST["a"]))
      {
            $a =$_POST["a"];
      }
       if (isset ($_POST["b"]))
      {
            $b =$_POST["b"];
      }
      if ($a<>0)
      {
            echo "<BR>Nghiem la: " . $b/$a;Chỗ này là -$b/$a
      }
      else
      {
            if ($b==0)
                  {
                        echo "<BR>Vo so nghiem";
                  }
            else
            {
                  echo "<BR>Vo nghiem";
            }
      }
?>

Bây giờ hãy làm cốc cafe hoặc trà đá cho tỉnh táo.

III Cookie và cách sử dụng Cookie
Cookies là một phần dữ liệu được lưu trên máy khách. Mỗi khi máy khách gửi một yêu cầu tới máy chủ nào đó, thì nó sẽ gửi phần dữ liệu được lưu trong cookie tương ứng với máy chủ đó.

Trong Cookie có một số thông số sau:
- Địa chỉ URL mà trình duyệt sẽ gửi cookie tới
- Thời gian hết hạn của cookie
- Các cặp biến:giá trị được lưu trữ liên tục

Người ta thường dùng cookies để lưu trữ các thông tin có liên quan đến nhiều "phiên" làm việc khác nhau. Vi giao thức HTTP là giao thức không lưu trạng thái (Mỗi khi xử lý xong một yêu cầu từ máy khách là nó phủi tay tự ngắt kết nối luôn và chẳng thèm quan tâm đến máy khách làm gì ), nên cookies được sinh ra để làm nhiệm vụ lưu trữ một số biến trạng thái để khắc phục nhược điểm này.

Khác với dữ liệu gửi từ form (Post hay Get) thì cookies sẽ được trình duyệt tự động gửi đi theo mỗi lần truy cập lên máy chủ. Trong quá trình làm việc, cookie có thể bị thay đổi giá trị. Cookie sẽ bị vô hiệu hoá nếu cửa sổ trình duyệt điều khiển cookie đóng lại và cookie hết thời gian có hiệu lực. Theo mặc định, thời gian "sống" của cookies là tồn tại cho đến khi cửa sổ trình duyệt sử dụng cookies bị đóng. Tuy nhiên người ta có thể thiết lập tham số thời gian để cookie có thể sống lâu hơn (6 tháng chẳng hạn). Ví dụ như chế độ Remember ID & Password của 1 số trang web.

Cách ghi thông tin vào cookie và gửi xuống trình duyệt
Trong PHP, để gửi cookie xuống trình duyệt, ta có thể sử dụng hàm setcookie:
setcookie ( string name [, string value [, int expire [, string path [, string domain [, int secure]]]]])

Trong đó:
- string name: Chuỗi mang tên của cookie
- string value: Chuỗi mang giá trị của cookie tương ứng với tên đã cho
- int expire: Thời gian hết hạn của cookie
- string path: Đường dẫn của cookie (đến 1 thư mục nào đó trên máy chủ. Tham số này cho biết cookie sẽ chỉ được truyền đi nếu như trang web mà trình duyệt yêu cầu nằm trên thư mục đó, thay vì lúc nào cũng phải gửi đi tới bất kỳ khu vực nào).
- string domain: cookie này sẽ được gửi tới domain nào?
- int secure: Chế độ bảo mật.

Các tham số trong cặp dấu ngoặc vuông là tuỳ chọn

Ví dụ: setcookie ("ten_truy_cap","lan gio vo tinh");

Chú ý: Hàm setcookie phải được gọi trước khi bạn gửi bất kỳ một nội dung nào xuống trình duyệt:

VD: Cách dùng đúng:
Code:
// Thực hiện các câu lệnh nào đó, nhưng không được phép gửi gì xuống trình duyệt
setcookie ("ten_truy_cap","lan gio vo tinh");
setcookie ("password","thumotti");
// Thực hiện các câu lệnh tiếp theo, có thể xuất dữ liệu xuống trình duyệt:

echo "<html><body>Xin chào lan gio vo tinh";

VD: Cách dùng sai:
Code:
// Thực hiện các câu lệnh nào đó
echo ("cái gì đó");
setcookie ("ten_truy_cap","lan gio vo tinh");
setcookie ("password","thumotti");
// các câu lệnh khác.

Ví dụ trên sai vì bạn đã trót gửi dòng "cái gì đó" xuống trình duyệt trước khi gọi hàm setcookie.

Cách lấy dữ liệu lưu trong cookie:

Để lấy dữ liệu đã lưu trong cookies do trình duyệt gửi lên, ta có thể dùng mảng $_COOKIE["tên_cookie"]

Chẳng hạn, với câu lệnh setcookie ở trên, sau khi trình duyệt gửi lên, ta sẽ có 2 biến sau:
$_COOKIE["ten_truy_cap"] // chứa giá trị "lan gio vo tinh"
$_COOKIE["password"] // chứa giá trị "thumotti".

Chi tiết hơn các bạn có thể xem trong PHP Manual.
http://fr2.php.net/manual/en/language.variables.superglobals.php

_____
Note : Cập nhật thêm vởi sorivevol
Do từ php 4.1 thì có thêm $_POST, $_GET, $_REQUEST,$_COOKIE etc . & trở thành super global variable & cũng do lý do tốc độ nên register_long_arrays thường được off, do vậy các bạn khi sử dụng $HTPP_*_VARS sẽ có thể xảy ra 1 số lỗi.
Cho nên các bạn nên sử dụng $_POST,$_GET,$_COOKIE,etc. để lập trình.

Học lập trình web căn bản với PHP

Bài 1: Các kiến thức căn bản Part 1:  https://jimmyvan88.blogspot.com/2012/05/can-ban-lap-trinh-web-voi-php-bai-1-cac.html Part 2:  https://...