Bài viết mới:

Thứ Sáu, 24 tháng 2, 2017

Học lập trình trực tuyến cùng chuyên gia tại kyna.vn


Nếu bạn đang tìm kiếm 1 website học lập trình trực tuyến nội dung chất lượng, học phí phù hợp thì kyna.vn là 1 điểm đến đáng tin cậy cho bạn. Mình đã học qua nhiều khóa tại đây và đánh giá cao website này. Mình xin giới thiệu các khóa học lập trình bên dưới kèm theo mã giảm giá 40% học phí: AITUAN40

Cách đăng ký mua khóa học rất đơn giản bạn chỉ cần click vào link của khóa học muốn học sau đó ấn đăng ký để thêm vào giỏ hàng. Thực hiện nhập mã giảm giá bên trên và chọn phương thức thanh toán là xong.

Danh sách khóa học


Lập trình IOS (300.000 đ)















Responsive Design (100.000 đ)












Java cơ bản (400.000 đ)



Java nâng cao (300.000 đ)

Ngoài ra còn nhiều khóa học rất hay khác mà bạn có thể xem tại địa chỉ https://kyna.vn/danh-sach-khoa-hoc/it-va-lap-trinh. Chúc các bạn học tốt 😊. Mọi thắc mắc các bạn comment bên dưới nhé. 

Thứ Hai, 20 tháng 2, 2017

Tạo Popup Social cho website

Khi các bạn vào một số website tin tức, blog nổi tiếng bạn sẽ thường thấy website có những nút social để người dùng có thể like hoặc share website của bạn lên mạng xã hội. Ở bài viết này mình sẽ hướng dẫn bạn tạo 1 Popup Social chứa nút like và share của Facebook và Google Plus cực cool cho website của bạn, điều này sẽ giúp ích rất nhiều trong việc SEO.


Bước 1: Dán đoạn mã sau vào trong thẻ body ở trang web của bạn:

<div class="popupSocial" >
<div class="fb-like" data-href="UrlTrangweb" data-layout="box_count" data-action="like" data-size="small" data-show-faces="true" data-share="true"></div>
<br/><br/>
<div style="width:60px">
<script src="https://apis.google.com/js/platform.js" async defer></script>
<g:plusone></g:plusone>
</div>
</div>

Bạn nhớ thay thế UrlTrangweb bằng URL trang web của bạn nhé.

Bước 2: Bổ sung đoạn CSS sau vào trang web:

.popupSocial{
z-index:999; text-align:center;
background:#2c4584; position:fixed; 
top:45%; left:10px; padding:20px 10px; 
border:1px solid #333; border-radius:10px;
  } 
@media screen and (max-width:768px){
 .popupSocial{
display:none;
}


Ở đoạn CSS trên bạn có thể thay đổi giá trị của thuộc tính background để đổi màu nền của popup, hoặc thay thế  lệnh left:10px; thành lệnh right:10px; nếu muốn popup neo về bên phải trang web thay vì bên trái .

Khi chạy website trên điện thoại sẽ xảy ra trường hợp là popup che mất trang vì vậy mình đã bổ sung đoạn lệnh @media screen ... để ẩn popup đổi với các thiết bị có chiều rộng <= 768px


Kết quả là bạn sẽ có 1 popup social giống như blog Chuyên lập trình này vậy. 😋

Thứ Bảy, 11 tháng 2, 2017

Làm thế nào để phân trang dữ liệu với PHP

Làm thế nào để phân trang dữ liệu với PHP là một câu hỏi mà nhiều bạn mới học PHP thường đặt ra. Ngày hôm nay mình sẽ hướng dẫn bạn viết code để thực hiện điều đó.


Tạo file Paginator.class.php


Đầu tiên chúng ta cần tạo 1 class Paginator như sau:

<?php
class Paginator {
     private $_conn;
        private $_limit;
        private $_page;
        private $_query;
        private $_total;
}

Sau đó bổ sung cho class thêm 1 constructor.


public function __construct( $conn, $query ) {
    $this->_conn = $conn;
    $this->_query = $query;
    $rs= $this->_conn->query( $this->_query );
    $this->_total = $rs->num_rows;
}

Khá đơn giản phải không? Constructor gán giá trị cho thuộc tính $_conn$_query bằng 2 tham số $conn$query được truyền vào và thực hiện lệnh truy vấn cần thiết, tiếp theo là gán tổng số record được lấy từ lệnh truy vấn và gán qua thuộc tính $_total. Thuộc tính $_total rất cần thiết để tạo ra các liên kết phân trang.

Lưu ý: ở ví dụ mình không có thực hiện bất kỳ việc bắt lỗi và không tạo bất kỳ ràng buộc nào cho các tham số nhưng trong một ứng dụng thực tế thì bạn cần bổ sung thêm việc bắt lỗi và tạo các ràng buộc cần thiết cho tham số để ứng dụng web được bảo mật tốt nhất.

Lấy dữ liệu theo trang


Bây giờ chúng ta hãy tạo một phương thức để đánh số trang dữ liệu và lấy dữ liệu theo số trang. 

public function getData( $limit = 10, $page = 1 ) { 
    $this->_limit   = $limit;
    $this->_page    = $page;
    if ( $this->_limit == 'all' ) {
        $query      = $this->_query;
    } else {
        $query      = $this->_query . " LIMIT " . ( ( $this->_page - 1 )
* $this->_limit ) . ", $this->_limit";
    }
    $rs             = $this->_conn->query( $query );
    while ( $row = $rs->fetch_assoc() ) {
        $results[]  = $row;
    }
   $result         = new stdClass();
    $result->page   = $this->_page;
    $result->limit  = $this->_limit;
    $result->total  = $this->_total;
    $result->data   = $results;
    return $result;
}

Tham số $limit đại diện cho số lượng record hiển thị trên trang và tham số $page đại diện cho số trang mà bạn đang truy cập. Theo mặc định mình gán $limit = 10, bạn có thể thay đổi giá trị này tùy ý muốn. Đoạn lệnh if else để kiểm tra xem nếu người dùng muốn lấy dữ liệu theo trang thay vì xem toàn bộ. Nếu người dùng muốn xem dữ liệu theo trang thì mình tiến hành nối thêm chuỗi LIMIT ... để lấy dữ liệu theo trang đó dựa vào lệnh truy vấn SQL. Cuối cùng là thực hiện truy vấn cơ sở dữ liệu theo biến $query, gán qua đối tượng result và trả về kết quả.

Hiển thị liên kết phân trang


Việc hiển thị liên kết phân trang là rất quan trọng. Bạn phải code để các liên kết được hiển thị hợp lý khiến người dùng dễ sử dụng. Ở bài viết này thì bạn không cần lo về vấn đề này vì các liên kết được tạo ra sẽ rất hợp lý và logic.

Bây giờ chúng ta sẽ tạo phương thức để có được các liên kết.

<?php
public function createLinks( $links, $list_class ) {
    if ( $this->_limit == 'all' ) {
        return '';
    }
    $last       = ceil( $this->_total / $this->_limit );
    $start      = ( ( $this->_page - $links ) > 0 ) ? $this->_page - $links
: 1;
    $end        = ( ( $this->_page + $links ) < $last ) ?
$this->_page + $links : $last;
    $html       = '<ul class="' . $list_class . '">';
    $class      = ( $this->_page == 1 ) ? "disabled" : "";
    $html       .= '<li class="' . $class . '"><a href="?limit='
.$this->_limit . '&page=' . ( $this->_page - 1 )
. '">&laquo;</a></li>';
    if ( $start > 1 ) {
        $html   .= '<li><a href="?limit=' . $this->_limit .
'&page=1">1</a></li>';
        $html   .= '<li class="disabled"><span>...</span></li>';
    }
    for ( $i = $start ; $i <= $end; $i++ ) {
        $class  = ( $this->_page == $i ) ? "active" : "";
        $html   .= '<li class="' . $class
. '"><a href="?limit=' . $this->_limit
. '&page=' . $i . '">' . $i . '</a></li>';
    }
    if ( $end < $last ) {
        $html   .= '<li class="disabled"><span>...</span></li>';
        $html   .= '<li><a href="?limit=' . $this->_limit . '&page='
. $last . '">' . $last . '</a></li>';
    }
    $class      = ( $this->_page == $last ) ? "disabled" : "";
    $html       .= '<li class="' . $class . '"><a href="?limit='
. $this->_limit. '&page=' . ( $this->_page + 1 )
. '">&raquo;</a></li>';
    $html       .= '</ul>'; 
    return $html;
}

Index.php 


Bây giờ chúng ta sẽ tạo ra tập tin index.php để sử dụng class Paginator. Nội dung file index.php chỉ đơn giản như thế này: 

<!DOCTYPE html>
    <head>
        <title>PHP Pagination</title>
        <link rel="stylesheet" href="css/bootstrap.min.css">
    </head>
    <body>
        <div class="container">
                <div class="col-md-10 col-md-offset-1">
                <h1>PHP Pagination</h1>
                <table class="table table-striped table-condensed
table-bordered table-rounded">
                        <thead>
                                <tr>
                                <th>City</th>
                                <th width="20%">Country</th>
                                <th width="20%">Continent</th>
                                <th width="25%">Region</th>
                        </tr>
                        </thead>
                        <tbody></tbody>
                </table>
                </div>
        </div>
        </body>
</html>


Sử dụng Paginator


Sử dụng class Paginator bằng cách thêm đoạn lệnh sau vào đầu file index.php:

<?php
    require_once 'Paginator.class.php';
    $conn       = new mysqli( '127.0.0.1', 'root', 'root', 'world' );
    $limit      = ( isset( $_GET['limit'] ) ) ? $_GET['limit'] : 25;
    $page       = ( isset( $_GET['page'] ) ) ? $_GET['page'] : 1;
    $links      = ( isset( $_GET['links'] ) ) ? $_GET['links'] : 7;
    $query      = "SELECT City.Name, City.CountryCode, Country.Code,
Country.Name AS Country, Country.Continent,
Country.Region FROM City, Country
WHERE City.CountryCode = Country.Code";
    $Paginator  = new Paginator( $conn, $query );
    $results    = $Paginator->getData( $limit, $page );
?>

Hiển thị kết quả


Bây giờ để hiển thị kết quả thu được thì bạn thêm đoạn lệnh sau vào thẻ tbody:

<?php for( $i = 0; $i < count( $results->data ); $i++ ) : ?>
        <tr>
                <td><?php echo $results->data[$i]['Name']; ?></td>
                <td><?php echo $results->data[$i]['Country']; ?></td>
                <td><?php echo $results->data[$i]['Continent']; ?></td>
                <td><?php echo $results->data[$i]['Region']; ?></td>
        </tr>
<?php endfor; ?>


Liên kết phân trang


Để hiển thị các liên kết phân trang bên dưới table thì bạn thêm đoạn lệnh sau vào dưới thẻ table:

<?php echo $Paginator->createLinks( $links, 'pagination pagination-sm' ); ?>

Kết quả ta được như hình dưới.

Project demo của bài viết bạn có thể tải về tại địa chỉ goo.gl/xEOLy5content_copyCopy short URL. Hi vọng bài viết sẽ giúp bạn thật nhiều. Hẹn gặp lại ở các bài viết PHP khác.