Tag: MySQL

WordPress custom menu page, fetch data from custom MySQL table and export to CSV

To create a custom menu page in WordPress, retrieve custom table data from MySQL, and display it with the ability to export to CSV/Excel, you can follow these steps:

  1. Create a custom table in your WordPress database to store your data. You can use the $wpdb global variable to interact with custom tables in WordPress. Here’s an example of creating a custom table:
<?php
global $wpdb;
$table_name = $wpdb->prefix . 'custom_data';

$sql = "CREATE TABLE IF NOT EXISTS $table_name (
    id INT(11) NOT NULL AUTO_INCREMENT,
    name VARCHAR(255) NOT NULL,
    email VARCHAR(255) NOT NULL,
    phone VARCHAR(20) NOT NULL,
    PRIMARY KEY (id)
) $charset_collate;";

require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
dbDelta($sql);
?>

Add the following code to your theme’s functions.php file or create a custom plugin file to define the custom menu page:

<?php
// Add menu page
function custom_menu_page()
{
    add_menu_page(
        'Custom Data',
        'Custom Data',
        'manage_options',
        'custom-data',
        'custom_menu_page_callback'
    );
}
add_action('admin_menu', 'custom_menu_page');

// Menu page callback function
function custom_menu_page_callback()
{
    global $wpdb;

    // Retrieve custom table data
    $table_name = $wpdb->prefix . 'custom_data';
    $results = $wpdb->get_results("SELECT * FROM $table_name", ARRAY_A);

    // Display custom table data
    echo '<div class="wrap">';
    echo '<h1>Custom Data</h1>';

    // Export to CSV/Excel button
    echo '<form method="post" action="' . admin_url('admin-post.php') . '">';
    echo '<input type="hidden" name="action" value="export_custom_data">';
    echo '<button type="submit" class="button">Export to CSV/Excel</button>';
    echo '</form>';

    // Display data in a table
    if ($results) {
        echo '<table>';
        echo '<thead><tr><th>Name</th><th>Email</th><th>Phone</th></tr></thead>';
        echo '<tbody>';
        foreach ($results as $row) {
            echo '<tr>';
            echo '<td>' . $row['name'] . '</td>';
            echo '<td>' . $row['email'] . '</td>';
            echo '<td>' . $row['phone'] . '</td>';
            echo '</tr>';
        }
        echo '</tbody>';
        echo '</table>';
    } else {
        echo '<p>No data found.</p>';
    }

    echo '</div>';
}

// Export to CSV/Excel action
function export_custom_data_action()
{
    global $wpdb;

    // Retrieve custom table data
    $table_name = $wpdb->prefix . 'custom_data';
    $results = $wpdb->get_results("SELECT * FROM $table_name", ARRAY_A);

    if ($results) {
        // Set headers for CSV/Excel file
        header('Content-Type: text/csv');
        header('Content-Disposition: attachment; filename="custom_data.csv"');
        $output = fopen('php://output', 'w');

        // Write data rows to CSV/Excel file
        foreach ($results as $row) {
            fputcsv($output, $row);
        }

        fclose($output);
        exit;
    }
}
add_action('admin_post_export_custom_data', 'export_custom_data_action');
add_action('admin_post_nopriv_export_custom_data', 'export_custom_data_action');
?>

3. Save the changes to the functions.php file or your custom plugin file.

4. In your WordPress admin dashboard, you will see a new menu page called “Custom Data.” Clicking on this menu item will display the custom table data in a table format. The page will also have a button labeled “Export to CSV/Excel” that allows you to download the data in CSV/Excel format.

Note: Make sure to update the table name, column names, and the export file name according to your custom table structure and requirements.

This code creates a custom table, retrieves the data from the table using $wpdb, and displays it in an HTML table on the custom menu page. It also includes a form that, upon submission, triggers an action to export the data to CSV/Excel. The exported file is downloaded with the name “custom_data.csv” and includes the data rows from the custom table.

Get total of MySQL column and show highest totals

To get the total of a MySQL field and then select the three highest totals from the table, you can use the following PHP script:

<?php
// Assuming you have already established a MySQL connection

// Retrieve the total of a field and select the three highest totals
$servername = "localhost";
$username = "your_username";
$password = "your_password";
$dbname = "your_database_name";

// Create a new MySQL connection
$conn = new mysqli($servername, $username, $password, $dbname);

// Check the connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

// Prepare and execute the SQL statement to get the total and select three highest totals
$sql = "SELECT SUM(field_name) AS total FROM table_name GROUP BY field_name ORDER BY total DESC LIMIT 3";
$result = $conn->query($sql);

if ($result && $result->num_rows > 0) {
    echo "Three highest totals: <br>";
    while ($row = $result->fetch_assoc()) {
        $total = $row['total'];
        echo $total . "<br>";
    }
} else {
    echo "No records found.";
}

// Close the database connection
$conn->close();
?>

Make sure to replace ‘your_username’, ‘your_password’, ‘your_database_name’, ‘field_name’, and ‘table_name’ with the actual values for your MySQL configuration and table structure.

In this script, the SQL query uses the SUM function to calculate the total of the specified field (field_name) and groups the results by the field values. It then orders the results in descending order of the totals and limits the result set to the top three rows.

The script retrieves the three highest totals from the query results and prints them on the screen. If no records are found, it displays a message indicating that no records were found.
Please make sure to adjust the SQL query and table/column names according to your specific table structure and requirements.

Get total of a mysql field and then select 3 all records which have heighest total from the table

To get the total of a MySQL field and then select all records that have the highest total from the table, you can use the following PHP script:

<?php
// Assuming you have already established a MySQL connection

// Retrieve the total of a field and select all records with the highest total
$servername = "localhost";
$username = "your_username";
$password = "your_password";
$dbname = "your_database_name";

// Create a new MySQL connection
$conn = new mysqli($servername, $username, $password, $dbname);

// Check the connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

// Prepare and execute the SQL statement to get the total and select all records with the highest total
$sql = "SELECT *, SUM(field_name) AS total FROM table_name GROUP BY id HAVING total = (SELECT MAX(total) FROM (SELECT SUM(field_name) AS total FROM table_name GROUP BY id) AS temp)";
$result = $conn->query($sql);

if ($result && $result->num_rows > 0) {
    echo "Records with the highest total: <br>";
    while ($row = $result->fetch_assoc()) {
        // Access the record data
        $id = $row['id'];
        $fieldValue = $row['field_name'];
        $total = $row['total'];

        // Process or display the record as needed
        echo "ID: $id, Field Value: $fieldValue, Total: $total <br>";
    }
} else {
    echo "No records found.";
}

// Close the database connection
$conn->close();
?>

Make sure to replace ‘your_username’, ‘your_password’, ‘your_database_name’, ‘field_name’, and ‘table_name’ with the actual values for your MySQL configuration and table structure.

In this script, the SQL query uses the SUM function to calculate the total of the specified field (field_name) for each record in the table. It then groups the results by the id column and selects only those records where the total is equal to the maximum total value across all records.
The script retrieves the records with the highest total from the query results and prints them on the screen. If no records are found, it displays a message indicating that no records were found. Please make sure to adjust the SQL query and table/column names according to your specific table structure and requirements.

Export MySQL data into CSV using PHP

To fetch data from a MySQL database and export it to CSV using PHP, you can follow these steps:

<?php
// Database connection details
$servername = "localhost";
$username = "your_username";
$password = "your_password";
$dbname = "your_database_name";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);

// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

// Fetch data from your table
$sql = "SELECT * FROM your_table";
$result = $conn->query($sql);

// Check if any rows are returned
if ($result->num_rows > 0) {
    // Define CSV filename
    $filename = "exported_data.csv";

    // Set headers for CSV download
    header('Content-Type: text/csv');
    header('Content-Disposition: attachment; filename="' . $filename . '"');

    // Create a file pointer connected to the output stream
    $output = fopen('php://output', 'w');

    // Output CSV header
    $header = array('ID', 'Name', 'Email');
    fputcsv($output, $header);

    // Output data from rows
    while ($row = $result->fetch_assoc()) {
        fputcsv($output, $row);
    }

    // Close the file pointer
    fclose($output);
} else {
    echo "No data found";
}

// Close the database connection
$conn->close();
?>

Explanation:

  1. Database Connection: Replace your_username, your_password, your_database_name, and your_table with your actual database credentials and table name.
  2. Fetch Data: The SQL query retrieves data from the specified table.
  3. CSV Headers: The header function is used to set headers for CSV download.
  4. CSV File Creation: We use fopen to create a file pointer connected to the output stream (php://output). Then, fputcsv is used to write the CSV header and data.
  5. Download CSV: Headers are set to prompt the user to download the CSV file with the specified filename.

When you run this script, it will fetch data from your MySQL table and export it to a CSV file, which will be downloaded by the user.

Import CSV data into MySQL using PHP

Here’s a detailed example of how to import data from a CSV file into a MySQL database using PHP. The script processes each row one by one, displays a success message for each successfully inserted row, and stops the process if any error occurs, showing the error message.

Prerequisites:

  1. Ensure you have a MySQL database and table set up to store the CSV data.
  2. Adjust the database connection details and table schema as needed.

Database Setup:

Assume you have a MySQL table named csv_import with columns id, name, and email.

CREATE TABLE csv_import (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(255) NOT NULL,
    email VARCHAR(255) NOT NULL
);

Here’s a PHP script that handles the CSV import process:

<?php
// Database connection details
$servername = "your_servername";
$username = "your_username";
$password = "your_password";
$dbname = "your_dbname";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);

// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

if (isset($_POST['submit'])) {
    $csvFile = $_FILES['csv']['tmp_name'];

    if (is_file($csvFile)) {
        // Open the CSV file
        if (($handle = fopen($csvFile, "r")) !== FALSE) {
            $rowNumber = 0;

            // Process each row of the CSV file
            while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
                $rowNumber++;

                // Skip the header row
                if ($rowNumber == 1) {
                    continue;
                }

                $name = $conn->real_escape_string($data[0]);
                $email = $conn->real_escape_string($data[1]);

                // Insert the data into the database
                $sql = "INSERT INTO csv_import (name, email) VALUES ('$name', '$email')";
                
                if ($conn->query($sql) === TRUE) {
                    echo "Row $rowNumber inserted successfully.<br>";
                } else {
                    echo "Error inserting row $rowNumber: " . $conn->error . "<br>";
                    break;
                }
            }

            fclose($handle);
        } else {
            echo "Error opening the CSV file.";
        }
    } else {
        echo "Invalid file.";
    }
}
$conn->close();
?>
Here the HTML to upload CSV file

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>CSV Import</title>
</head>
<body>
    <form action="" method="post" enctype="multipart/form-data">
        <label for="csv">Choose CSV file:</label>
        <input type="file" name="csv" id="csv" required>
        <button type="submit" name="submit">Import CSV</button>
    </form>
</body>
</html>

Explanation:

  1. Database Connection: Establish a connection to the MySQL database using the mysqli extension.
  2. Form Handling: The script checks if the form is submitted and processes the uploaded CSV file.
  3. CSV File Processing: It opens the CSV file and processes each row one by one using a while loop.
    It skips the header row.
    It escapes the data using $conn->real_escape_string to prevent SQL injection.
    It inserts the data into the csv_import table.
    It shows a success message for each inserted row.
    If any error occurs, it shows an error message and stops the process.
  4. HTML Form: The form allows the user to upload a CSV file.

Linux MySQL Commands

  1. Log into mysql
mysql -u root -p
  1. Import database as root user
mysql -u root -p mydatabase < backup.sql
  1. Import database as non root user
mysql -u myuser -p mydatabase < backup.sql
  1. Check tables
USE mydatabase;
SHOW TABLES;
  1. Delete all tables one by one
SET FOREIGN_KEY_CHECKS = 0;
DROP TABLE IF EXISTS table1table2table3, ...;
SET FOREIGN_KEY_CHECKS = 1;

Take Backup of Database

mysqldump -u root -p mydatabase > mydatabase_backup.sql

Covert all date data format from VARCHAR to DATE in any MySQL table

Converting varchar data to date format in MySQL involves several steps. Here’s a method to achieve this:

Assuming your varchar date column is named date_column and your table is named your_table, you can follow these steps:

  1. Add a New Date Column: First, add a new date column to your table.
    ALTER TABLE your_table ADD new_date_column DATE;
  2. Update New Date Column: Update the newly added date column using the STR_TO_DATE function to convert the varchar dates to date format.
    UPDATE your_table
    SET new_date_column = STR_TO_DATE(date_column, ‘your_date_format’);

    Replace ‘your_date_format’ with the format of the varchar dates in your column. For example, if your dates are in the format ‘YYYY-MM-DD’, use ‘%Y-%m-%d’.
  3. Drop Old Date Column: If you’re confident that the new date column contains the correct data, you can drop the old varchar date column.
    ALTER TABLE your_table DROP COLUMN date_column;
  4. Rename New Date Column: Finally, rename the new date column to the original column name.
    ALTER TABLE your_table CHANGE new_date_column date_column DATE;

Remember to take a backup of your data before making such changes to your database. Incorrectly manipulating your database structure can lead to data loss. If possible, it’s recommended to keep dates in the appropriate date or datetime format rather than varchar to avoid these kinds of issues.

Also, be aware that converting varchar data to date format directly in the database can be resource-intensive, especially if you have a large amount of data. It’s usually better to clean and format data before inserting it into the database in the correct format.

Export MySQL data into Excel using PHP

To fetch data from a MySQL database and export it to Excel, you can use PHP along with a library like PHPExcel or PHPSpreadsheet (which is the successor of PHPExcel). Here, I’ll provide an example using PHPExcel.

Please note that PHPExcel is now deprecated, and PHPSpreadsheet is recommended for new projects. If you’re starting a new project, consider using PHPSpreadsheet. However, if you need to work with PHPExcel for any reason, you can still find it on GitHub (https://github.com/PHPOffice/PHPExcel).

1. Install PHPSpreadsheet:

You can install PHPSpreadsheet using Composer:

composer require phpoffice/phpspreadsheet

2. Create a PHP Script (export_excel.php):

<?php
require 'vendor/autoload.php';

use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;

// Database connection details
$servername = "localhost";
$username = "your_username";
$password = "your_password";
$dbname = "your_database_name";

// Create a new Spreadsheet object
$spreadsheet = new Spreadsheet();

// Fetch data from the database
$conn = new mysqli($servername, $username, $password, $dbname);

if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

$sql = "SELECT * FROM your_table";
$result = $conn->query($sql);

// Set column headers
$spreadsheet->setActiveSheetIndex(0)
    ->setCellValue('A1', 'ID')
    ->setCellValue('B1', 'Name')
    ->setCellValue('C1', 'Email');

// Populate data
$row = 2; // Start from row 2
while ($row_data = $result->fetch_assoc()) {
    $spreadsheet->getActiveSheet()
        ->setCellValue('A' . $row, $row_data['id'])
        ->setCellValue('B' . $row, $row_data['name'])
        ->setCellValue('C' . $row, $row_data['email']);

    $row++;
}

// Rename worksheet
$spreadsheet->getActiveSheet()->setTitle('Sheet 1');

// Redirect output to a client's web browser (Excel2007)
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="exported_data.xlsx"');
header('Cache-Control: max-age=0');

$writer = new Xlsx($spreadsheet);
$writer->save('php://output');
exit;
?>

3. Note:

Replace your_table with the actual name of your database table. Ensure you have Composer installed and run composer require phpoffice/phpspreadsheet in your project directory to install PHPSpreadsheet. When you access export_excel.php, it will generate an Excel file with the data fetched from your MySQL database.

© 2025 Wavesdream Blog

Theme by Anders NorénUp ↑