--------------- <> -----------------
--- KHOA HỌC - CÔNG NGHỆ - GIÁO DỤC - VIỆC LÀM ---
--- Học để đi cùng bà con trên thế giới ---

Tìm kiếm trong Blog

Ngu ngơ học làm web (64) - Chuỗi trong PHP – phần 2

Tiếp theo của: Ngu ngơ học làm web (63) - Chuỗi trong PHP – phần 1
------

Phần 64. Chuỗi trong PHP – phần 2

Đây là clip số 41:


Bài tập,

Cho chuỗi URL = 'http://210.245.126.171/Music/NhacTre/TinhYeu_LyMaiTrang/wma32/06_BienTham_TinhYeu_LyMaiTrang.wma'

Hãy trích ra,

- ID: 06
- Name: Bien Tham
- Album: Tinh Yeu
- Singer: Ly Mai Trang
- Type: wma

Làm theo hướng dẫn của clip để trích ra chuỗi ‘06_BienTham_TinhYeu_LyMaiTrang.wma’ bằng ba cách:

Cách 1:

function getInfo01 ($str) {
                        $array = explode('/', $str);
                        $result = $array[count($array)-1];
                        return $result;
            }

Cách 2:

            function getInfo02 ($str) {
                        $array = parse_url($str);
                        // chuyển chuỗi path thành mảng
                        $info = explode('/', $array[path]);
                        // lấy phần tử cuối của mảng
                        $result = $info[count($info) - 1];
                        return $result;
            }

Cách 3:

function getInfo03 ($str) {
                        $index = strripos($str, '/');
                        $result = substr($str, $index+1);
                        echo $result;
            }

Để kiểm tra một kí tự có ở dạng chữ hoa hay không sử dụng hàm ctype_upper(text).

Đây là toàn bộ đoạn mã của bài tập,

<?php
            $url = 'http://210.245.126.171/Music/NhacTre/TinhYeu_LyMaiTrang/wma32/06_BienTham_TinhYeu_LyMaiTrang.wma';
           
            function getInfo03 ($str) {
                        $index = strripos($str, '/');
                        $result = substr($str, $index+1);
                        return $result;
            }

            $info = getInfo03($url);

            $result = array();
            $arrayInfo = explode('_', $info);
            // ID
            $result['id'] = $arrayInfo[0];
            // Type
            $arrayType = explode('.', $arrayInfo[3]);
            $result['type'] = $arrayType[1];

            // Name, Album, Singer
            $arrayInfo[3] = $arrayType[0];

            function format($str) {
                        $result = $str[0];
                        for($i = 1; $i < strlen($str); $i++) {
                                    if(ctype_upper($str[$i])) {
                                                $result .= ' '.$str[$i];
                                    } else {
                                                $result .= $str[$i];
                                    }
                        }
                        return $result;
            }

            $result['singer'] = format($arrayInfo[3]);
            $result['name'] = format($arrayInfo[1]);
            $result['album'] = format($arrayInfo[2]);
?>

Đây là clip số 42:


Để so sánh hai chuỗi, sử dụng hàm strcmp($str1, $str2). Ví dụ:

- strcmp('abc', 'abc'); trả về 0: hai chuỗi bằng nhau.

- strcmp('abc', 'abcde'); trả về -2: chuỗi hai lớn hơn chuỗi một 2 kí tự.

- strcmp('abcdef', 'abc'); trả về 3: chuỗi một lớn hơn chuỗi hai 3 kí tự.

Để so sánh một phần của chuỗi $str1 với toàn bộ chuỗi $str2, sử dụng hàm substr_compare($str1, $str2, $start, $length). Ví dụ,

substr_compare('abcdef', 'abc', 0, 3); trả về 0: ba kí tự của chuỗi một bằng chuỗi hai.

Để tăng độ dài của chuỗi bằng cách chèn thêm các kí tự, sử dụng hàm str_pad($str, $length, $padString, $padType); tăng chiều dài cho chuỗi $str thành $length kí tự, bằng cách chèn thêm kí tự $padString.

Ví dụ,

$str = 'abc';
            $new_str = str_pad($str, 7, 't');
            echo $new_str;

Kết quả là: abctttt

Ví dụ có tham số $padType: chèn bên trái, phải, hay hai bên.

<?php
            $str = 'abc';
            $new_str = str_pad($str, 7, 't', STR_PAD_LEFT);
            echo $new_str;
?>

Kết quả là: ttttabc

Để xáo trộn các kí tự trong chuỗi, sử dụng hàm str_shuffle(). Ví dụ,

$str = 'abc';
            $new_str = str_shuffle($str);
            echo $new_str;

Để tìm kiếm và thay thế các kí tự trong chuỗi, sử dụng hàm str_replace($find, $replace, $string); tìm trong chuỗi $string, nếu có chuỗi $find, hãy thay thế bằng chuỗi $replace. Hàm str_replace cũng có thể thực hiện thay thế trên mảng.

Để đếm số lần xuất hiện của chuỗi con, sử dụng hàm substr_count($string, $substring, $start, $length); lấy $length phần tử từ vị trí $start của chuỗi $string, và đếm số lần xuất hiện của chuỗi $substring trong chuỗi vừa lấy.

Sử dụng hàm str_split($str, $length) để cắt chuỗi thành từng phần đưa vào mảng, độ dài của mỗi phần là $length kí tự.

Ví dụ,

<?php
            $str = 'abcdefgh';
            $array = str_split($str, 2);
            echo '<pre>';
            print_r($array);
            echo '</pre>';
?>

Kết quả xuất ra là,

Array
(
    [0] => ab
    [1] => cd
    [2] => ef
    [3] => gh
)

Đây là clip số 43: bài tập chuẩn hóa chuỗi


Một chuỗi gọi là chuẩn khi:

- Không có khoảng trắng ở đầu và cuối chuỗi

- Giữa các từ chỉ có một khoảng trắng

- Viết hoa kí tự đầu tiên của chuỗi, của danh từ riêng

- Các kí tự còn lại ở dạng chữ thường

Đây là đoạn mã,

<?php
            $str = '   nGuyeN     VAn tEo     ';
           
            function formatString($str, $type = null) {
                        // chuyển về dạng chữ thường
                        $str = strtolower($str);
                        // bỏ khoảng trắng trái-phải
                        $str = trim($str);
                        // bỏ khoảng trắng thừa ở giữa
                        // chuyển chuỗi thành mảng
                        $array = explode(' ', $str);
                        // bỏ các phần tử khoảng trắng trong mảng
                        foreach ($array as $key => $value) {
                                    if(trim($value) == null) {
                                                unset($array[$key]);
                                                continue;
                                    }
                                    if($type == 'danh-tu') $array[$key] = ucfirst($value);
                        }
                        // chuyển mảng thành chuỗi
                        $result = implode(' ', $array);
                        // chuyển kí tự đầu tiên của chuỗi thành chữ hoa
                        $result = ucfirst($result);
                        return $result;
            }
           
            echo $result = formatString($str, 'danh-tu');

?>
-----------
Cập nhật [9/9/2020]
-----------
Xem thêm:
- Tổng hợp các bài viết về Ngu ngơ học làm web

Ngu ngơ học làm web (63) - Chuỗi trong PHP – phần 1

Tiếp theo của: Ngu ngơ học làm web (62) - Ứng dụng “Trắc nghiệm tính cách”
------

Phần 63. Chuỗi trong PHP – phần 1

Đây là clip số 36:


Chuỗi luôn được bao bởi cặp dấu nháy đôi (“”) hoặc cặp dấu nháy đơn (‘’). Để ý sự khác nhau của hai dấu này, hiểm nôm na: ‘’: là chuỗi tuyệt đối, “” là chuỗi tương đối. Muốn viết kí tự đặc biệt dùng dấu \.

Để nối chuỗi, sử dụng dấu chấm (.).

Để ý sự khác nhau khi viết 1.2 và 1 . 2, ví dụ:

$test1 = 1.2;
$test2 = 1 . 2;
echo gettype($test1); //double
echo gettype($test2); // string

Sử dụng hàm strlen() để lấy chiều dài của chuỗi. Tuy nhiên, nếu chuỗi có chứa dấu tiếng Việt (UTF-8) thì hàm strlen() không còn đúng nữa, hãy thay thế bằng hàm mb_strlen(). Ví dụ, mb_strlen($str,'utf-8');

Đây là clip số 37:


Hàm str_word_count() dùng để đếm số từ trong một chuỗi. Tuy nhiên, nếu chuỗi chứa dấu tiếng Việt, hàm này cũng không đúng.

Để chuyển chữ thường thành chữ hoa, sử dụng hàm strtoupper($str).

Để chuyển chữ hoa thành chữ thường, sử dụng hàm strtolower($str).

Để chuyển kí tự đầu tiên của chuỗi thành chữ hoa, sử dụng hàm ucfirst($str).

Để chuyển kí tự đầu tiên của chuỗi thành chữ thường, sử dụng hàm lcfirst($str).

Để chuyển kí tự đầu tiên của mỗi từ trong chuỗi thành chữ hoa, sử dụng hàm ucwords($str).

Có thể hiểu: chuỗi chính là mảng của các kí tự.

Hàm stripos($str, $str1): trả về vị trí của chuỗi $str1 đầu tiên trong chuỗi $str. Ví dụ hàm stripos("abcdefgh", "def"); sẽ trả về giá trị 3.

Hàm strripos($str, $str1): trả về vị trí của chuỗi $str1 cuối cùng trong chuỗi $str. Ví dụ hàm strripos("abcdefghdef", "def"); sẽ trả về giá trị 8.

Đây là clip số 38:


Để đảo ngược chuỗi, sử dụng hàm strrev(). Ví dụ, strrev('abc');

Để trích chuỗi con từ chuỗi mẹ, sử dụng hàm substr(). Ví dụ,

- substr('abcdef', 3); kết quả sẽ là ‘def’.

- substr('abcdef', 3, 2); kết quả sẽ là ‘de’.

- substr('abcdef', -2); kết quả sẽ là ‘ef’.

- substr('abcdef', -3, 2); kết quả sẽ là ‘de’.

Để xóa bỏ các kí tự nằm bên trái của chuỗi, sử dụng hàm ltrim($str, $params). Nếu $params bằng rỗng, sẽ xóa các kí tự sau: “\0” (NULL), “\t” (tab), “\n” (new line), “\x0B” (vertical tab), “\r” (carriage return), “ ” (khoảng trắng). Thường sử dụng hàm này để xóa bỏ các khoảng trắng ở phía trái của chuỗi.

Ví dụ, ltrim('abcdef', 'abc'); kết quả xuất ra là ‘def’.

Để xóa bỏ các kí tự nằm bên phải của chuỗi, sử dụng hàm rtrim($str, $params). Nếu $params bằng rỗng, sẽ xóa các kí tự sau: “\0” (NULL), “\t” (tab), “\n” (new line), “\x0B” (vertical tab), “\r” (carriage return), “ ” (khoảng trắng). Thường sử dụng hàm này để xóa bỏ các khoảng trắng ở phía phải của chuỗi.

Ví dụ, rtrim('abcdef', 'ef'); kết quả xuất ra là ‘abcd’.

Để xóa bỏ các kí tự nằm bên trái và phải của chuỗi, sử dụng hàm trim($str, $params). Nếu $params bằng rỗng, sẽ xóa các kí tự sau: “\0” (NULL), “\t” (tab), “\n” (new line), “\x0B” (vertical tab), “\r” (carriage return), “ ” (khoảng trắng). Thường sử dụng hàm này để xóa bỏ các khoảng trắng ở phía trái và phải của chuỗi.

Ví dụ, trim('abcdefab', 'ab'); kết quả xuất ra là ‘cdef’.

Bài tập: xóa bỏ khoảng trắng dư thừa trong một chuỗi. Ví dụ “         nguyễn     văn  tèo        ” sẽ chuyển thành “nguyễn văn tèo”.

Đây là đoạn mã:

<?php
            $str = '   nguyen    van   teo    ';
            // bỏ khoảng trắng ở hai đầu -> 'nguyen van teo'
            $str = trim($str);
            // chuyển chuỗi thành mảng
            $array = explode(' ', $str);
            // bỏ các phần tử khoảng trắng trong mảng
            foreach ($array as $key => $value) {
                        if(trim($value) == null) {
                                    unset($array[$key]);
                        }
            }
            // chuyển mảng thành chuỗi
            $str = implode(' ', $array);
            echo $str;
?>

Đây là clip số 39:


Để kiểm tra một chuỗi có rỗng hay không, sử dụng hàm: isset() và trim(). Ví dụ,

if(!isset($str) || trim($str) == '') {
                        echo 'Mảng rỗng';
            }else { echo 'Mảng không rỗng'; }

Để trích xuất nội dung trong một chuỗi, sử dụng hàm substr($str, $start, $length);

Ví dụ,

- substr('abcdef', 0); kết quả là ‘abcdef’.

- substr('abcdef', 0, 2); kết quả là ‘ab’.

- substr('abcdef', -3, 2); kết quả là ‘de’.

Ví dụ, xây dựng hàm rút gọn một chuỗi,

            function truncateString ($str, $maxChars = 50, $holder = '...') {
                        $result = $str;
                        if(strlen($str) > $maxChars) {
                                    $result = substr($str, 0, $maxChars).$holder;
                        }
                        return $result;
            }

Để lặp chuỗi, sử dụng hàm str_repeat($str, $n);

Đây là clip số 40:


Hàm chr() trả về kí tự tương ứng với mã ASCII truyền vào. Ví dụ, chr(65); sẽ xuất chữ A.

Hàm ord() trả về giá trị ASCII của kí tự đầu tiên trong chuỗi. Ví dụ, ord(‘Abc’); sẽ xuất số 65.

Sử dụng hàm parse_str() để chuyển các nội dung truy vấn vào các biến hoặc mảng. Ví dụ,

<?php
            $str = 'name=teo&age=10';
            parse_str($str);
            echo $name . '<br>';
            echo $age;
?>

Nếu truyền tham số cho hàm parse_str() là một mảng, thì nội dung truy vấn sẽ được đưa vào mảng. Ví dụ,

<?php
            $str = 'name=teo&age=10';
            parse_str($str, $array);
            echo '<pre>';
            print_r($array);
            echo '</pre>';
?>

Phân tích URL: sử dụng hàm parse_url() để truy xuất các thành phần protocol, domain name, path, … của một URL.

Chú ý: #hash hay #id_fragment là một vị trí trong trang web, được định vị bằng thuộc tính id của HTML. ví dụ, <div id="item1"></div>.

Ví dụ về phân tích một URL,

<?php
            $str = 'http://www.google.com:80/hinh-anh.php?id=123&page=6#item2';
            $data = parse_url($str);

            echo '<pre>';
            print_r($data);
            echo '</pre>';
?>

Kết quả xuất ra màn hình là,

Array
(
    [scheme] => http
    [host] => www.google.com
    [port] => 80
    [path] => /hinh-anh.php
    [query] => id=123&page=6
    [fragment] => item2

)
-----------
Cập nhật [9/9/2020]
-----------
Xem thêm:
- Tổng hợp các bài viết về Ngu ngơ học làm web

Ngu ngơ học làm web (62) - Ứng dụng “Trắc nghiệm tính cách”

Tiếp theo của: Ngu ngơ học làm web (61) - Bài tập về mảng
------

Phần 62. Ứng dụng “Trắc nghiệm tính cách”

Đây là clip số 32: viết ứng dụng “trắc nghiệm tính cách”


Lưu lại các tập tin dữ liệu để tiện sử dụng,

[questions.txt]

id|question
01|Bạn cảm thấy dễ chịu nhất khi nào?
02|Bạn thường bước đi:
03|Khi nói chuyện với người khác, bạn:
04|Khi nghỉ ngơi, bạn ngồi như thế nào?
05|Khi ngạc nhiên thích thú, bạn phản ứng thế nào?
06|Khi đi dự tiệc, bạn:
07|Bạn đang làm việc và tập trung cao độ thì bị cắt ngang. Bạn sẽ:
08|Bạn thích màu nào nhất trong các màu dưới đây?
09|Khi đi ngủ, lúc sắp ngủ, bạn nằm trong tư thế nào?
10|Bạn thường mơ mình:

[options.txt]

question_id|option_id|option|point
01|a|Vào buổi sáng|2
01|b|Vào buổi chiều và chớm tối|4
01|c|Vào đêm muộn|6
02|a|Khá nhanh với bước chân dài|6
02|b|Khá nhanh với bước chân ngắn|4
02|c|Không nhanh lắm, đầu ngẩng cao, hướng mặt ra cả thế giới|7
02|d|Không nhanh lắm, đầu cúi xuống|2
02|e|Rất chậm|1
03|a|Đứng, khoanh tay|4
03|b|Siết chặt hai bàn tay|2
03|c|Đặt một hoặc cả hai tay lên hông|5
03|d|Chạm hoặc đẩy người đối thoại|7
03|e|Sờ tai, xoa cằm hoặc nghịch tóc|6
04|a|Đầu gối cong, hai chân khép sát vào nhau|4
04|b|Hai chân bắt chéo nhau|6
04|c|Hai chân duỗi thẳng|2
04|d|Khoanh chân|1
05|a|Cười lớn|6
05|b|Cười, nhưng không cười lớn|4
05|c|Cười lặng lẽ|3
05|d|Cười bẽn lẽn, ngượng ngùng|5
06|a|Gây ồn ào khi đến để mọi người chú ý|6
06|b|Đến lặng lẽ, và tìm người bạn quen biết|4
06|c|Bước vào một cách lặng lẽ nhất, cố gắng không bị chú ý|2
07|a|Chào đón "kẻ phá đám"|6
07|b|Cảm thấy thực sự khó chịu|2
07|c|Mơ hồ giữa hai thái cực|4
08|a|Đỏ hoặc cam|6
08|b|Đen|7
08|c|Vàng hoặc xanh nhạt|5
08|d|Xanh lá cây|4
08|e|Xanh đậm hoặc tím|3
08|f|Trắng|2
08|g|Nâu hoặc xám|1
09|a|Nằm ngửa duỗi thẳng|7
09|b|Nằm úp, duỗi thẳng|6
09|c|Nằm nghiêng về một bên, hơi co|4
09|d|Tay gối đầu|2
09|e|Chùm đầu|1
10|a|Rớt|4
10|b|Đánh đấm hoặc vật lộn|2
10|c|Tìm kiếm một vật gì hoặc người nào|3
10|d|Bay hoặc trôi|5
10|e|Ít khi mơ|6
10|f|Giấc mơ của bạn luôn vui vẻ dễ thương|1

[result.txt]

min|max|result
0|20|Mọi người nghĩ bạn là người nhút nhát, hay run sợ, và thiếu quyết đoán, bạn là người luôn cần sự quan tâm, và luôn luôn muốn một ai đó khác đưa ra quyết định cho mình và chẳng bao giờ muốn tham gia bất cứ điều gì với bất cứ ai! Mọi người coi bạn là người hay lo lắng vào những vấn đề không tồn tại. Một số người nghĩ rằng bạn là người nhàm chán nhưng chỉ những người thật sự hiểu bạn mới biết rằng bạn không phải như thế.
21|30|Bạn bè của bạn coi bạn là người chịu khó và kén chọn. Họ coi bạn là người rất thận trọng, vô cùng cẩn thận, chậm và ổn định̀. Sẽ thật sự rất ngạc nhiên nếu bỗng nhiên bạn làm điều gì đó bốc đồng hay hấp tấp . Bạn là người có thể kiểm tra và suy xét tất cả mọi thứ một cách cẩn thận từ mọi góc độ và sau đó quyết định của bạn có thể đi ngược lại nó. Mọi người nghĩ rằng những phản ứng này là do một phần trong tính cách thận trọng của bạn.
31|40|Mọi người cảm thấy bạn nhạy cảm, thận trọng, kỹ lưỡng và thực tế. Họ coi bạn là người thông minh, tài năng và khiêm tốn. Bạn không kết bạn quá nhanh hoặc quá dễ dàng, nhưng bạn cực kỳ trung thành với bạn bè và cũng mong đợi từ bạn của mình một lòng trung thành trở lại. Những người bạn thật sự của bạn luôn biết rằng phải rất khó khăn mới có thể làm bạn mất đi sự tin tưởng ở bạn bè của bạn, nhưng việc đó cũng đồng nghĩa rằng một khi lòng tin tưởng đó đổ vỡ thì cũng khó mà hàn gắn.
41|50|Mọi người thấy bạn tươi mát, sinh động, vui vẻ, thiết thực, và luôn luôn thú vị. Bạn luôn là trung tâm của sự chú ý, nhưng vừa đủ cân bằng chứ không để cho nó vượt qua giới hạn. Mọi người thấy bạn là người tử tế, ân cần, một người hiểu biết và sẽ luôn luôn cổ vũ và giúp đỡ họ.
51|60|Mọi người coi bạn là một người thú vị, hay thay đổi, tánh tình bốc đồng; bạn được sinh ra để là một nhà lãnh đạo. Bạn là người quyết định mọi việc nhanh chóng, mặc dù không phải lúc nào những quyết định đó cũng chính xác. Mọi người coi bạn là một người táo bạo và mạo hiểm, và sẽ cố gắng thử thách bất cứ điều gì đó một lần. Bạn là người biết nắm bắt cơ hội và thích thú những cuộc phiêu lưu. Mọi người thích được ở bên bạn bởi vì những sự hứng thú mà bạn đem đến cho họ.
61|200|Bạn là người mà người khác cảm thấy cần phải đề phòng. Họ thấy bạn là người hão huyền và thích được làm trung tâm của mọi sự chú ý. Cá tính của bạn cũng rất trội và mạnh mẽ. Mọi người có thể khâm phục bạn và mong muốn được như bạn, nhưng họ lại không tin tưởng bạn và luôn ngần ngại, không muốn quá dính líu với bạn.

Qua clip này, để ý cách phân tích ứng dụng sẽ thực hiện, lưu dữ liệu, tổ chức dữ liệu.

Để ý mối liên hệ giữa thuộc tính name, value của một input kiểu radio trong HTML với các trường (field) trong cơ sở dữ liệu. Ví dụ,

<li><label><input type="radio" name="01" value="2"> Vào buổi sáng</label></li>

Ở đoạn mã HTML trên, thuộc tính name chứa id của một câu hỏi, còn value chứa số điểm tương ứng với mỗi câu trả lời của câu hỏi.

Để đọc dữ liệu từ một tập tin, sử dụng hàm file, ví dụ,

            $data = file('questions.txt') or die('Cannot read file');

            echo '<pre>';
            print_r($data);
            echo '</pre>';

Nếu  đọc thành công, hàm file trả về một mảng ($data), mỗi phần tử của mảng chứa một hàng dữ liệu của tập tin.

Dùng hàm array_shift(), để xóa đi phần tử đầu tiên.

Để ý cách tách một chuỗi thành một mảng mới. Ví dụ,

Từ chuỗi:

“01|Bạn cảm thấy dễ chịu nhất khi nào?”

Đưa vào mảng $arrQuestion có dạng:

[01] => Array
        (
            [question] => Bạn cảm thấy dễ chịu nhất khi nào?

        )

Đây là đoạn mã PHP,

            $data = file('questions.txt') or die('Cannot read file');
            // bỏ phần tử đầu tiên của mảng $data
            array_shift($data);
            $arrQuestion = array();
            foreach ($data as $key => $value) {
                        // tách chuôi $value dựa vào kí tự |, đưa vào mảng
                        $tmp_array     = explode('|', $value);
                        $id                   = $tmp_array[0];
                        $question         = $tmp_array[1];
                        $arrQuestion[$id] = array('question' => $question);
            }

Ví dụ khác,

Từ chuỗi:

“01|a|Vào buổi sáng|2
01|b|Vào buổi chiều và chớm tối|4
01|c|Vào đêm muộn|6”

Đưa vào mảng $arrOptions có dạng:

[01] => Array
        (
            [a] => Array
                (
                    [option] => Vào buổi sáng
                    [point] => 2

                )

            [b] => Array
                (
                    [option] => Vào buổi chiều và chớm tối
                    [point] => 4

                )

            [c] => Array
                (
                    [option] => Vào đêm muộn
                    [point] => 6

                )

        )

Đây là đoạn mã,

            $data = file('options.txt') or die('Cannot read file');
            array_shift($data);
            $arrOptions = array();
            foreach ($data as $key => $value) {
                        $tmpArr = explode('|', $value);
                        $questionID     = $tmpArr[0];
                        $optionID                    = $tmpArr[1];
                        $answer                       = $tmpArr[2];
                        $point                          = $tmpArr[3];

                        $arrOptions[$questionID][$optionID]['option'] = $answer;           
                        $arrOptions[$questionID][$optionID]['point'] = $point;     
            }
           
             echo '<pre>';
             print_r($arrOptions);
             echo '</pre>';           

Đây là clip số 33: viết ứng dụng “trắc nghiệm tính cách” (tiếp theo)


Để ý, khi bấm nút submit của Form, toàn bộ dữ liệu của Form sẽ được gửi tới trang result.php, nhờ khai báo trong <form action="result.php" method="POST" name="mainForm"> tại index.php.

Để ý, trong <input type=“radio” name=“” value=“”>, hiểu nôm na, giá trị của thuộc tính name là tên chỉ mục trong biến $_POST, thuộc tính value chứa giá trị của input, và sẽ được gửi về Server tại vị trí $_POST[‘name’] tương ứng. Có thể bấm nút submit, rồi dùng dòng lệnh này để kiểm tra:

<?php
            echo '<pre>';
            print_r($_POST);
            echo '</pre>';
?>

Đây là clip số 34: viết ứng dụng “trắc nghiệm tính cách” (hết)


Lưu lại mã nguồn để tham khảo,

[function_option.php]

<?php
            $data = file('options.txt') or die('Cannot read file');
            array_shift($data);
            $arrOptions = array();
            foreach ($data as $key => $value) {
                        $tmpArr = explode('|', $value);
                        $questionID     = $tmpArr[0];
                        $optionID                    = $tmpArr[1];
                        $answer                                   = $tmpArr[2];
                        $point                          = $tmpArr[3];

                        $arrOptions[$questionID][$optionID]['option'] = $answer;           
                        $arrOptions[$questionID][$optionID]['point'] = $point;     
            }
?>

[function_question.php]

<?php
            $data = file('questions.txt') or die('Cannot read file');
            array_shift($data);
            $arrQuestions = array();
            foreach ($data as $key => $value) {
                        $tmp_array     = explode('|', $value);
                        $id                   = $tmp_array[0];
                        $question         = $tmp_array[1];
                        $arrQuestions[$id] = array('question' => $question);
            }
?>

[result.php]

<!DOCTYPE html>
<html lang="en">
<head>
            <meta charset="UTF-8">
            <title>Trắc nghiệm tính cách</title>
            <link type="text/css" rel="stylesheet" href="style.css">
</head>
<body>
<?php
            // Đọc tập tin questions.txt
            $data = file('questions.txt') or die('Cannot read file');

            $point = 0;
            array_shift($data);

            foreach ($data as $key => $value) {
                        $tmpArr = explode('|', $value);
                        $id       = $tmpArr[0];
                        $point = $point + $_POST[$id];
            }
            // Đọc tập tin result.txt
            $data = file('result.txt') or die('Cannot read file');
            array_shift($data);
            foreach ($data as $key => $value) {
                        $tmpArr = explode('|', $value);
                        $min    = $tmpArr[0];
                        $max   = $tmpArr[1];
                        $content           = $tmpArr[2];
                        if($point >= $min && $point <= $max) {
                                    $result = $content;
                                    break;
                        }
            }

            // echo '<pre>';
            // print_r($_POST);
            // echo '</pre>';
?>
            <div class="content">
                        <h1>Kết quả trắc nghiệm tính cách</h1>
                        <p><b>Tổng số điểm của bạn là: </b><?php echo $point;?></p><p style='margin-top: 10px; text-align: justify;'><b>Kết quả trắc nghiệm của bạn: </b><?php echo $result;?></p>
            </div>
           
</body>
</html>

[index.php]

<!DOCTYPE html>
<html lang="en">
<head>
            <meta charset="UTF-8">
            <title>Trắc nghiệm tính cách</title>
            <link type="text/css" rel="stylesheet" href="style.css">
</head>

<body>
<?php
            require_once 'function_question.php'; //$arrQuestions
            require_once 'function_option.php'; //$arrOptions

            $newArr = array();
            foreach ($arrQuestions as $key => $value) {
                        $newArr[$key]['question'] = $value['question'];
                        $newArr[$key]['sentences'] = $arrOptions[$key];
            }
?>
            <div class="content">
                        <h1>Trắc nghiệm tính cách</h1>
                        <form action="result.php" method="POST" name="mainForm">
                        <?php
                                    $i = 1;
                                    foreach ($newArr as $key => $value) {
                                                echo '<div class="question">';
                                                echo '<p><span>Câu hỏi '.$i.': </span>'.$value['question'].'</p>';
                                                echo '<ul>';
                                                foreach ($value['sentences'] as $keyC => $valueC) {
                                                            echo '<li><label><input type="radio" name="'.$key.'" value="'.$valueC["point"].'"> '.$valueC["option"].'</label></li>';
                                                }
                                                echo '</ul>';
                                                $i++;
                                                echo '</div>';
                                    }
                        ?>
                        <input type="submit" value="Kiểm tra" name="submit">
                        </form>
                       
            </div>
</body>
</html>

[style.css]

* {
            margin: 0px;
            padding: 0px;
}

.content {
            width: 800px;
            padding: 10px;
            border: 2px solid #ddd;
            height: auto;
            margin: 20px auto;
}

.content h1 {
            color: red;
            text-align: center;
            padding: 10px 0px;
}

.question {
            font-size: 18px;
            line-height: 24px;
}

.question p {
            font-size: 20px;
            line-height: 30px;
}

.question p span {
            font-weight: bold;
}

.question ul li {
            list-style-type: none;
            padding-left: 40px;
}

.content input[type="submit"] {
            margin: 0 auto;
            display: block;
            height: 40px;
            width: 100px;
            border-radius: 5px;
            font-weight: bold;
            font-size: 18px;
}


Đây là clip số 35: ôn tập về mảng


-----------
Cập nhật [9/9/2020]
-----------
Xem thêm:
- Tổng hợp các bài viết về Ngu ngơ học làm web

Ngu ngơ học làm web (61) - Bài tập về mảng

Tiếp theo của: Ngu ngơ học làm web (60) - Thao tác trên mảng – phần 2
------

Phần 61. Bài tập về mảng

Đây là clip số 31:


Bài tập này tạo một select box bằng PHP. Cùng làm theo clip, suy nghĩ về sự khác nhau khi tạo select box chỉ dùng HTML và khi tạo select box dùng PHP. Suy nghĩ về lập trình client-side (chỉ dùng HTML) và server-side (có dùng thêm PHP).

Ví dụ, mã HTML của select box:

<div class="content">
                        <select name="group" id="group" style="width: 200px">
                                    <option value="1">Admin</option>
                                    <option value="2">Manager</option>
                                    <option value="3">Member</option>
                                    <option value="4">Guest</option>
                        </select>
            </div>

Vẫn đoạn mã của select box trên, nếu viết bằng PHP sẽ là,

            <div class="content">
            <?php
                        $group = array('1' => 'Admin', '2' => 'Manager', '3' => 'Member', '4' => 'Guest');
                        $xhtml = '';
                  
                        if(!empty($group)) {
                                    $xhtml .= '<select name="group" id="group" style="width: 200px">';
                                    foreach ($group as $key => $value) {
                                                if($key == '3') {
                                                            $xhtml .= '<option value="'.$key.'"selected = "selected">'.$value.'</option>';           
                                                } else {
                                                            $xhtml .= '<option value="'.$key.'">'.$value.'</option>';
                                                }
                                    }
                                    $xhtml .= '</select>';
                        }
                        echo $xhtml;
            ?>                                          
            </div>

Khi dùng PHP để tạo select box bản chất là dùng một biến để chứa mã HTML, sau đó dùng lệnh echo để xuất lại mã HTML này ra trang hiện tại. Vì PHP là ngôn ngữ lập trình nên có thể xuất mã HTML một cách linh hoạt hơn.

Vẫn đoạn mã của select box trên, nếu viết bằng PHP, và viết bằng một hàm để sử dụng lại sẽ là,

<div class="content">
            <?php
                        $group = array('1' => 'Admin', '2' => 'Manager', '3' => 'Member', '4' => 'Guest');
                        $city  = array('ct' => 'Cần Thơ', 'hg' => 'Hậu Giang', 'bt' => 'Bến Tre');
                        function createSelectbox($name, $attributes, $array, $keySelect) {
                                    $xhtml = '';

                                    if(!empty($array)) {
                                                $xhtml .= '<select name="'.$name.'" id="'.$name.'" style="'.$attributes.'">';
                                                foreach ($array as $key => $value) {
                                                            if($key == $keySelect) {
                                                                        $xhtml .= '<option value="'.$key.'"selected = "selected">'.$value.'</option>';        
                                                            } else {
                                                                        $xhtml .= '<option value="'.$key.'">'.$value.'</option>';
                                                            }
                                                }
                                                $xhtml .= '</select>';
                                    }
                                    return $xhtml;
                        }
                        $groupSelect = createSelectbox('group', 'width: 200px', $group, 4);
                        $citySelect = createSelectbox('city', 'width: 300px', $city, 'hg');
                        echo $groupSelect;
                        echo '<br>';
                        echo $citySelect;
            ?>                                          
            </div>

Tới thời điểm này, đã có khả năng đọc và hiểu phần nào đó mã nguồn của ứng dụng openemr. Do ứng dụng openemr được viết theo kiểu thuần PHP, chưa có áp dụng mô hình MVC nên rất khó đọc và khó hiểu mã nguồn. Có thể mở một tập tin mã nguồn để xem cách họ viết bằng PHP như thế nào, ví dụ mở tập tin openemr/interface/forms/newpatient/common.php.


Qua mỗi bài học lại thấy kiến thức của mình được tăng thêm một chút, thấy cứng cáp hơn, tự tin hơn một chút. Con đường vẫn còn dài ở phía trước, cứ từ từ, chầm chậm, học tiếp.
-----------
Cập nhật [9/9/2020]
-----------
Xem thêm:
- Tổng hợp các bài viết về Ngu ngơ học làm web