Cách tạo hộp tìm kiếm động trong PHP

Hướng dẫn này là phần tiếp theo của loạt bài hướng dẫn phân trang OOP, tôi khuyên bạn nên làm theo hướng dẫn trước để thực hiện tốt hướng dẫn này. Chúng tôi cũng sẽ tạo một trang giữa cho số trang trông đẹp hơn

Tạo hệ thống tìm kiếm động

trong hướng dẫn trước, Chúng tôi đã tạo một hệ thống tìm kiếm phân trang, nhưng hệ thống tìm kiếm mà chúng tôi tạo không động vì chúng tôi đang xem trực tiếp bảng 'tên người dùng'. nhưng trong cơ sở dữ liệu chúng tôi có một số cột

TênLoạiĐộ dài/giá trịIndeksidINT11Tên người dùng chínhVarchar100--cityVarchar100--emailVarchar100--


Vì vậy, ý tưởng chúng tôi sẽ làm cho tham số truy vấn tìm kiếm ?search trở nên động, tất nhiên, chúng tôi sẽ thực hiện các thay đổi đối với các chức năng mà chúng tôi đã tạo trước đó

  • Tạo một biến mới để lưu tên cột
    Bởi vì chúng tôi sẽ làm cho tên cột trở nên động, chúng tôi phải lưu trữ nó trong một biến. chúng ta sẽ tạo một biến có tên là $col

Thí dụ
private $db, $table, $total_records, $limit = 5, $col;

  • Tạo chức năng
    public function __construct($table){
      $this->table = $table;
      $this->db = new PDO("mysql:host=localhost; dbname=faker", "root", "root");
      if($this->is_search()) $this->set_search_col();
      $this->set_total_records();
    }
    
    0
    Trong hàm này, chúng ta sẽ đặt giá trị của biến $col. Giá trị được lấy từ tham số truy vấn
    public function __construct($table){
      $this->table = $table;
      $this->db = new PDO("mysql:host=localhost; dbname=faker", "root", "root");
      if($this->is_search()) $this->set_search_col();
      $this->set_total_records();
    }
    
    2 trong URL của trình duyệt
    Thí dụ
public function set_search_col(){
            $this->col = $_GET['col'];
        }
  • để truy xuất giá trị tham số truy vấn
    public function __construct($table){
      $this->table = $table;
      $this->db = new PDO("mysql:host=localhost; dbname=faker", "root", "root");
      if($this->is_search()) $this->set_search_col();
      $this->set_total_records();
    }
    
    2 chúng ta có thể sử dụng
    public function __construct($table){
      $this->table = $table;
      $this->db = new PDO("mysql:host=localhost; dbname=faker", "root", "root");
      if($this->is_search()) $this->set_search_col();
      $this->set_total_records();
    }
    
    4. Chìa khóa là col và Chúng ta có thể truy cập các biến bên trong hàm bằng
    public function __construct($table){
      $this->table = $table;
      $this->db = new PDO("mysql:host=localhost; dbname=faker", "root", "root");
      if($this->is_search()) $this->set_search_col();
      $this->set_total_records();
    }
    
    5

  • Chạy hàm
    public function __construct($table){
      $this->table = $table;
      $this->db = new PDO("mysql:host=localhost; dbname=faker", "root", "root");
      if($this->is_search()) $this->set_search_col();
      $this->set_total_records();
    }
    
    0 trong __construct()
    Chúng ta cần chạy hàm
    public function __construct($table){
      $this->table = $table;
      $this->db = new PDO("mysql:host=localhost; dbname=faker", "root", "root");
      if($this->is_search()) $this->set_search_col();
      $this->set_total_records();
    }
    
    7 trong lần đầu tiên lớp được gọi, do đó chúng ta sẽ thực hiện hàm trong_______0_______8

Thí dụ

public function __construct($table){
  $this->table = $table;
  $this->db = new PDO("mysql:host=localhost; dbname=faker", "root", "root");
  if($this->is_search()) $this->set_search_col();
  $this->set_total_records();
}
  • Trước khi chạy hàm set_search_col() chúng ta sẽ kiểm tra với
    public function __construct($table){
      $this->table = $table;
      $this->db = new PDO("mysql:host=localhost; dbname=faker", "root", "root");
      if($this->is_search()) $this->set_search_col();
      $this->set_total_records();
    }
    
    9 xem tham số truy vấn ?search có tồn tại không. Chúng ta có thể biết nó thông qua hàm
    public function set_total_records(){
        $query  = "SELECT id FROM $this->table";
        if($this->is_search()){
            $val    = $this->is_search();
            // $query  = "SELECT id FROM $this->table WHERE username LIKE '%$val%'";
            $query  = "SELECT id FROM $this->table WHERE $this->col LIKE '%$val%'";
        }
        $stmt   = $this->db->prepare($query);
        $stmt->execute();
        $this->total_records = $stmt->rowCount();
    }
    
    1 mà chúng ta đã tạo trong hướng dẫn trước
  • Nếu kết quả của tham số truy vấn ?search tồn tại, thì kết quả là đúng và tự động chúng tôi sẽ chạy
    public function __construct($table){
      $this->table = $table;
      $this->db = new PDO("mysql:host=localhost; dbname=faker", "root", "root");
      if($this->is_search()) $this->set_search_col();
      $this->set_total_records();
    }
    
    0

lưu ý. Chúng ta phải chạy hàm

public function set_total_records(){
    $query  = "SELECT id FROM $this->table";
    if($this->is_search()){
        $val    = $this->is_search();
        // $query  = "SELECT id FROM $this->table WHERE username LIKE '%$val%'";
        $query  = "SELECT id FROM $this->table WHERE $this->col LIKE '%$val%'";
    }
    $stmt   = $this->db->prepare($query);
    $stmt->execute();
    $this->total_records = $stmt->rowCount();
}
4 trước khi chạy hàm
public function set_total_records(){
    $query  = "SELECT id FROM $this->table";
    if($this->is_search()){
        $val    = $this->is_search();
        // $query  = "SELECT id FROM $this->table WHERE username LIKE '%$val%'";
        $query  = "SELECT id FROM $this->table WHERE $this->col LIKE '%$val%'";
    }
    $stmt   = $this->db->prepare($query);
    $stmt->execute();
    $this->total_records = $stmt->rowCount();
}
5, vì điều này ảnh hưởng đến số trang sẽ được hiển thị

  • Thay đổi truy vấn trong chức năng
    Chúng ta đã tạo một hàm để gán giá trị cho biến $col, bây giờ chúng ta có thể sử dụng nó trong hàm để thay đổi động truy vấn dựa trên truy vấn tham số
    public function set_total_records(){
        $query  = "SELECT id FROM $this->table";
        if($this->is_search()){
            $val    = $this->is_search();
            // $query  = "SELECT id FROM $this->table WHERE username LIKE '%$val%'";
            $query  = "SELECT id FROM $this->table WHERE $this->col LIKE '%$val%'";
        }
        $stmt   = $this->db->prepare($query);
        $stmt->execute();
        $this->total_records = $stmt->rowCount();
    }
    
    6

1. Thay đổi truy vấn trong chức năng

public function set_total_records(){
    $query  = "SELECT id FROM $this->table";
    if($this->is_search()){
        $val    = $this->is_search();
        // $query  = "SELECT id FROM $this->table WHERE username LIKE '%$val%'";
        $query  = "SELECT id FROM $this->table WHERE $this->col LIKE '%$val%'";
    }
    $stmt   = $this->db->prepare($query);
    $stmt->execute();
    $this->total_records = $stmt->rowCount();
}
7
Thí dụ

public function set_total_records(){
    $query  = "SELECT id FROM $this->table";
    if($this->is_search()){
        $val    = $this->is_search();
        // $query  = "SELECT id FROM $this->table WHERE username LIKE '%$val%'";
        $query  = "SELECT id FROM $this->table WHERE $this->col LIKE '%$val%'";
    }
    $stmt   = $this->db->prepare($query);
    $stmt->execute();
    $this->total_records = $stmt->rowCount();
}

Tôi đã đưa ra cú pháp nhận xét

public function set_total_records(){
    $query  = "SELECT id FROM $this->table";
    if($this->is_search()){
        $val    = $this->is_search();
        // $query  = "SELECT id FROM $this->table WHERE username LIKE '%$val%'";
        $query  = "SELECT id FROM $this->table WHERE $this->col LIKE '%$val%'";
    }
    $stmt   = $this->db->prepare($query);
    $stmt->execute();
    $this->total_records = $stmt->rowCount();
}
8cho truy vấn mà chúng tôi đã thay đổi. Bây giờ chúng ta có thể sử dụng biến
public function set_total_records(){
    $query  = "SELECT id FROM $this->table";
    if($this->is_search()){
        $val    = $this->is_search();
        // $query  = "SELECT id FROM $this->table WHERE username LIKE '%$val%'";
        $query  = "SELECT id FROM $this->table WHERE $this->col LIKE '%$val%'";
    }
    $stmt   = $this->db->prepare($query);
    $stmt->execute();
    $this->total_records = $stmt->rowCount();
}
9 để thay thế cột tên người dùng mà chúng ta mã hóa cứng trước đó

2. Thay đổi truy vấn trong chức năng

public function get_data(){
    $start = 0;
    if($this->current_page() > 1){
        $start = ($this->current_page() * $this->limit) - $this->limit;
    }
    $query  = "SELECT * FROM $this->table LIMIT $start, $this->limit";
    if($this->is_search()){
        $val    = $this->is_search();
        // $query  = "SELECT id FROM $this->table WHERE username LIKE '%$val%' $start, $this->limit";
        $query  = "SELECT id FROM $this->table WHERE $this->col LIKE '%$val%' $start, $this->limit";
    }
    $stmt = $this->db->prepare($query);
    $stmt->execute();
    return $stmt->fetchAll(PDO::FETCH_OBJ);
}
0
Thí dụ

public function get_data(){
    $start = 0;
    if($this->current_page() > 1){
        $start = ($this->current_page() * $this->limit) - $this->limit;
    }
    $query  = "SELECT * FROM $this->table LIMIT $start, $this->limit";
    if($this->is_search()){
        $val    = $this->is_search();
        // $query  = "SELECT id FROM $this->table WHERE username LIKE '%$val%' $start, $this->limit";
        $query  = "SELECT id FROM $this->table WHERE $this->col LIKE '%$val%' $start, $this->limit";
    }
    $stmt = $this->db->prepare($query);
    $stmt->execute();
    return $stmt->fetchAll(PDO::FETCH_OBJ);
}

Tôi đã đưa ra cú pháp nhận xét

public function set_total_records(){
    $query  = "SELECT id FROM $this->table";
    if($this->is_search()){
        $val    = $this->is_search();
        // $query  = "SELECT id FROM $this->table WHERE username LIKE '%$val%'";
        $query  = "SELECT id FROM $this->table WHERE $this->col LIKE '%$val%'";
    }
    $stmt   = $this->db->prepare($query);
    $stmt->execute();
    $this->total_records = $stmt->rowCount();
}
8cho truy vấn mà chúng tôi đã thay đổi. Bây giờ chúng ta có thể sử dụng biến
public function set_total_records(){
    $query  = "SELECT id FROM $this->table";
    if($this->is_search()){
        $val    = $this->is_search();
        // $query  = "SELECT id FROM $this->table WHERE username LIKE '%$val%'";
        $query  = "SELECT id FROM $this->table WHERE $this->col LIKE '%$val%'";
    }
    $stmt   = $this->db->prepare($query);
    $stmt->execute();
    $this->total_records = $stmt->rowCount();
}
9 để thay thế cột tên người dùng mà chúng ta mã hóa cứng trước đó

3. Thêm một truy vấn tham số trong hàm

public function get_data(){
    $start = 0;
    if($this->current_page() > 1){
        $start = ($this->current_page() * $this->limit) - $this->limit;
    }
    $query  = "SELECT * FROM $this->table LIMIT $start, $this->limit";
    if($this->is_search()){
        $val    = $this->is_search();
        // $query  = "SELECT id FROM $this->table WHERE username LIKE '%$val%' $start, $this->limit";
        $query  = "SELECT id FROM $this->table WHERE $this->col LIKE '%$val%' $start, $this->limit";
    }
    $stmt = $this->db->prepare($query);
    $stmt->execute();
    return $stmt->fetchAll(PDO::FETCH_OBJ);
}
3
Chúng ta sẽ thêm một truy vấn tham số mới là
public function __construct($table){
  $this->table = $table;
  $this->db = new PDO("mysql:host=localhost; dbname=faker", "root", "root");
  if($this->is_search()) $this->set_search_col();
  $this->set_total_records();
}
2, chúng ta cần thêm giá trị trả về trên hàm
public function get_data(){
    $start = 0;
    if($this->current_page() > 1){
        $start = ($this->current_page() * $this->limit) - $this->limit;
    }
    $query  = "SELECT * FROM $this->table LIMIT $start, $this->limit";
    if($this->is_search()){
        $val    = $this->is_search();
        // $query  = "SELECT id FROM $this->table WHERE username LIKE '%$val%' $start, $this->limit";
        $query  = "SELECT id FROM $this->table WHERE $this->col LIKE '%$val%' $start, $this->limit";
    }
    $stmt = $this->db->prepare($query);
    $stmt->execute();
    return $stmt->fetchAll(PDO::FETCH_OBJ);
}
3 để số trang, liên kết next và prev tương ứng với tham số truy vấn mới
Thí dụ

public function check_search(){
    if($this->is_search()){
        return '&search='.$this->is_search().'&col='.$this->col;
    }
    return '';
}

Chúng ta có thể thêm một tham số truy vấn mới bằng cách kết hợp chuỗi

public function get_data(){
    $start = 0;
    if($this->current_page() > 1){
        $start = ($this->current_page() * $this->limit) - $this->limit;
    }
    $query  = "SELECT * FROM $this->table LIMIT $start, $this->limit";
    if($this->is_search()){
        $val    = $this->is_search();
        // $query  = "SELECT id FROM $this->table WHERE username LIKE '%$val%' $start, $this->limit";
        $query  = "SELECT id FROM $this->table WHERE $this->col LIKE '%$val%' $start, $this->limit";
    }
    $stmt = $this->db->prepare($query);
    $stmt->execute();
    return $stmt->fetchAll(PDO::FETCH_OBJ);
}
6 và giá trị của biến
public function set_total_records(){
    $query  = "SELECT id FROM $this->table";
    if($this->is_search()){
        $val    = $this->is_search();
        // $query  = "SELECT id FROM $this->table WHERE username LIKE '%$val%'";
        $query  = "SELECT id FROM $this->table WHERE $this->col LIKE '%$val%'";
    }
    $stmt   = $this->db->prepare($query);
    $stmt->execute();
    $this->total_records = $stmt->rowCount();
}
9 như thế này.
public function get_data(){
    $start = 0;
    if($this->current_page() > 1){
        $start = ($this->current_page() * $this->limit) - $this->limit;
    }
    $query  = "SELECT * FROM $this->table LIMIT $start, $this->limit";
    if($this->is_search()){
        $val    = $this->is_search();
        // $query  = "SELECT id FROM $this->table WHERE username LIKE '%$val%' $start, $this->limit";
        $query  = "SELECT id FROM $this->table WHERE $this->col LIKE '%$val%' $start, $this->limit";
    }
    $stmt = $this->db->prepare($query);
    $stmt->execute();
    return $stmt->fetchAll(PDO::FETCH_OBJ);
}
8

  • Kết quả
    Nếu không có lỗi, chúng ta có thể thấy kết quả như thế này
    Tìm kiếm qua email
    Tìm kiếm dữ liệu có ký tự g trong trường email trong cơ sở dữ liệu
    public function get_data(){
        $start = 0;
        if($this->current_page() > 1){
            $start = ($this->current_page() * $this->limit) - $this->limit;
        }
        $query  = "SELECT * FROM $this->table LIMIT $start, $this->limit";
        if($this->is_search()){
            $val    = $this->is_search();
            // $query  = "SELECT id FROM $this->table WHERE username LIKE '%$val%' $start, $this->limit";
            $query  = "SELECT id FROM $this->table WHERE $this->col LIKE '%$val%' $start, $this->limit";
        }
        $stmt = $this->db->prepare($query);
        $stmt->execute();
        return $stmt->fetchAll(PDO::FETCH_OBJ);
    }
    
    9



Tìm kiếm theo thành phố
Tìm kiếm dữ liệu có ký tự g trong trường thành phố trong cơ sở dữ liệu

public function check_search(){
    if($this->is_search()){
        return '&search='.$this->is_search().'&col='.$this->col;
    }
    return '';
}
0



Tạo trang giữa

Cho đến nay hệ thống phân trang của chúng tôi hoạt động tốt. nhưng có một số trường hợp nếu dữ liệu của chúng tôi đã đạt đến 1000, chúng tôi sẽ thấy rất nhiều số trang sẽ xuất hiện tất nhiên là không tốt. vì điều đó, chúng tôi sẽ tạo trang giữa. Vì vậy, ý tưởng chúng tôi sẽ ẩn một số trang. Tôi sẽ chỉ hiển thị 2 trang tiếp theo và 2 trang trước đó từ trang hiện tại. để xử lý vấn đề đó, tôi sẽ tạo một hàm

public function check_search(){
    if($this->is_search()){
        return '&search='.$this->is_search().'&col='.$this->col;
    }
    return '';
}
1

  • Tạo chức năng
    public function check_search(){
        if($this->is_search()){
            return '&search='.$this->is_search().'&col='.$this->col;
        }
        return '';
    }
    
    2
    Trong chức năng này sẽ chấp nhận các thông số trang hiện tại
    public function check_search(){
        if($this->is_search()){
            return '&search='.$this->is_search().'&col='.$this->col;
        }
        return '';
    }
    
    3 và trong chức năng này, sẽ có hai câu lệnh mà chúng tôi sẽ kiểm tra

Thí dụ

public function is_showable($num){
    // The first statements
    if($this->get_pagination_number() < 4 || $this->current_page() == $num)
        return true
    // The second statements
    if(
        ($this->current_page()-2) <= $num && ($this->current_page()+2) >= $num
    )
        return true
}
  • Những tuyên bố đầu tiên

1. $this->get_pagination_number() < 4. Bởi vì chúng tôi sẽ hiển thị 2 trang tiếp theo và 2 trang trước đó nên số lượng tối thiểu chúng tôi sẽ ẩn là 4 trang từ (2 tiếp theo + 2 trước = 4). Chúng ta có thể lấy tổng số trang thông qua hàm

public function check_search(){
    if($this->is_search()){
        return '&search='.$this->is_search().'&col='.$this->col;
    }
    return '';
}
4

2. $this->current_page() == $num. sau đó chúng ta tạo một toán tử logic

public function check_search(){
    if($this->is_search()){
        return '&search='.$this->is_search().'&col='.$this->col;
    }
    return '';
}
5 (hoặc) cho điều kiện thứ hai của câu lệnh này. Điều kiện này hữu ích cho trang hiện tại giống như giá trị
public function check_search(){
    if($this->is_search()){
        return '&search='.$this->is_search().'&col='.$this->col;
    }
    return '';
}
3 sẽ cho kết quả đúng. Chúng ta có thể lấy trang hiện tại thông qua hàm
public function check_search(){
    if($this->is_search()){
        return '&search='.$this->is_search().'&col='.$this->col;
    }
    return '';
}
7

Ghi chú. Câu lệnh này sử dụng logic

public function check_search(){
    if($this->is_search()){
        return '&search='.$this->is_search().'&col='.$this->col;
    }
    return '';
}
5 (hoặc), vì vậy nếu một câu đủ điều kiện thì chúng tôi sẽ trả về true. Giá trị thực chúng ta sẽ sử dụng trong một phần của giao diện người dùng để kiểm tra điều kiện nhất định

  • Các tuyên bố thứ hai

1. ($this->current_page()-2) <= $num. Điều kiện này sẽ kiểm tra xem trang hiện tại đã giảm 2 kết quả có nhỏ hơn (<=) trang đã truyền tham số

public function check_search(){
    if($this->is_search()){
        return '&search='.$this->is_search().'&col='.$this->col;
    }
    return '';
}
3

2. ($this->current_page()+2) >= $num. Điều kiện này sẽ kiểm tra xem trang hiện tại cộng 2 kết quả có lớn hơn trang được truyền vào tham số

public function check_search(){
    if($this->is_search()){
        return '&search='.$this->is_search().'&col='.$this->col;
    }
    return '';
}
3

Ghi chú. Câu lệnh này sử dụng logic

public function is_showable($num){
    // The first statements
    if($this->get_pagination_number() < 4 || $this->current_page() == $num)
        return true
    // The second statements
    if(
        ($this->current_page()-2) <= $num && ($this->current_page()+2) >= $num
    )
        return true
}
1 (và), vì vậy cả hai điều kiện trong câu lệnh này phải đúng, thì kết quả của câu lệnh này là đúng. nếu một người không đủ điều kiện thì nó sẽ là sai

  • Sử dụng chức năng
    public function check_search(){
        if($this->is_search()){
            return '&search='.$this->is_search().'&col='.$this->col;
        }
        return '';
    }
    
    1

Chúng ta đã hoàn thành logic của chức năng này. bây giờ chúng ta có thể sử dụng trong biến lặp $pages.

public function is_showable($num){
    // The first statements
    if($this->get_pagination_number() < 4 || $this->current_page() == $num)
        return true
    // The second statements
    if(
        ($this->current_page()-2) <= $num && ($this->current_page()+2) >= $num
    )
        return true
}
3

Thí dụ


    is_showable($i)):?>
        
    

Chúng ta đã thấy trong hình. chúng tôi chỉ hiển thị 2 trang tiếp theo và 2 trang trước đó. chúng tôi đã thực hiện tạo trang giữa. cảm ơn bạn đã theo dõi hướng dẫn này, có thể hữu ích cho bạn

Chương trình giảng dạy

OOP cơ bản, Tìm nạp dữ liệu với cơ sở dữ liệu PDO
Trang trước, Trang tiếp theo và Lớp hiện hoạt trong PHP
Hệ thống tìm kiếm và truy vấn động

Bằng chứng về công việc đã hoàn thành

https. //github. com/Ryanalfarisi/paginationOOP

#tutorials #php #oop #web

5 năm trước trong #utopian-io của alfarisi94 (58)

Trả lời 5

Cách tạo hộp tìm kiếm động trong PHP

Loại.  

  • [-]

    leewilliamson (-10)(1)
      

    Nền tảng smartsteem do @therealwolf tạo ra đã lừa đảo bài đăng của tôi sáng nay (ngày của mẹ) đáng lẽ là dành cho Tổ chức từ thiện dành cho trẻ em bị lạm dụng. Anh chàng thực sự đã đánh cắp từ những đứa trẻ bị lạm dụng không có mẹ. vào ngày của mẹ

    https. //steemit. com/steemit/@prometheusrisen/beware-of-smartsteem-scam

    Và lý do là bởi vì @therealwolf là một kẻ ấu dâm nhếch nhác ghê tởm thích lạm dụng trẻ em. Đây là bằng chứng về việc anh ấy ủng hộ phim khiêu dâm trẻ em trên chuỗi khối steemit. bigbadwolf thực sự.

    Cách tạo hộp tìm kiếm động trong PHP

    Và lý do là bởi vì @therealwolf là một kẻ ấu dâm nhếch nhác ghê tởm thích lạm dụng trẻ em. Đây là bằng chứng về việc anh ấy ủng hộ phim khiêu dâm trẻ em trên chuỗi khối steemit. bigbadwolf thực sự.

    Cách tạo hộp tìm kiếm động trong PHP

    $0. 00

    Hồi đáp

    [-]

    mcfarhat (70)
      

    Rất tiếc, nội dung của bạn được lấy từ nơi khác trên web và do đó bị coi là đạo văn. Điều này cũng áp dụng cho những đóng góp gần đây của bạn
    Các hướng dẫn của bạn thực sự được lấy từ belajar php, có thể tìm thấy trong https. //www. duniailkom. com/tutorial-belajar-php-dasar-untuk-pemula/

    https. // belajarphp. net/belajar-tutorial-php-mysql/

    Đạo văn là một hành vi phạm tội nghiêm trọng và do bạn đã cố gắng làm như vậy nhiều lần nên hiện tại bạn đã bị cấm sử dụng các dịch vụ không tưởng


    Cần giúp đỡ? . //ủng hộ. không tưởng. io/
    Trò chuyện với chúng tôi trên Discord
    [người điều hành không tưởng]

    $0. 00

    Hồi đáp

    [-]

    alfarisi94 (58)
      

    Hải @mcfarhat Tôi không đạo văn trong các đóng góp của mình, điều mà bạn hoàn toàn không đưa ra ví dụ nào về việc đạo văn trong đóng góp của mình. Tôi muốn giải thích thêm. nội dung tôi tự tạo

    $0. 00

    • + anharismail

    Hồi đáp

    [-]

    gaottantacinque (59)
      

    https. //steemit. com/coding/@gaottantacinque/rasmus-lerdorf-php-inventor-in-milan

    Thanks. )

    $0. 00

    Hồi đáp

    [-]

    steemitboard (66)
      

    Xin chúc mừng @alfarisi94. Bạn đã hoàn thành thành tích sau trên chuỗi khối Steem và đã được thưởng (các) huy hiệu mới