PHP jest szeroko stosowany do tworzenia szerokiej gamy produktów, od aplikacji internetowych po aplikacje na poziomie korporacyjnym. Kluczem do wydajnego kodu PHP jest przestrzeganie odpowiednich przepływów pracy i automatyzacja procesów. Rezultatem jest wysokiej jakości i wolny od błędów kod.
W prawie wszystkich aplikacjach PHP dane są przechowywane, dostępne i wymieniane między różnymi komponentami aplikacji. Aby mieć pewność, że ta wymiana i dostęp do danych przebiega sprawnie i bez żadnych problemów, zespół programistów musi upewnić się, że bazy danych i zrzuty danych są w odpowiednim formacie.
Importowanie i eksportowanie danych do iz baz danych jest dość powszechną procedurą w rozwoju PHP. Inną ważną czynnością jest tworzenie kopii zapasowych i przesyłanie baz danych.
W tym artykule wyjaśnię, jak zapisywać tabele z plików CSV do MySQL i odwrotnie. Musisz zarejestrować się w Cloudways, aby uruchomić serwer i aplikację PHPstack. Przed zarejestrowaniem się, dobrym pomysłem jest przyjrzenie się wszystkim opcjom cenowym światowej klasy dostawców hostingu, takich jak AWS, DigitalOcean, Linode, Vultr i GCP, dzięki czemu możesz znaleźć taki, który idealnie pasuje do Twoich potrzeb.
Hosting PHP:Najlepszy hosting PHP 7 i PHP 5.6
Utwórz bazę danych w MySQL
Pierwszym krokiem w tym samouczku jest utworzenie bazy danych MySQL. Ponieważ Cloudways zapewnia niestandardowego menedżera mysql na platformie, która zawiera bazę danych dla aplikacji. możesz tworzyć tabele, uruchamiając zapytania SQL. Utwórz tabelę `informacje o pracowniku` w bazie danych za pomocą następującego zapytania 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) )
Spowoduje to utworzenie nowej tabeli `informacje o pracownikach` w bazie danych. Użyję tej tabeli do wstawienia danych z pliku CSV.
Przestań marnować czas na serwery
Cloudways zajmuje się zarządzaniem serwerem za Ciebie, dzięki czemu możesz skupić się na tworzeniu świetnych aplikacji i dbaniu o zadowolenie klientów.
Rozpocznij bezpłatnieUtwórz połączenie MySql w PHP
Do importowania i eksportowania bazy danych w MySql utworzymy oddzielny plik `config.php`. Dodaj następujący kod i zastąp poświadczenia bazy danych swoimi. Swoje poświadczenia bazy danych znajdziesz wSzczegóły dostępu do aplikacji:
<?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; } ?>
Powiązane: Jak połączyć bazę danych MySQL z witrynami PHP
Importuj CSV do MySQL w PHP
Po utworzeniu bazy danych potrzebuję pliku HTML, który mógłby przesłać plik CSV. W przypadku tego pliku HTML użyję programu do przesyłania plików HTML w prostym formularzu ładowania początkowego.
Utwórz plik i nazwij go `index.php` . To jest prosty formularz do przesłania pliku CSV. Ten plik pokaże również wyniki w prostej tabeli na tej samej stronie. Gdy użytkownik prześle formularz, wszystkie rekordy zostaną zapisane w bazie danych.
Najpierw dodam Bootstrap CDN do 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>
Następnie w `body` tag, dodaj następujący kod HTML dla formularza 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>
Możesz zauważyć, że ustawiłem akcję na `functions.php` plik. W następnym kroku stworzę ten plik i dodam do niego kod. Dołączyłem również metodę `get_all_records()` pod koniec pliku. Ta metoda pobiera wszystkie rekordy z bazy danych i wyświetla rekordy w tabeli na stronie indeksu.
Następnie stworzę `functions.php` pliku i dodaj do niego następujący kod.
<?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); } } ?>
Gdy przesyłanie zostanie kliknięty, nazwa pliku tymczasowego zostanie zapisana w pamięci i przy użyciu `while` zapętl dane są zapisywane w $getData zmienny. Po zakończeniu procesu dane są sortowane według kolumn, a następnie wstawiane w „informacje o pracownikach” stół.
Zauważ, że `fgetcsv()` analizuje linie z otwartego pliku, sprawdzając pola CSV i `fopen()` otwiera plik lub adres URL. Ten kod można przetestować, importując plik CSV z danymi testowymi.
Wyświetl zapisane rekordy
Po zaimportowaniu pliku CSV wyświetlę dane za pomocą prostej funkcji `get_all_records()`, zainicjowane w `index.php`. Skopiuj tę funkcję do `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"; } }
W tej naprawdę prostej metodzie po prostu wybrałem wszystkie rekordy i wyświetliłem je na stronie indeksu poprzez metodę. Za każdym razem, gdy użytkownik prześle plik CSV, rekordy zostaną zapisane w tabeli, a następnie wyświetlone na stronie indeksu.
Eksportuj MySQL do CSV za pomocą PHP
Eksportowanie danych z bazy danych MySQL do pliku CSV jest podobnie bardzo łatwe. Aby to zademonstrować, użyję index.php które stworzyłem wcześniej.
Dodaj następujący kod do pliku.
<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>
Po dodaniu tego znacznika HTML Eksportuj przycisk pojawi się pod tabelą. Teraz dodaj następujący warunek w 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); }
Gdy „Eksport” zostanie kliknięty, nagłówki `Content-Type:text/csv` z załącznikiem `data.csv` jest wysłany.
Od `php://output` jest strumieniem tylko do zapisu, który umożliwia dostęp do zapisu w mechanizmie bufora wyjściowego, wybrałem wszystkie dane z tabeli w następnym wierszu i przekazałem je do `fputcsv()` metoda. Ta metoda formatuje wiersz (przekazywany jako tablica pól) jako CSV i zapisuje go (zakończony znakiem nowej linii) do określonego pliku. Na koniec pobierany jest plik ze wszystkimi żądanymi danymi.
Wreszcie, po zintegrowaniu całego kodu, zobaczysz następujący ostateczny kształt aplikacji.
Możesz też chcieć: Proste CRUD w PHP i MySQL
Wniosek
W tym artykule omówiłem, w jaki sposób można eksportować dane zi do plików CSV za pomocą PHP i MySQL. To jest prosty przykład, w którym możesz dodać bardziej złożoną logikę i walidacje zgodnie z własnymi wymaganiami. Możesz również tworzyć przypadki testowe, aby zweryfikować kod i wykonać Integerate za pomocą GitHub przy użyciu narzędzi PHP Continuous Integeration Tools. Jeśli chcesz dodać coś do dyskusji lub zadać pytanie, zostaw komentarz poniżej.
Często Zadawane PytaniaJak importować i eksportować CSV za pomocą php i MySQL?
- Zatwierdź przesłany rekord, niezależnie od tego, czy jest to znaczny plik CSV.
- Sprawdź stan transferu plików CSV za pomocą funkcji PHP is_uploaded_file().
- Dostęp do pliku CSV za pomocą funkcji PHP fopen().
- Przeanalizuj dane z rekordu CSV przy użyciu funkcji PHP fgetcsv().
- Wstaw lub zaktualizuj dane do bazy danych na podstawie adresu e-mail członka.