Wine loop

while ( !empty($wine) ) {
	drink();
	if ( drunk() ) {
		sleep(300);
	}
}
if ( !drunk() ) {
	echo '<h1>Rượu rởm!</h1>';
} else {
	die('Good wine!');
}

Multi-level categories

Combining functions method:

function dropdown_cats() {
	global $table_prefix;
	$main_cats = "SELECT cat_id, cat_name FROM ${table_prefix}categories WHERE cat_parent = 0";
	$cats = mysql_query($main_cats);

	while ( $main_cat_list = mysql_fetch_array($cats) ) {
		$main_cat = stripslashes($main_cat_list['cat_name']);
		echo '<option value="' . $main_cat_list['cat_id'] . "\\">$main_cat</option>\\n";
		dropdown_sub_cats($main_cat_list['cat_id']);
	}
}

function dropdown_sub_cats($main_cat_id, $level = 1) {
	global $table_prefix;

	$query = "SELECT cat_id, cat_name FROM ${table_prefix}categories WHERE cat_parent = $main_cat_id";
	$sub_list = mysql_query($query);
	#$num_rows = mysql_num_rows($sub_list); // Required when display in <ul></ul>

	#if ($num_rows > 0) {
		while ( $sub_cat_list = mysql_fetch_array($sub_list) ) {
			$indent = str_repeat('–', $level);
			$cat_name = stripslashes($sub_cat_list['cat_name']);
			echo '<option value="' . $sub_cat_list['cat_id'] . "\\">$indent$cat_name</option>\\n";
			dropdown_sub_cats($sub_cat_list['cat_id'], $level + 1);
		}
	#}
}

Continue reading “Multi-level categories”

Tết này họp lớp 12E

Tin từ Hạnh hanhbkhn (đã được biên tập :p):

THÔNG BÁO KHẨN
V/v: Họp lớp cấp 3 sau 5 năm xa cách

Dành cho những ai đã từng là thành viên của 12E THPT Lý Nhân hoặc có dính tí máu tí me với 12E, các thành viên của 12E, là cha mẹ, vợ kon, người yêu, cháu gái (trên 15 tuổi).

Thời gian: 7h sáng, ngày 3 Tết âm lịch.
Địa điểm (dự kiến): nhà Long điên hoặc Bằng Thìn.

Ghi chú: Ai đã có chồng mà hắn biết nhậu thì mang theo, nếu không thì cho hắn ở nhà tập uống. Ai có vợ, nếu vợ xinh thì mang theo, xấu thì cho đi thẩm mĩ viện. Nhưng có thể mang theo em vợ.

Nếu ai mang theo cháu gái, em gái, em vợ… (phải trên 15 tuổi) thì sẽ được miễn thuế, không phải đóng góp như các anh em, hơn thế, lại còn được ăn uống miễn phí và ngồi mâm trên ;).

Muốn biết thêm thông tin về cuộc hội ngộ 5 năm có 1 này thì xin liên hệ với sếp Hà sủng hoặc Hạnh hanhbkhn: 0904034409 hoặc 0989846777.

Cập nhật ngày 16/01/2006

Bảo vệ mật khẩu MySQL

1. Đặt vấn đề

Thông thường, tên người dùng và mật khẩu MySQL cho các ứng dụng web được ghi trong một tập tin PHP. Ví dụ, diễn đàn phpBB2 định nghĩa các biến $dbuser (tên người dùng) và $dbpasswd trong tập tin `config.php'. Nếu website của bạn dùng chung máy chủ với website khác thì rất có thể người khác sẽ xem được giá trị các biến $dbuser$dbpasswd của bạn. Continue reading “Bảo vệ mật khẩu MySQL”

Mong ước thầm kín

Hôm nay thằng ku Hùng mua xương về nấu. Khà khà, ngon phết!

Trong lúc ăn, thằng ku phàn nàn là miếng xương khó gặm rồi thắc mắc:
— Tại sao chó nó lại gặm xương dễ thế nhỉ?
— Nhưng nó cũng không cầm bát đũa được.
— Ước gì mình khi gặm xương thì giống chó, lúc còn lại thì là người…
— 😮 , 😆 [Cơm bắn ra đằng mũi]

“Regex Spellcheck” for Vietnamese (continued)

“Regex Spellcheck” (step 2a) 😀

#! /bin/sh

# Vietnamese-initial-sounds splitter

# This script will split the Vietnamese syllables list (named 'LIST')
# into initial-sound-based lists. Each list (stored in one *.txt file)
# contains syllables that begin with one individual initial sound
# (presented in Quốc ngữ writing system).
# NOTICE: The initial sound /?-/ is not included here
# 
# If you haven't got 'LIST', you can get it from TuDienVan package:
# http://sf.net/project/showfiles.php?group_id=134457&package_id=151085
#

# All lists will be moved into this directory
tmpdir=c1a
# List of initial sounds
sounds='ch gh kh ngh ng nh p ph th tr b c d đ g h gi k l m n q r s t v x'

# Checking for Vietnamese syllables list
if [ ! -f LIST ]; then 
	echo 'Fatal error: LIST not found!';
	echo 'Please correct this problem before perform any actions!';
	exit
fi

# Create target directory if not existed
if [ ! -d $tmpdir ]; then
	mkdir $tmpdir
fi

# Splitting...
for i in $sounds; do
	egrep "^$i" LIST > $tmpdir/$i.txt;
done

# Enter target directory and rename đ.txt to dd.txt
cd $tmpdir
mv -f đ.txt dd.txt

# OK, now stripping...
sed -r -e '/^ch/d' -i c.txt
sed -r -e '/^g[hi]/d' -i g.txt
sed -r -e '/^kh/d' -i k.txt
sed -r -e '/^n[gh]/d' -i n.txt
sed -r -e '/^ngh/d' -i ng.txt
sed -r -e '/^ph/d' -i p.txt
sed -r -e '/^t[hr]/d' -i t.txt

# Counting...
wc -l *.txt | tail -n 1

“Regex Spellcheck” for Vietnamese

“Regex Spellcheck” (step 1) 😆

(ch|gh|kh|ngh|ng|nh|p|ph|th|tr|b|c|d|đ|g|h|gi|k|l|m|n|q|r|s|t|v|x)?
(
  	(
  		[uo]
  	)?
  	(
  		(
  			[aàảãáạăằẳẵắặâầẩẫấậeèẻẽéẹêềểễếệiìỉĩíịoòỏõóọôồổỗốộơờởỡớợuùủũúụưừửữứựyỳỷỹýỵ]
  		)
  		|
  		(
  			y[aàảãáạêềểễếệ]
  		)
  	)
	|
	(
	ia|ìa|ỉa|ĩa|ía|ịa|iê|iề|iể|iễ|iế|iệ|ưa|ừa|ửa|ữa|ứa|ựa|ươ|ườ|ưở|ưỡ|ướ|ượ|ua|ùa|ủa|ũa|úa|ụa
	)
)
(
	(i|o|u|y|m|n|ng|nh|p|t|c|ch)?
)

😛