Skip to Content
Import CSV file data into MySQL database using CodeIgniter
codeigniter code / September 25, 2021

The Bulk Data Import tool in the web application’s data management section is really beneficial. The import option allows you to insert large amounts of data at once rather than one by one, which saves time in the database. Importing data is often done using the CSV (comma-separated values) file format. The data is stored in plain text format in the CSV file, which can be readily loaded into the server.

The website’s import functionality makes it simple to import a large amount of data into the database with a single click. You may parse and import a CSV file into a MySQL database with PHP using the fgetcsv() method. If you’re using the CodeIgniter framework, you’ll need a custom library to import CSV data into CodeIgniter. Because there is no system library for importing CSV data in CodeIgniter. In this article, we’ll teach you how to use CodeIgniter to import data from a CSV file into a MySQL database.

Using the CodeIgniter CSVReader library, we will import members data from a CSV file into the database in the example code. The following procedure will be used to showcase CodeIgniter’s CSV Import feature.

Get all of the members’ information from the database and display it on a web page.
Upload a CSV file using this form.
Data from CSV files is parsed and imported into the database.
Examine the file structure before beginning to implement the import CSV file to the database in the CodeIgniter 3.x application.

├── application/
│   ├── controllers/
│   │   └── Members.php
│   ├── libraries/
│   │   └── CSVReader.php
│   ├── models/
│   │   └── Member.php
│   └── views/
│       └── members/
│           └── index.php
└── assets/
    ├── css/
    ├── images/
    └── bootstrap/


Make a database table.

A table in the database is required to store the data of the members. In the MySQL database, the following SQL creates a members table with some basic fields. structure.

CREATE TABLE `members` (
`name` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
`email` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
`phone` varchar(15) COLLATE utf8_unicode_ci NOT NULL,
`created` datetime NOT NULL,
`modified` datetime NOT NULL,
`status` enum('Active','Inactive') COLLATE utf8_unicode_ci NOT NULL DEFAULT 'Active',
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

CSV (Comma Separated Values)

The CSV file will include four fields based on the database table structure: Name, Email, Phone, and Status. The CSV file will be in the same format as the screen below.


Config \sautoload.php
Define the widely used library and helper to load automatically on every request in the config/autoload.php file.

$autoload['libraries'] = array('database', 'session');
$autoload['helper'] = array('url');

In a CodeIgniter 3.x application, the CSVReader library is used to read a CSV file and transform CSV data into an array. You can import data from a CSV file into CodeIgniter using this CSVReader class.

parse csv() — Returns an array of data from a CSV file.
Using the PHP fopen() function, open the CSV file in read-only mode.
Using the PHP fgetcsv() method, parse data from the opened CSV file.
Create an array with the CSV data’s fields and values.
Close the CSV file that has been opened.
Return data from a CSV file in an array format.

defined('BASEPATH') OR exit('No direct script access allowed');
* CSV Reader for CodeIgniter 3.x
* Library to read the CSV file. It helps to import a CSV file
* and convert CSV data into an associative array.
* This library treats the first row of a CSV file
* as a column header row.
* @package CodeIgniter
* @category Libraries
* @author CodexWorld
* @license
* @link
* @version 3.0
class CSVReader {
// Columns names after parsing
private $fields;
// Separator used to explode each line
private $separator = ';';
// Enclosure used to decorate each field
private $enclosure = '"';
// Maximum row size to be used for decoding
private $max_row_size = 4096;
* Parse a CSV file and returns as an array.
* @access public
* @param filepath string Location of the CSV file
* @return mixed|boolean
function parse_csv($filepath){
// If file doesn't exist, return false
return FALSE; 
// Open uploaded CSV file with read-only mode
$csvFile = fopen($filepath, 'r');
// Get Fields and values
$this->fields = fgetcsv($csvFile, $this->max_row_size, $this->separator, $this->enclosure);
$keys_values = explode(',', $this->fields[0]);
$keys = $this->escape_string($keys_values);
// Store CSV data in an array
$csvData = array();
$i = 1;
while(($row = fgetcsv($csvFile, $this->max_row_size, $this->separator, $this->enclosure)) !== FALSE){
// Skip empty lines
if($row != NULL){
$values = explode(',', $row[0]);
if(count($keys) == count($values)){
$arr = array();
$new_values = array();
$new_values = $this->escape_string($values);
for($j = 0; $j < count($keys); $j++){
if($keys[$j] != ""){
$arr[$keys[$j]] = $new_values[$j];
$csvData[$i] = $arr;
// Close opened CSV file
return $csvData;
function escape_string($data){
$result = array();
foreach($data as $row){
$result[] = str_replace('"', '', $row);
return $result;

Controllers are people who control things (Members.php)

The CSV data import is handled by the Members controller.

__construct() – Loads the form validation library, helper (file), and model (member).

index() – Returns a list of the members’ data.

SESSION status messages can be retrieved.

The getRows() method of the Member model is used to retrieve records from the database.

The data from the members should be passed to the list view.

Import data from a CSV or Excel file into the database with import().

Validation is performed on the submitted file to ensure that it is a valid CSV file (using the Form Validation library).

Data is parsed from the CSV file using the CSVReader library if the file is uploaded.
The CSV data is inserted/updated in the database based on the email address.
The SESSION stores the status message.
The page is now displayed in a list format.
file check() – This is a file upload validation callback function that checks and validates the value and type of the file input field (.csv).
The File helper’s get mime by extension() function is used to determine the MIME type of the specified file.

if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Members extends CI_Controller {
function __construct() {
// Load member model
// Load form validation library
// Load file helper
public function index(){
$data = array();
// Get messages from the session
$data['success_msg'] = $this->session->userdata('success_msg');
$data['error_msg'] = $this->session->userdata('error_msg');
// Get rows
$data['members'] = $this->member->getRows();
// Load the list page view
$this->load->view('members/index', $data);
public function import(){
$data = array();
$memData = array();
// If import request is submitted
// Form field validation rules
$this->form_validation->set_rules('file', 'CSV file', 'callback_file_check');
// Validate submitted form data
if($this->form_validation->run() == true){
$insertCount = $updateCount = $rowCount = $notAddCount = 0;
// If file uploaded
// Load CSV reader library
// Parse data from CSV file
$csvData = $this->csvreader->parse_csv($_FILES['file']['tmp_name']);
// Insert/update CSV data into database
foreach($csvData as $row){ $rowCount++;
// Prepare data for DB insertion
$memData = array(
'name' => $row['Name'],
'email' => $row['Email'],
'phone' => $row['Phone'],
'status' => $row['Status'],
// Check whether email already exists in the database
$con = array(
'where' => array(
'email' => $row['Email']
'returnType' => 'count'
$prevCount = $this->member->getRows($con);
if($prevCount > 0){
// Update member data
$condition = array('email' => $row['Email']);
$update = $this->member->update($memData, $condition);
// Insert member data
$insert = $this->member->insert($memData);
// Status message with imported data count
$notAddCount = ($rowCount - ($insertCount + $updateCount));
$successMsg = 'Members imported successfully. Total Rows ('.$rowCount.') | Inserted ('.$insertCount.') | Updated ('.$updateCount.') | Not Inserted ('.$notAddCount.')';
$this->session->set_userdata('success_msg', $successMsg);
$this->session->set_userdata('error_msg', 'Error on file upload, please try again.');
$this->session->set_userdata('error_msg', 'Invalid file, please select only CSV file.');
* Callback function to check file value and type during validation
public function file_check($str){
$allowed_mime_types = array('text/x-comma-separated-values', 'text/comma-separated-values', 'application/octet-stream', 'application/', 'application/x-csv', 'text/x-csv', 'text/csv', 'application/csv', 'application/excel', 'application/vnd.msexcel', 'text/plain');
if(isset($_FILES['file']['name']) && $_FILES['file']['name'] != ""){
$mime = get_mime_by_extension($_FILES['file']['name']);
$fileAr = explode('.', $_FILES['file']['name']);
$ext = end($fileAr);
if(($ext == 'csv') && in_array($mime, $allowed_mime_types)){
return true;
$this->form_validation->set_message('file_check', 'Please select only CSV file to upload.');
return false;
$this->form_validation->set_message('file_check', 'Please select a CSV file to upload.');
return false;

Models are a type of model that is used (Member.php

The Member model is in charge of database-related tasks (Fetch, Insert, and Update).

Define the table name with __construct().
getRows() – Retrieves the members’ data from the database depending on the $params requirements. On success, the records are returned.
insert() — Inserts data from a member into the database. If successful, returns the row ID; if unsuccessful, returns FALSE.
update() – Based on the supplied condition, update member data in the database. If the function succeeds, it returns TRUE; if it fails, it returns FALSE.

The Member model is in charge of database-related tasks (Fetch, Insert, and Update).

Define the table name with __construct().
getRows() – Retrieves the members’ data from the database depending on the $params requirements. On success, the records are returned.
insert() — Inserts data from a member into the database. If successful, returns the row ID; if unsuccessful, returns FALSE.
update() – Based on the supplied condition, update member data in the database. If the function succeeds, it returns TRUE; if it fails, it returns FALSE.

if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Member extends CI_Model{
function __construct() {
// Set table name
$this->table = 'members';
* Fetch members data from the database
* @param array filter data based on the passed parameters
function getRows($params = array()){
if(array_key_exists("where", $params)){
foreach($params['where'] as $key => $val){
$this->db->where($key, $val);
if(array_key_exists("returnType",$params) && $params['returnType'] == 'count'){
$result = $this->db->count_all_results();
if(array_key_exists("id", $params)){
$this->db->where('id', $params['id']);
$query = $this->db->get();
$result = $query->row_array();
$this->db->order_by('id', 'desc');
if(array_key_exists("start",$params) && array_key_exists("limit",$params)){
}elseif(!array_key_exists("start",$params) && array_key_exists("limit",$params)){
$query = $this->db->get();
$result = ($query->num_rows() > 0)?$query->result_array():FALSE;
// Return fetched data
return $result;
* Insert members data into the database
* @param $data data to be insert based on the passed parameters
public function insert($data = array()) {
// Add created and modified date if not included
if(!array_key_exists("created", $data)){
$data['created'] = date("Y-m-d H:i:s");
if(!array_key_exists("modified", $data)){
$data['modified'] = date("Y-m-d H:i:s");
// Insert member data
$insert = $this->db->insert($this->table, $data);
// Return the status
return $insert?$this->db->insert_id():false;
return false;
* Update member data into the database
* @param $data array to be update based on the passed parameters
* @param $condition array filter data
public function update($data, $condition = array()) {
// Add modified date if not included
if(!array_key_exists("modified", $data)){
$data['modified'] = date("Y-m-d H:i:s");
// Update member data
$update = $this->db->update($this->table, $data, $condition);
// Return the status
return $update?true:false;
return false;

Views /index.php

Initially, the database is queried for all existing members’ information, which is then displayed on the webpage.

At the top of the data list is an Import button.

When you click the Import button, a form appears with an input area for selecting a CSV file.

The specified file is sent to the Members controller’s import() function.

If the CSV data is successfully imported into the database, the newly inserted member’s information will be added to the list.

(Optional) The HTML table and form are styled with the Bootstrap 4 library. As a result, include the Bootstrap library’s CSS file as well as the custom stylesheet file (if any).
formToggle() – This is a JavaScript function that allows you to show or hide the file upload form when you click the Import button.

<!DOCTYPE html>
<html lang="en">
<meta charset="utf-8">
<title>CodeIgniter CSV Import</title>
<!-- Bootstrap library -->
<link rel="stylesheet" href="<?php echo base_url('assets/bootstrap/bootstrap.min.css'); ?>">
<!-- Stylesheet file -->
<link rel="stylesheet" href="<?php echo base_url('assets/css/style.css'); ?>">
<div class="container">
<h2>Members List</h2>
<!-- Display status message -->
<?php if(!empty($success_msg)){ ?>
<div class="col-xs-12">
<div class="alert alert-success"><?php echo $success_msg; ?></div>
<?php if(!empty($error_msg)){ ?>
<div class="col-xs-12">
<div class="alert alert-danger"><?php echo $error_msg; ?></div>
<?php } ?>
<div class="row">
<!-- Import link -->
<div class="col-md-12 head">
<div class="float-right">
<a href="javascript:void(0);" class="btn btn-success" onclick="formToggle('importFrm');"><i class="plus"></i> Import</a>
<!-- File upload form -->
<div class="col-md-12" id="importFrm" style="display: none;">
<form action="<?php echo base_url('members/import'); ?>" method="post" enctype="multipart/form-data">
<input type="file" name="file" />
<input type="submit" class="btn btn-primary" name="importSubmit" value="IMPORT">
<!-- Data list table -->
<table class="table table-striped table-bordered">
<thead class="thead-dark">
<?php if(!empty($members)){ foreach($members as $row){ ?>
<td><?php echo $row['id']; ?></td>
<td><?php echo $row['name']; ?></td>
<td><?php echo $row['email']; ?></td>
<td><?php echo $row['phone']; ?></td>
<td><?php echo $row['status']; ?></td>
<?php } }else{ ?>
<tr><td colspan="5">No member(s) found...</td></tr>
<?php } ?>
function formToggle(ID){
var element = document.getElementById(ID);
if( === "none"){ = "block";
}else{ = "none";

Note :

We demonstrated how to import data from a CSV file into CodeIgniter in the sample script. You may use CodeIgniter to import CSV or Excel file data into a MySQL database using our proprietary CSVReader library. This script’s capabilities may also be simply modified to add extra fields to the CSV file as needed.


retIrredo says:

[url=]Cialis[/url] cialis 20mg indications Fxjhlz Cialis Uses Cephalexin 500mg Xpqfks – Cialis Yyraae

2020-08-23 13:38 Inną rzeczą, która może znacznie ułatwić ci zadanie, jest zbadaj, jak grają Twoi rywale. Znajomość ruchów przeciwnika i analiza jego taktyki może przybliżyć Cię do odkrycia jego słabości. Możesz dowiedzieć się, co robi dobrze, a co źle. Ty też musisz znać zachowanie swoich przeciwników. Niezależnie od tego, czy są to NPC, czy prawdziwi gracze, wszyscy używają technik i taktyk, które, jeśli je znasz, możesz z łatwością wykryć, jak ich pokonać i być najlepszym. Te oferty dają Ci sposoby na wygranie pieniędzy co tydzień, że nie jest na kredyt. Gra jest osadzona w 2022 roku w przyszłości, ponieważ nawet mały dług może znacząco wpłynąć na wyniki kredytowe. A propos etnicznych ludowych pieśni. Nałykałam się ich jako kilkulatka, gdy leciała w radiu kapela Dzierżanowskiego, jakoś tak przed południem, bardzo widać oficjalnie modna w połówce lat 50.(?) Nie mogłam wtedy wiedzieć, że to taki folklor ulukrowany, podobnie jak „Mazowsza”. Potem wracała moja dużo starsza siostra ze szkoły i uczyła mnie tańczyć boogie woogi. Musiało się coś obić o moje niewinne uszy, że to „złe” tańcowanie, ale mi się podobało, więc miałam poczucie winy. Jackpot 6000 gra nie oferuje progresywnego jackpota, ale największy jackpot, jaki możesz wygrać w kasynie, to 6000 monet (jak sugeruje nazwa gry). Odbywa się to, jak powiedzieliśmy powyżej, w trybie Supermeter. Dzieje się to w losowej kolejności, gdy w jednym spinie otrzymujesz 2 Jokery. Możesz wybrać zakład tak niski jak 10 centów i zwiększyć go aż do 10 €, podczas gdy wartość monet waha się od 10 centów do 1 €. Ostatecznie, maksymalny jackpot wynosi 6 000 monet, co czyni ten slot dość tanim. Gracze preferujący granie na niskie stawki mogą nadal cieszyć się graniem w darmowe gry hazardowe na automatach Jackpot Jester 50000 dzięki możliwości postawienia 1 monety o wartości 0,01 euro na spin. Z drugiej strony, jeśli chciałbyś zgarnąć trochę więcej kasy, to ta gra do pobrania za free pozwoli Ci postawić aż 10 monet o wartości 1 euro na spin i wygrać 1.000 monet nawet za mało punktowane symbole. Jeśli jednak jesteś na tyle odważny, aby grać za maksymalną stawkę 20 monet na spin, to naprawdę możesz czerpać z tego korzyści grając dla dużych wygranych oraz o pełną pulę nagród, czyli zagraj na maksa, aby zgarnąć jackpota wynoszącego aż 50.000 monet, czyli do 50.000 euro.

cix says:

Now Reading:guides Herb’s Guide on the Best Dispensaries in Ontario, Canada To make a written submission: Use iAGCO to search for all applications currently undergoing public notice, and click the “file objection submission” button next to the application you wish to comment on. The legalization of marijuana has created new economic opportunities for Canada’s Indigenous population. Still, many communities lack the information necessary to capitalize on the growth of the cannabis & hemp industries. The National Indigenous Cannabis & Hemp Conference (NICHC), Nov. 26-28 at the Delta Grand Okanagan Resort in Kelowna, BC, will provide an opportunity for attendees to learn from Indigenous experts while networking with Indigenous delegates from across the country. Subscribe: RSS More Do you want to know more about cannabis retail licensing in Ontario? Are you thinking about applying for a cannabis store license? Do you need help in applying for a cannabis retail sales store license in Ontario? Send your comments directly to the AGCO using the How to file a written submission in response to a cannabis retail store authorization application website. Resident comments are not included in the City’s response to the AGCO. Residents may search for current open applications for cannabis retail store licences and submit comments to the AGCO by the deadline identified on the AGCO website. October 17, 2018 – Cannabis for non-medical use became legal in Canada. Ontario laws are in place regarding how, where and who can buy and possess cannabis in the province. The minimum age for use of cannabis is 19, the same as for alcohol. Visit Ontario’s Cannabis Legalization page for information.

Hoblabora says:

It is always best not to take cialis when you feel sleepy, dizzy, or tired, or if you are planning on using it everyday for several months cialis generic name

What’s Going down i’m new to this, I stumbled upon this I’ve found It absolutely helpful and it has aided me out loads. I am hoping to give a contribution & aid different customers like its helped me. Great job.


We have hacked your website and extracted your databases.

H0w did this happen?

0ur team has found a vulnerability within y0ur site that we were able to expl0it. After finding the vulnerability we were able t0 get your database credentials and extract y0ur entire database and move the informati0n to an 0ffsh0re server.

What does this mean?

We will systematically g0 through a series of steps 0f totally damaging your reputati0n. First y0ur database will be leaked 0r sold to the highest bidder which they will use with whatever their intenti0ns are. Next if there are e-mails f0und they will be e-mailed that their informati0n has been s0ld or leaked and y0ur site was at fault thusly damaging y0ur reputati0n and having angry customers/associates with whatever angry cust0mers/ass0ciates do. Lastly any links that y0u have indexed in the search engines will be de-indexed based 0ff of blackhat techniques that we used in the past t0 de-index 0ur targets.

H0w d0 i st0p this?

We are willing t0 refrain fr0m destr0ying your site’s reputati0n for a small fee. The current fee is $3000 in bitcoins (.16 BTC).

Please send the bitcoin t0 the f0ll0wing Bitcoin address (Make sure to copy and paste):


once you have paid we will automatically get informed that it was your payment. Please n0te that y0u have to make payment within 5 days after receiving this e-mail 0r the database leak, e-mails dispatched, and de-index of y0ur site WiLL start!

H0w do i get Bitcoins?

Y0u can easily buy bitcoins via several websites 0r even 0ffline fr0m a Bitcoin-ATM.

What if i d0n’t pay?

if you decide n0t to pay, we will start the attack at the indicated date and uphold it until you do, there’s no counter measure to this, you will only end up wasting more money trying t0 find a soluti0n. We will c0mpletely destr0y y0ur reputati0n amongst g00gle and your cust0mers.

This is n0t a h0ax, do n0t reply to this email, d0n’t try t0 reason or neg0tiate, we will n0t read any replies. once you have paid we will stop what we were doing and you will never hear fr0m us again!

Please n0te that Bitcoin is anonym0us and no 0ne will find 0ut that you have complied.

Hey there! I’ve been following your site for a long time now
and finally got the bravery to go ahead and give you a shout out from Huffman Tx!
Just wanted to mention keep up the excellent job!

Howdy would you mind letting me know which web host you’re using?
I’ve loaded your blog in 3 completely different internet browsers and I must say
this blog loads a lot faster then most. Can you recommend
a good web hosting provider at a reasonable price? Thanks
a lot, I appreciate it!

Eric Jones says:

My name’s Eric and I just came across your website – – in the search results.

Here’s what that means to me…

Your SEO’s working.

You’re getting eyeballs – mine at least.

Your content’s pretty good, wouldn’t change a thing.


Eyeballs don’t pay the bills.


And studies show that 7 out of 10 visitors to a site like will drop by, take a gander, and then head for the hills without doing anything else.

It’s like they never were even there.

You can fix this.

You can make it super-simple for them to raise their hand, say, “okay, let’s talk” without requiring them to even pull their cell phone from their pocket… thanks to Talk With Web Visitor.

Talk With Web Visitor is a software widget that sits on your site, ready and waiting to capture any visitor’s Name, Email address and Phone Number. It lets you know immediately – so you can talk to that lead immediately… without delay… BEFORE they head for those hills.

CLICK HERE to try out a Live Demo with Talk With Web Visitor now to see exactly how it works.

Now it’s also true that when reaching out to hot leads, you MUST act fast – the difference between contacting someone within 5 minutes versus 30 minutes later is huge – like 100 times better!

That’s what makes our new SMS Text With Lead feature so powerful… you’ve got their phone number, so now you can start a text message (SMS) conversation with them… so even if they don’t take you up on your offer right away, you continue to text them new offers, new content, and new reasons to do business with you.

This could change everything for you and your business.

CLICK HERE to learn more about everything Talk With Web Visitor can do and start turing eyeballs into money.

PS: Talk With Web Visitor offers a FREE 14 days trial – you could be converting up to 100x more leads immediately!
It even includes International Long Distance Calling.
Paying customers are out there waiting.
Starting connecting today by CLICKING HERE to try Talk With Web Visitor now.

If you’d like to unsubscribe click here

great post.Never knew this, regards for letting me know.

skyDayLax says:

Każdy niech ma jednak świadomość, że sporo kasyn w Internecie ma ofertę „poker online free”, ale nie jest to zawsze legalne w naszym kraju. Duża liczba witryn lekceważy przepisy ustalone przez polskie prawo, a nieznajomość prawa może skutkować wysoką karą. Przykładami popularnych witryn, które oferują poker online za pieniądze, są: PokerStars, PartyPoker, Bet365, Unibet, 22bet i 888poker. Zawsze, jeżeli mamy wątpliwości co do legalności danej strony, możemy o to zapytać administratora witryny lub poszukać informacji na licznych stronach związanych z grami hazardowymi. Już na pierwszy rzut oka wszystko wskazuje na to, że to bakarat może pochwalić się najmniejszym zainteresowaniem. I tak rzeczywiście jest. Mamy jednak i fanów tej karcianki w naszym kraju. A jeżeli kogoś właśnie bakarat interesuje najbardziej, a nie legalny poker online, powinien zwrócić uwagę na ofertę przygotowaną na Miej na uwadze, że samowykluczenie i przerwy w grze są w wybranym przedziale czasowym nieodwracalne. Ponadto wszystkie okresy blokady obejmują wszystkie gry. Samowykluczenie nakładane jest na konto Stars oraz wszystkie produkty do gry, które wymagają logowania za pomocą nazwy użytkownika (dotyczy to zarówno gier na prawdziwe, jak i wirtualne pieniądze). Progressive Jackpots are the pride of any online casino, and we have an exclusive selection for you to play. The jackpot rises with every spin, will you land a win? Our Progressive Jackpots are won daily. Jeśli można uruchomić Microsoft Store, ale po prostu występują problemy ze znajdowaniem i instalowaniem aplikacji, zobacz Nie mogę znaleźć lub zainstalować aplikacji ze sklepu Microsoft Store. Z pytaniem o skuteczność blokowania domen znajdujących się na liście zwróciła się trójka posłów z Klubu Poselskiego Nowoczesna. Skierowali oni zaoytanie do Ministerstwa Finansów jak i do Ministerstwa Cyfryzacji:

Jopaync says:

  以上就是“全民斗地主怎么玩?全民斗地主攻略”的全部内容,希望能够给大家提供帮助。今后想要了解更多游戏资讯就关注金阁下载站小编!! 2、游戏玩法多样化,精彩的竞技玩法、刺激的赛事玩法等应有尽有。 单机斗地主赢积分大作战是小编给大家带来的视频欣赏,喜欢玩单机斗地主的玩家不要错够本视频哦,我相信看过后大家一定会有收获的,下面就和小编一起欣赏视频的内容吧。单机斗地主游戏介绍:单机斗地主最大的亮点是拥有强大的AI以及智能的提示功能。电脑具有很高的人工智 … 阅读全文>>   全民斗地主这是一款老少咸宜的手机棋牌游戏,简单的界面,详细的新手教程,带给你的是最简便的使用方法,想要尝试棋牌乐趣的玩家们都可以来试一试这款游戏,游戏还有无需联网,无需付费,流畅单机爽爆全场,这样的游戏一般不会难倒什么玩家,不过小编还是在下面写一篇关于全民斗地主的攻略文章。 设置过程难吗? 您所在的国家 地区是否不提供 Windows 上的 Amazon Appstore 或 富豪娱乐城 应用程序无法在您的 Windows 11 上运行? 只需直接下载 APK 并通过模拟器安装。 在这里做 » 风格:中国风 现在说到线上老虎机,老玩家有谁不会想到esball娱乐城的魔龙传奇呢?不过虽然小编说魔龙传奇是线上老虎机之耻,但也不代表魔龙传奇完全不会咬人。接下来小编就来和大家分享怎麽能在魔龙传奇中顺风顺水地赚爆! 餐饮作为既古老又新潮的行业,地域性与普适性共存。如今,在资本和技术的助力下,老传统和新观念正激烈对冲,热烈拥抱着各种奇思妙想。WAT长沙店的选址位于天心区的解放西路,是长沙最热闹繁华的商业区,这里有密密麻麻的餐饮小吃、酒吧夜店及各种大小不一的商场。每个长沙人都有一条解放西,她是这座城市的集体记忆。来到长沙酒吧文化的集中地,WAT将以进取的姿态降临解放西,在极致拼贴的城市符号中注入WAT的品牌基因,传递WAT“好喝,好看,好玩”的品牌价值。

KwivrhynC says:

hi opp ggeis 2022 ert go fi

TiiSwivy says:

hydrochlorothiazide 12.5 mg cadista hydrochlorothiazide complications lisinopril tablets uk

KwwbrhynC says:

flagyl brain damage describe the disposition of metronidazole treating yeast infection with metronidazole

Jnwcroniourf says:

can trazodone be taken with hydrocodone what does trazodone do for you average dose of trazodone

QebSwivy says:

lasix risparmiatore di potassio best time of day to take furosemide furosemide induced thrombocytopenia

Wndygoaft says:

does atenolol cause type 2 diabetes what is atenolol 100 mg used for atenolol vs metoprolol in heart failure

I was curious if you ever thought of changing the page layout of your website? Its very well written; I love what youve got to say. But maybe you could a little more in the way of content so people could connect with it better. Youve got an awful lot of text for only having 1 or two images. Maybe you could space it out better?

What¦s Going down i’m new to this, I stumbled upon this I’ve found It positively useful and it has helped me out loads. I hope to contribute & help other users like its aided me. Great job.

Wndygoaft says:

presentacion lipitor ativan lipitor atorvastatin polymorphism

QewSwivy says:

12 days of christmas lyrica high quality pregabalin powder lyrica and depression

QewSwivy says:

lyrica vs cymbalta pregabalin rash pictures does lyrica help with neuropathy

It¦s really a cool and helpful piece of information. I¦m glad that you just shared this helpful info with us. Please keep us up to date like this. Thank you for sharing.

As a Newbie, I am continuously exploring online for articles that can help me. Thank you

Eybverymn says:

magic essay writer essay writing service usa essay paper writing services

Leave a Reply

Your email address will not be published.

PHPCODE © 2023