PHP се използва широко за изграждане на широка гама от продукти, вариращи от уеб приложения до приложения на корпоративно ниво. Ключът към ефективния PHP код е да следвате правилните работни процеси и да автоматизирате процесите. Резултатът е висококачествен код без грешки.
В почти всички PHP приложения данните се съхраняват, достъпват и обменят между различни компоненти на приложението. За да се гарантира, че този обмен и достъп до данни протичат гладко и без проблеми, екипът за разработка трябва да се увери, че базите данни и дъмповете на данни са в правилен формат.
Импортирането и експортирането на данни към и от бази данни е достатъчно често срещана процедура в разработката на PHP. Друга важна дейност е архивирането и прехвърлянето на бази данни.
В тази статия ще обясня как да запишете таблици от CSV файлове в MySQL и обратно. Трябва да се регистрирате в Cloudways, за да стартирате сървър и приложение PHPstack. Преди да се регистрирате, е добра идея да разгледате всички опции за ценообразуване от доставчици на хостинг от световна класа като AWS, DigitalOcean, Linode, Vultr и GCP, за да можете да намерите този, който идеално отговаря на вашите нужди.
PHP хостинг:Най-добрият уеб хостинг на PHP 7 и PHP 5.6
Създайте база данни в MySQL
Първата стъпка в този урок е създаването на MySQL база данни. Тъй като Cloudways предоставя персонализирания mysql мениджър в платформата, която съдържа база данни за приложението. можете да създавате таблици, като изпълнявате SQL заявки. Създайте таблица `employeeinfo` в база данни с помощта на следната SQL заявка.
CREATE TABLE employeeinfo( emp_id VARCHAR(50) UNSIGNED PRIMARY KEY, firstname VARCHAR(30) NOT NULL, lastname VARCHAR(30) NOT NULL, email VARCHAR(50), reg_date VARCHAR(50) )
Това ще създаде нова таблица `employeeinfo` в базата данни. Ще използвам тази таблица, за да вмъкна данни от CSV файла.
Спрете да губите време на сървъри
Cloudways се занимава с управлението на сървъра вместо вас, за да можете да се съсредоточите върху създаването на страхотни приложения и да поддържате клиентите си щастливи.
Започнете безплатноСъздайте MySql връзка в PHP
За импортиране и експортиране на база данни в MySql ще направи отделен файл `config.php`. Добавете следния код и заменете идентификационните данни на базата данни с вашите. Можете да намерите вашите db идентификационни данни в Детайли за достъп до приложения:
<?php function getdb(){ $servername = "localhost"; $username = "huscqxzwaw"; $password = "2WWKxxxxHr"; $db = "huscqxzwaw"; try { $conn = mysqli_connect($servername, $username, $password, $db); //echo "Connected successfully"; } catch(exception $e) { echo "Connection failed: " . $e->getMessage(); } return $conn; } ?>
Свързано: Как да свържете MySQL база данни с PHP уебсайтове
Импортирайте CSV в MySQL в PHP
След като базата данни бъде създадена, трябва да имам HTML файл, който да качи CSV файл. За този HTML файл ще използвам програмата за качване на HTML файлове в обикновена форма за стартиране.
Създайте файл и го наречете `index.php` . Това е прост формуляр за качване на CSV файл. Този файл също ще покаже резултатите в проста таблица на същата страница. Когато потребителят изпрати формуляра, всички записи ще бъдат запазени в базата данни.
Първо, ще добавя Bootstrap CDN към index.php .
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" crossorigin="anonymous"> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css" crossorigin="anonymous"> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" crossorigin="anonymous"></script>
След това в `тялото` маркер, добавете следния HTML код за формуляра Bootstrap.
<!DOCTYPE html> <html lang="en"> <head> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" crossorigin="anonymous"> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css" crossorigin="anonymous"> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" crossorigin="anonymous"></script> </head> <body> <div id="wrap"> <div class="container"> <div class="row"> <form class="form-horizontal" action="functions.php" method="post" name="upload_excel" enctype="multipart/form-data"> <fieldset> <!-- Form Name --> <legend>Form Name</legend> <!-- File Button --> <div class="form-group"> <label class="col-md-4 control-label" for="filebutton">Select File</label> <div class="col-md-4"> <input type="file" name="file" id="file" class="input-large"> </div> </div> <!-- Button --> <div class="form-group"> <label class="col-md-4 control-label" for="singlebutton">Import data</label> <div class="col-md-4"> <button type="submit" id="submit" name="Import" class="btn btn-primary button-loading" data-loading-text="Loading...">Import</button> </div> </div> </fieldset> </form> </div> <?php get_all_records(); ?> </div> </div> </body> </html>
Може да забележите, че съм задал действие на `functions.php` файл. В следващата стъпка ще създам този файл и ще добавя код към него. Включих и метод `get_all_records()` близо до края на файла. Този метод извлича всички записи от базата данни и показва записите в таблицата на индексната страница.
След това ще създам `functions.php` файл и добавете следния код в него.
<?php if(isset($_POST["Import"])){ $filename=$_FILES["file"]["tmp_name"]; if($_FILES["file"]["size"] > 0) { $file = fopen($filename, "r"); while (($getData = fgetcsv($file, 10000, ",")) !== FALSE) { $sql = "INSERT into employeeinfo (emp_id,firstname,lastname,email,reg_date) values ('".$getData[0]."','".$getData[1]."','".$getData[2]."','".$getData[3]."','".$getData[4]."')"; $result = mysqli_query($con, $sql); if(!isset($result)) { echo "<script type=\"text/javascript\"> alert(\"Invalid File:Please Upload CSV File.\"); window.location = \"index.php\" </script>"; } else { echo "<script type=\"text/javascript\"> alert(\"CSV File has been successfully Imported.\"); window.location = \"index.php\" </script>"; } } fclose($file); } } ?>
Когато качването щракнете върху бутона, името на временния файл ще бъде съхранено в паметта и с помощта на `while` цикъл данните се записват в $getData променлива. След като процесът приключи, данните се сортират по колони и след това накрая се вмъкват в `employeeinfo` маса.
Обърнете внимание, че „fgetcsv()` анализира редове от отворения файл, като проверява за CSV полета и `fopen()` отваря файл или URL. Този код може да бъде тестван чрез импортиране на CSV файл с тестови данни.
Показване на запазените записи
След като CSV файлът бъде импортиран, ще покажа данните чрез проста функция, `get_all_records()`, инициализиран в `index.php`. Копирайте тази функция в `function.php` .
function get_all_records(){ $con = getdb(); $Sql = "SELECT * FROM employeeinfo"; $result = mysqli_query($con, $Sql); if (mysqli_num_rows($result) > 0) { echo "<div class='table-responsive'><table id='myTable' class='table table-striped table-bordered'> <thead><tr><th>EMP ID</th> <th>First Name</th> <th>Last Name</th> <th>Email</th> <th>Registration Date</th> </tr></thead><tbody>"; while($row = mysqli_fetch_assoc($result)) { echo "<tr><td>" . $row['emp_id']."</td> <td>" . $row['firstname']."</td> <td>" . $row['lastname']."</td> <td>" . $row['email']."</td> <td>" . $row['reg_date']."</td></tr>"; } echo "</tbody></table></div>"; } else { echo "you have no records"; } }
В този наистина прост метод, аз просто избрах всички записи и показах тези записи на индексната страница чрез метода. Всеки път, когато потребителят качи CSV файл, записите ще бъдат запазени в таблицата и след това ще се покажат на индексната страница.
Експортирайте MySQL в CSV с PHP
Експортирането на данни от база данни MySQL в CSV файл е също много лесно. За да демонстрирам това, ще използвам index.php които създадох по-рано.
Добавете следния код към файла.
<div> <form class="form-horizontal" action="functions.php" method="post" name="upload_excel" enctype="multipart/form-data"> <div class="form-group"> <div class="col-md-4 col-md-offset-4"> <input type="submit" name="Export" class="btn btn-success" value="export to excel"/> </div> </div> </form> </div>
След като добавите тази HTML маркировка, Експортиране бутонът ще се появи под таблицата. Сега добавете следното условие в functions.php.
if(isset($_POST["Export"])){ header('Content-Type: text/csv; charset=utf-8'); header('Content-Disposition: attachment; filename=data.csv'); $output = fopen("php://output", "w"); fputcsv($output, array('ID', 'First Name', 'Last Name', 'Email', 'Joining Date')); $query = "SELECT * from employeeinfo ORDER BY emp_id DESC"; $result = mysqli_query($con, $query); while($row = mysqli_fetch_assoc($result)) { fputcsv($output, $row); } fclose($output); }
Когато „Експортиране“ щракнете върху бутона, заглавките `Content-Type:text/csv` с прикачен файл `data.csv` е изпратено.
Тъй като `php://output` е поток само за запис, който позволява достъп за запис до механизма на изходния буфер, аз избрах всички данни от таблицата в следващия ред и ги предадох на `fputcsv()` метод. Този метод форматира ред (предаден като масив от полета) като CSV и го записва (завършва с нов ред) в посочения файл. Накрая се изтегля файлът с всички желани данни.
Накрая, след като интегрирате целия код, ще видите следната окончателна форма на приложението.
Може да ви хареса още: Прост CRUD в PHP и MySQL
Заключение
В тази статия обсъдих как можете да експортирате данни от и в CSV файлове с помощта на PHP и MySQL. Това е прост пример, можете да добавите по-сложна логика и валидации според вашите изисквания. Можете също да създадете тестови случаи, за да проверите кода и да интегрирате с GitHub, като използвате PHP Continuous Integeration Tools. Ако искате да добавите към дискусията или искате да зададете въпрос, оставете коментар по-долу.
често задавани въпросиКак да импортирам и експортирам CSV с помощта на php и MySQL?
- Одобрете изпратения запис, независимо дали е съществен CSV файл.
- Проверете състоянието на прехвърляне на CSV файл, като използвате функцията is_uploaded_file() на PHP.
- Достъп до CSV файла, използвайки функцията PHP fopen().
- Разбирайте данните от CSV записа с помощта на функцията PHP fgetcsv().
- Вмъкнете или актуализирайте данни в базата данни въз основа на имейла на члена.