Menu

8/8/20

Thêm giỏ hàng (add cart) cho project bán hàng

 Tính năng thêm giỏ hàng có rất nhiều thuật toán code dựa vào cách lưu trữ và tư duy của coder.

Chúng ta dùng mảng SESSION để lưu thông tin mã hàng + số lượng. Ví dụ đối với project bán sách:

SESSION['cart']=['td01'=>3, 'td02'=> 4]


8/4/20

Mô Hình MVC




MVC- viết tắt của Model, View Controller là 1 kiến trúc hay 1 mô hình phát triển web.

+Controller: Nhận nhiệm vụ xử lí các yêu cầu từ user gửi lên theo dạng URL để thao tác với Model bóc tách dữ liệu từ database nếu cần để hiện thị ra View


+Model : Thực hiện các yêu cầu từ Controller, nhận nhiệm vụ tương tác với database, thực hiện câu lệnh thêm- xóa- sửa..  trả kết quả về Controller và hiển thị ra View.

+View: Nơi chứa các đoạn code HTML, form, ảnh... để hiện thị lên trình duyệt web tương tác với người dùng, là kết quả hiện thị sau khi Controller đã xử lí xong yêu cầu từ user

Ưu điểm của mô hình MVC.

-Thể hiện sự chuyên nghiệp, logic trong lập trình web về việc phân tích, thiết kế...

-Dễ nâng cấp, bảo trì, sửa chửa do chia rõ từng Module (ta căn cứ theo nhiêm vụ từng module)

Nhược điểm:

-Không nhất thiết tuân theo quy chuẩn đã nêu vì tùy ý của lập trình viên mà đưa các class/function, yêu cầu xử lí khác nhau.

- Không nên áp dụng đối với những yêu cầu nhỏ về việc lấy nhanh kết quả từ database hiển thị ra View.

-Gây khó khăn 1 chút cho những người mới làm quen với lập trình web vì cần hiểu rõ mô hình MVC và chức năng của từng module (M-V-C)...


8/2/20

Ứng dụng SESSION trong trang admin

Trong project tên myproject, chúng ta tạo 1 folder có tên là admin, cấu trúc thư mục như sau:

Bước 1, chúng ta thêm file index.php trong thư mục admin thêm 1 câu chào:

Chào mừng bạn đã truy cập vào trang web này!

Rồi truy cập vào địa chỉ project : localhost/myproject/admin để kiểm tra lại câu chào.

Xây dựng  1 form dangnhap.html cơ bản:

<?php
if (!isset($_SESSION)) session_start();
include 'function.php';
$u= postIndex('u');
$p= postIndex('p');
if ($u=='admin' && $p=='123456') //dung
{
    $_SESSION['admin']="Admin";
    header('location:index.php');
    exit;
}
header('location:dangnhap.html');

Bước 2: xây dựng file funciton.php có nội dung dùng để lấy giá trị username/password của $_POST được nhập từ form dangnhap.html

<?php
function getIndex($key, $valueDefault='')
{
    return isset($_GET[$key])?$_GET[$key]:$valueDefault;
}

function postIndex($key, $valueDefault='')
{
    return isset($_POST[$key])?$_POST[$key]:$valueDefault;
}

Bước 3: Xây dựng lại trang index.php khi người dùng đăng nhập thanh công, và trang đăng xuất nếu đăng nhập thất bại. Dùng lệnh header() để chuyển hướng trang web

Trang index.php

<?php
if (!isset($_SESSION)) session_start();
if (!isset($_SESSION['admin']))
{
    header('location:dangnhap.html');
    exit;
}
?>
Trang chu admin: Chao <?php echo $_SESSION['admin'] ?> <hr>
<a href="dangxuat.php">Thoat</a>
<hr>
<a href="themsp.php">Them sp</a> <br>

Trang dangxuat.php

<?php
if (!isset($_SESSION)) session_start();
unset($_SESSION['admin']);
header('location:dangnhap.html');

Bước 4: Khi người dùng click vào chức năng thêm sp trên trang index.php, ta cho phép truy xuất đến chức năng thêm sp

Nội dung file themsanpham.php

<?php
if (!isset($_SESSION)) session_start();
if (!isset($_SESSION['admin']))
{
    header('location:dangnhap.html');
    exit;
}
?>
chuc nang them sp







$_SESSION ARRAY

Session dùng để lưu trữ thông tin, trao đổi dữ liệu giữa các trang web.

các ưu điểm so với cookie:

-cookie phải gửi dữ liệu (cookie-data) lên webserver khi request 1 URL=> giảm hiệu suất truy cập web, với session dữ liệu được lưu trên webserver.

-dữ liệu session ko lưu tại computer users, mà lưu tại server==> an toàn hơn, ko bị đánh cấp, sửa đổi.

$_SESSION được ứng dụng trong việc:

- chức năng đăng nhập (quyền truy cập đến 1 trang sau khi đã login)/ đăng xuất trang web

-đếm số lượt truy cập web

-tính năng mua hàng (giỏ hàng) trong website bán hàng...

Ta cần dùng lệnh session_start(); để khởi tạo biến session, resume giá trị cho nó.

Ví dụ liên kết biến $_SESSION['dem'] giữa các trang: vidu1, và vidu2 có chức năng tăng $n- lượt truy cập, vidu3, hủy giá trị biến $_SESSION['dem'], để hủy toàn bộ mảng $_SESSION ta dùng lệnh: session_destroy();

file vidu1.php

<?php

if(!isset($_SESSION)) session_start();

$n=isset($_SESSION['dem'])?$_SESSION['dem']:0;

$n++;

$_SESSION['dem']=$n;

?>

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <title>session</title>

</head>

<body>

    <h1>VD1</h1>

    ban da truy cap website nay <?php echo $n ?>lan

    <a href="vidu2.php">

</html>

file vidu2.php

<?php

if(!isset($_SESSION)) session_start();

$n=isset($_SESSION['dem'])?$_SESSION['dem']:0;

$n++;

$_SESSION['dem']=$n;

?>

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <title>session</title>

</head>

<body>

    <h1>VD2</h1>

    ban da truy cap website nay <?php echo $n ?> lan

    <a href="vidu1.php">VD1</a>

    <a href="vidu3.php">reset session</a>

</html>

file vidu3

<?php

if(!isset($_SESSION)) session_start();

unset($_SESSION['dem']);

?>

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <title>session</title>

</head>

   <body>

<h1>VD3</h1>

Quay la vidu1

<a href="vidu1.php">VD1</a>

    </body>

</html>






8/1/20

Lấy giá trị mảng $_GET/ $_POST trong mô hình MVC

Việc lấy giá trị mảng $_POST và $_GET sẽ dễ dàng và thuận tiện trong ứng dụng mô hình MVC.

Xây dựng cấu trúc thư mục như sau:


trong hàm get/postindex ta dùng hàm isset() để kiểm tra sự tồn tại của biến, nếu ko tồn tại trả về kết quả boolean là false. Giá trị $defaultValue dùng để thiết lập giá trị mặc định khi $index ko truyền vào.. Trong MVC ta chọn cụ thể controller=abc..., nếu ko tồn tại, sẽ chọn controller mặc định là HomeController.

$c=getIndex('controller','HomeController');
$obj=new $c();


Nội dung file function.php,

<?php
function getIndex($index, $defaultValue='')
{
    if (isset($_GET[$index])) return $_GET[$index];
    else return $defaultValue;
    
}

function postIndex($index, $defaultValue='')
{
    if (isset($_POST[$index])) return $_POST[$index];
    else return $defaultValue;
    
}

 Nội dung demo.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Login Form</title>
</head>
<body>
    <form action="demo.php" method="POST">
        Username<input type="text" name="username" ><br>
        Password<input type="password" name="password"><br>
        <input type="submit" name="submit">

    </form>
</body>
</html>

 Nội dung demo.php

<?php
include 'myclass/function.php';
$u=postIndex('username');
$p=postIndex('password');


echo "ban da nhap vao username: $u"." password: $p";




autoloadclass-Tự động load function ()


Autoloadclass được ứng dụng nhiều trong project, trong lập trình OOP (hướng đối tượng) khi tạo 1 file php chúng ta cần include thủ công rất nhiều class đã có sẵn ở thư mục ngoài, việc này tốn thời gian và phiền phức, có khi chúng ra chả biết nó ở nơi nao mà nạp vào bằng lệnh include.

Từ nhu cầu đó trong PHP đã xây dựng 1 spl_autoload_register cho phép đăng ký hàm autoloadclass mà bạn đã xây dựng sẵn.


Tạo 1 project mới,

cấu trúc thư mục như sau:




trong thư mục myclass, tạo 1 class A.php có nội dung như sau:

<?php
class A
{
    public $a1;
    public function __construct()
    {
        $this->a1=10;
        echo "<br> Ham tao lop A <br>";
    }
    public function f1A()
    {
        
        echo "<br> Ham F1 cua class A duoc goi <br>";
    }
}

trong file demo.php

<?php
function autoloadclass($className)
{
    if(is_file("myclass/$className.php"))
    {
        include "myclass/$className.php";
    }
    else{
        echo "Khong ton tai (chua tao) $className.php";
        exit;
    }
 
}
spl_autoload_register('autoloadclass');

$x = new A();
echo "chung ta hay goi method F1A cua class A <br>";
$x->f1A();

Kết quả:

Ham tao lop A
chung ta hay goi method F1A cua class A

Ham F1 cua class A duoc goi

Từ ví dụ trên ta thấy ==>  ko cần include class A.php vào file demo.php, khi bạn định nghĩa 1 class B.php mới trong myclass thì chúng ta có thể gọi trực tiếp nó bên file demo.php.

Mảng $_SERVER

Mảng $_SERVER là 1 mảng được xác định trước, được thiết lập bới máy chủ web (wampserver)

 Thực hiện print toàn bộ thông tin về mảng $_SERVER

 <?php

echo "<pre>";

print_r($_SERVER);

kết quả:

 -Array

(

    [HTTP_HOST] => localhost

    [HTTP_CONNECTION] => keep-alive

    [HTTP_UPGRADE_INSECURE_REQUESTS] => 1

    [HTTP_USER_AGENT] => Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36

    [HTTP_ACCEPT] => text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9

    [HTTP_SEC_FETCH_SITE] => same-origin

    [HTTP_SEC_FETCH_MODE] => navigate

    [HTTP_SEC_FETCH_USER] => ?1

    [HTTP_SEC_FETCH_DEST] => document

    [HTTP_REFERER] => http://localhost/demo/mangserver/

    [HTTP_ACCEPT_ENCODING] => gzip, deflate, br

    [HTTP_ACCEPT_LANGUAGE] => en-US,en-CA;q=0.9,en;q=0.8,zh-CN;q=0.7,zh;q=0.6

    [PATH] => E:\Program Files (x86)\Common Files\Intel\Shared Files\cpp\bin\Intel64;E:\Windows\system32;E:\Windows;E:\Windows\System32\Wbem;E:\Windows\System32\WindowsPowerShell\v1.0\;E:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;E:\wamp64\bin\php\php7.4.0;

    [SystemRoot] => E:\Windows

    [COMSPEC] => E:\Windows\system32\cmd.exe

    [PATHEXT] => .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC

    [WINDIR] => E:\Windows

    [SERVER_SIGNATURE] =>

Apache/2.4.41 (Win64) PHP/7.3.12 Server at localhost Port 80

 

    [SERVER_SOFTWARE] => Apache/2.4.41 (Win64) PHP/7.3.12

    [SERVER_NAME] => localhost

    [SERVER_ADDR] => ::1

    [SERVER_PORT] => 80

    [REMOTE_ADDR] => ::1

    [DOCUMENT_ROOT] => E:/wamp64/www

    [REQUEST_SCHEME] => http

    [CONTEXT_PREFIX] =>

    [CONTEXT_DOCUMENT_ROOT] => E:/wamp64/www

    [SERVER_ADMIN] => wampserver@wampserver.invalid

    [SCRIPT_FILENAME] => E:/wamp64/www/demo/mangserver/mangserver.php

    [REMOTE_PORT] => 50746

    [GATEWAY_INTERFACE] => CGI/1.1

    [SERVER_PROTOCOL] => HTTP/1.1

    [REQUEST_METHOD] => GET

    [QUERY_STRING] =>

    [REQUEST_URI] => /demo/mangserver/mangserver.php

    [SCRIPT_NAME] => /demo/mangserver/mangserver.php

    [PHP_SELF] => /demo/mangserver/mangserver.php

    [REQUEST_TIME_FLOAT] => 1596252364.334

    [REQUEST_TIME] => 1596252364

 

 

)

In ra các thông tin cần thiết:

<?php

echo "tra ve ten file php dang chay <br>";

echo $_SERVER['SCRIPT_FILENAME']; echo "<br>";

echo "tra ve ten may chu <br>";

echo $_SERVER['SERVER_NAME'];echo "<br>";

echo "tra ve duong dan thu muc dang chay file php <br>";

echo $_SERVER['HTTP_REFERER'];echo "<br>";

echo "tra ve ten&phien ban webserver <br>";

echo $_SERVER['SERVER_SOFTWARE'];echo "<br>";

echo "tra ve phuong thuc yeu cau";

echo $_SERVER['REQUEST_METHOD'];echo "<br>";

echo "The query string is: ".$_SERVER['QUERY_STRING'];echo     "<br>";

kết quả:

tra ve ten file php dang chay
E:/wamp64/www/demo/mangserver/mangserver.php
tra ve ten may chu
localhost
tra ve duong dan thu muc dang chay file php
http://localhost/demo/mangserver/
tra ve ten&phien ban webserver
Apache/2.4.41 (Win64) PHP/7.3.12

tra ve phuong thuc yeu cau

GET
The query string is: