اذهب إلى المحتوى

السؤال

نشر (معدل)

كيفكم يا أصدقاء فيه عندي 20 جدول عرض php يعرض لي البيانات نصية وصور من قاعدة بيانات mysqli والعملية ناجحة مافيها مشكله ....السؤال هو  بدي اضع زر تحميل البيانات إلى اكسل... كيف؟ 

تم التعديل في بواسطة Omer Amad

Recommended Posts

  • 0
نشر

لتحميل البيانات من جداول في php إلى ملف Excel، يمكنك استخدام مكتبة مثل PhpSpreadsheet ويمكنك زيارة التوثيق الرسمي الخاص بها من خلال الرابط التالي :

ولتحميل المكتبة يمكنك تنفيذ الأمر التالي في سطر الأوامر في مجلد المشروع لديك :

composer require phpoffice/phpspreadsheet

بعد ذلك يجب إنشاء ملف php  لتحميل البيانات إلى Excel حيث سنقوم بإنشاء ملف وليسمي مثلا to_excell.php :

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

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

// إنشاء كائن Spreadsheet
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();

// الاتصال بقاعدة البيانات
$conn = new mysqli('localhost', 'username', 'password', 'database');

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

// استعلام لجلب البيانات
$sql = "SELECT * FROM your_table"; // هنا يجب التغير إلي إسم الجدو الخاص بك
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    // كتابة رؤوس الأعمدة
    $columns = $result->fetch_fields();
    $col = 1;
    foreach ($columns as $column) {
        $sheet->setCellValueByColumnAndRow($col, 1, $column->name);
        $col++;
    }

    // كتابة البيانات
    $rowNumber = 2;
    while ($row = $result->fetch_assoc()) {
        $col = 1;
        foreach ($row as $value) {
            $sheet->setCellValueByColumnAndRow($col, $rowNumber, $value);
            $col++;
        }
        $rowNumber++;
    }
}

$conn->close();

// إنشاء ملف Excel
$writer = new Xlsx($spreadsheet);
$filename = 'data.xlsx';

// إرسال ملف Excel للتنزيل
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="' . $filename . '"');

$writer->save('php://output');
exit;
?>

هنا قمنا أولا بالإتصال بقاعدة البيانات بعد ذلك إحضار البيانات من الجدول .

ومن ثم إنشاء sheet جديد و إنشاء أسماء الأعمدة أولا ومن ثم إنشاء الصفوف الخاصة بالبيانات .

وإذا أردت إدراج أعمدة معين في الملف يجب عليك إختيار تلك الأعمدة فقط عن الإستدعاء من قاعدة البيانات من خلال select للأعمدة فقط

  • 0
نشر
بتاريخ 7 دقائق مضت قال محمد عاطف17:

لتحميل البيانات من جداول في php إلى ملف Excel، يمكنك استخدام مكتبة مثل PhpSpreadsheet ويمكنك زيارة التوثيق الرسمي الخاص بها من خلال الرابط التالي :

ولتحميل المكتبة يمكنك تنفيذ الأمر التالي في سطر الأوامر في مجلد المشروع لديك :

composer require phpoffice/phpspreadsheet

بعد ذلك يجب إنشاء ملف php  لتحميل البيانات إلى Excel حيث سنقوم بإنشاء ملف وليسمي مثلا to_excell.php :

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

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

// إنشاء كائن Spreadsheet
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();

// الاتصال بقاعدة البيانات
$conn = new mysqli('localhost', 'username', 'password', 'database');

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

// استعلام لجلب البيانات
$sql = "SELECT * FROM your_table"; // هنا يجب التغير إلي إسم الجدو الخاص بك
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    // كتابة رؤوس الأعمدة
    $columns = $result->fetch_fields();
    $col = 1;
    foreach ($columns as $column) {
        $sheet->setCellValueByColumnAndRow($col, 1, $column->name);
        $col++;
    }

    // كتابة البيانات
    $rowNumber = 2;
    while ($row = $result->fetch_assoc()) {
        $col = 1;
        foreach ($row as $value) {
            $sheet->setCellValueByColumnAndRow($col, $rowNumber, $value);
            $col++;
        }
        $rowNumber++;
    }
}

$conn->close();

// إنشاء ملف Excel
$writer = new Xlsx($spreadsheet);
$filename = 'data.xlsx';

// إرسال ملف Excel للتنزيل
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="' . $filename . '"');

$writer->save('php://output');
exit;
?>

هنا قمنا أولا بالإتصال بقاعدة البيانات بعد ذلك إحضار البيانات من الجدول .

ومن ثم إنشاء sheet جديد و إنشاء أسماء الأعمدة أولا ومن ثم إنشاء الصفوف الخاصة بالبيانات .

وإذا أردت إدراج أعمدة معين في الملف يجب عليك إختيار تلك الأعمدة فقط عن الإستدعاء من قاعدة البيانات من خلال select للأعمدة فقط

هل توجد طريقة أخرى بعيداً عن استخدام مكتبة؟ 

بتاريخ 20 دقائق مضت قال محمد عاطف17:

لتحميل البيانات من جداول في php إلى ملف Excel، يمكنك استخدام مكتبة مثل PhpSpreadsheet ويمكنك زيارة التوثيق الرسمي الخاص بها من خلال الرابط التالي :

ولتحميل المكتبة يمكنك تنفيذ الأمر التالي في سطر الأوامر في مجلد المشروع لديك :

composer require phpoffice/phpspreadsheet

بعد ذلك يجب إنشاء ملف php  لتحميل البيانات إلى Excel حيث سنقوم بإنشاء ملف وليسمي مثلا to_excell.php :

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

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

// إنشاء كائن Spreadsheet
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();

// الاتصال بقاعدة البيانات
$conn = new mysqli('localhost', 'username', 'password', 'database');

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

// استعلام لجلب البيانات
$sql = "SELECT * FROM your_table"; // هنا يجب التغير إلي إسم الجدو الخاص بك
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    // كتابة رؤوس الأعمدة
    $columns = $result->fetch_fields();
    $col = 1;
    foreach ($columns as $column) {
        $sheet->setCellValueByColumnAndRow($col, 1, $column->name);
        $col++;
    }

    // كتابة البيانات
    $rowNumber = 2;
    while ($row = $result->fetch_assoc()) {
        $col = 1;
        foreach ($row as $value) {
            $sheet->setCellValueByColumnAndRow($col, $rowNumber, $value);
            $col++;
        }
        $rowNumber++;
    }
}

$conn->close();

// إنشاء ملف Excel
$writer = new Xlsx($spreadsheet);
$filename = 'data.xlsx';

// إرسال ملف Excel للتنزيل
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="' . $filename . '"');

$writer->save('php://output');
exit;
?>

هنا قمنا أولا بالإتصال بقاعدة البيانات بعد ذلك إحضار البيانات من الجدول .

ومن ثم إنشاء sheet جديد و إنشاء أسماء الأعمدة أولا ومن ثم إنشاء الصفوف الخاصة بالبيانات .

وإذا أردت إدراج أعمدة معين في الملف يجب عليك إختيار تلك الأعمدة فقط عن الإستدعاء من قاعدة البيانات من خلال select للأعمدة فقط

انا عامل الجداول كامله مافيها مشكله انا فقط بدي الكود الخاص بتحميل البيانات من جدول إلى الأكسل... اما موضوع الاعمده والاتصال والاستعلام مافيها مشكله جميعها جاهزة 

  • 0
نشر
بتاريخ 11 دقائق مضت قال Omer Amad:

هل توجد طريقة أخرى بعيداً عن استخدام مكتبة؟ 

نعم بالطبع يمكنك إستخدام الكود التالي :

<?php
// إعداد قاعدة البيانات
$host = 'localhost';  // اسم المضيف
$dbname = 'db_name';  // اسم قاعدة البيانات
$username = 'root';  // اسم المستخدم
$password = '';  // كلمة المرور

// إنشاء اتصال بقاعدة البيانات
$mysqli = new mysqli($host, $username, $password, $dbname);

// التحقق من وجود أخطاء في الاتصال
if ($mysqli->connect_error) {
    die("فشل الاتصال: " . $mysqli->connect_error);
}

// استعلام البيانات
$query = "SELECT * FROM your_table_name";  // استبدل your_table_name باسم الجدول الذي تريد تصديره
$result = $mysqli->query($query);

$columns_name = [];
$columns = $result->fetch_fields();

$columns = $result->fetch_fields();
foreach ($columns as $column) {
    $columns_name[]=$column->name; // هنا ننشئ الجزء الخاص بأسماء الأعمدة
}
// إعداد رأس HTTP لتنزيل ملف CSV
header('Content-Type: text/csv');
header('Content-Disposition: attachment;filename="data.csv"');

// فتح مخرجات للتدفق بالكتابة
$output = fopen('php://output', 'w');

// كتابة رؤوس الأعمدة إلى ملف CSV (إذا كانت هناك رؤوس)
fputcsv($output, $columns_name);  // استبدل الأعمدة بأسماء الأعمدة الفعلية

// كتابة البيانات إلى ملف CSV
while ($row = $result->fetch_assoc()) {
    fputcsv($output, $row);
}

// إغلاق المخرجات
fclose($output);

// إغلاق الاتصال بقاعدة البيانات
$mysqli->close();
?>

 

  • 0
نشر
بتاريخ 22 دقائق مضت قال محمد عاطف17:

نعم بالطبع يمكنك إستخدام الكود التالي :

<?php
// إعداد قاعدة البيانات
$host = 'localhost';  // اسم المضيف
$dbname = 'db_name';  // اسم قاعدة البيانات
$username = 'root';  // اسم المستخدم
$password = '';  // كلمة المرور

// إنشاء اتصال بقاعدة البيانات
$mysqli = new mysqli($host, $username, $password, $dbname);

// التحقق من وجود أخطاء في الاتصال
if ($mysqli->connect_error) {
    die("فشل الاتصال: " . $mysqli->connect_error);
}

// استعلام البيانات
$query = "SELECT * FROM your_table_name";  // استبدل your_table_name باسم الجدول الذي تريد تصديره
$result = $mysqli->query($query);

$columns_name = [];
$columns = $result->fetch_fields();

$columns = $result->fetch_fields();
foreach ($columns as $column) {
    $columns_name[]=$column->name; // هنا ننشئ الجزء الخاص بأسماء الأعمدة
}
// إعداد رأس HTTP لتنزيل ملف CSV
header('Content-Type: text/csv');
header('Content-Disposition: attachment;filename="data.csv"');

// فتح مخرجات للتدفق بالكتابة
$output = fopen('php://output', 'w');

// كتابة رؤوس الأعمدة إلى ملف CSV (إذا كانت هناك رؤوس)
fputcsv($output, $columns_name);  // استبدل الأعمدة بأسماء الأعمدة الفعلية

// كتابة البيانات إلى ملف CSV
while ($row = $result->fetch_assoc()) {
    fputcsv($output, $row);
}

// إغلاق المخرجات
fclose($output);

// إغلاق الاتصال بقاعدة البيانات
$mysqli->close();
?>

 

 لماذا عملت اتصال مع قاعدة بيانات ولماذا عملت اعمده... استاذ الاتصال مع قاعدة بيانات وكود الاعمده والاستعلام جميعها جاهزه... فقط بدي كود تحميل البيانات على الأكسل 

  • 0
نشر
بتاريخ الآن قال Omer Amad:

 لماذا عملت اتصال مع قاعدة بيانات ولماذا عملت اعمده... استاذ الاتصال مع قاعدة بيانات وكود الاعمده والاستعلام جميعها جاهزه... فقط بدي كود تحميل البيانات على الأكسل 

نعم هذا الكود سيقوم بتحميل الملف بصيغة excel وبه جميع البيانات . كل ما عليك هو إنشاء لينك يشير إلي رابط الملف هكذا مثلا :

<a href="/to_excell.php">تحميل</a>

وعند  الضغط علي الزر سيقوم بالتوجيه إلى الملف to_excell.php ويمكنك تغيره إلي إسم الملف الذى لديك وسيقوم بتحميل ملف excell به البيانات .

وهذا هو الكود الخاص فقط بتحميل البيانات إلي excel ولكن يجب أن يتواجد المتغير $result والذي هو عبارة عن الإستعلام

$columns_name = [];
$columns = $result->fetch_fields();

$columns = $result->fetch_fields();
foreach ($columns as $column) {
    $columns_name[]=$column->name; // هنا ننشئ الجزء الخاص بأسماء الأعمدة
}
// إعداد رأس HTTP لتنزيل ملف CSV
header('Content-Type: text/csv');
header('Content-Disposition: attachment;filename="data.csv"');

// فتح مخرجات للتدفق بالكتابة
$output = fopen('php://output', 'w');

// كتابة رؤوس الأعمدة إلى ملف CSV (إذا كانت هناك رؤوس)
fputcsv($output, $columns_name);  // استبدل الأعمدة بأسماء الأعمدة الفعلية

// كتابة البيانات إلى ملف CSV
while ($row = $result->fetch_assoc()) {
    fputcsv($output, $row);
}

// إغلاق المخرجات
fclose($output);

 

  • 0
نشر
بتاريخ 4 دقائق مضت قال محمد عاطف17:

نعم هذا الكود سيقوم بتحميل الملف بصيغة excel وبه جميع البيانات . كل ما عليك هو إنشاء لينك يشير إلي رابط الملف هكذا مثلا :

<a href="/to_excell.php">تحميل</a>

وعند  الضغط علي الزر سيقوم بالتوجيه إلى الملف to_excell.php ويمكنك تغيره إلي إسم الملف الذى لديك وسيقوم بتحميل ملف excell به البيانات .

وهذا هو الكود الخاص فقط بتحميل البيانات إلي excel ولكن يجب أن يتواجد المتغير $result والذي هو عبارة عن الإستعلام

$columns_name = [];
$columns = $result->fetch_fields();

$columns = $result->fetch_fields();
foreach ($columns as $column) {
    $columns_name[]=$column->name; // هنا ننشئ الجزء الخاص بأسماء الأعمدة
}
// إعداد رأس HTTP لتنزيل ملف CSV
header('Content-Type: text/csv');
header('Content-Disposition: attachment;filename="data.csv"');

// فتح مخرجات للتدفق بالكتابة
$output = fopen('php://output', 'w');

// كتابة رؤوس الأعمدة إلى ملف CSV (إذا كانت هناك رؤوس)
fputcsv($output, $columns_name);  // استبدل الأعمدة بأسماء الأعمدة الفعلية

// كتابة البيانات إلى ملف CSV
while ($row = $result->fetch_assoc()) {
    fputcsv($output, $row);
}

// إغلاق المخرجات
fclose($output);

 

 سيكون هذا الكود في ملف واحد.... ونضع لنك في جميع ملفات الخاصة بالجداول صح؟ ام غير ذالك 

  • 0
نشر
بتاريخ الآن قال Omer Amad:

 سيكون هذا الكود في ملف واحد.... ونضع لنك في جميع ملفات الخاصة بالجداول صح؟ ام غير ذالك 

نعم صحيح ملف واحد. ولكن هذا يعتمد علي الجداول فيجب أن يكون كل لينك خاص بالجدول الذي تريد تحميله.

يمكنك تمرير متغيرات query params في الرابط ليشير إلي الجدول الذى تريد تحميله وفي الملف تحضر نتيجة الإستعلام عن هذا الجدول .

وإذا لم تكن الجداول كثيرة ولم تستطع إستخدام طريقة ال query params يمكنك إستخدام هذا الكود في عدة ملفات وكل ملف خاص بإستعلام جدول معين .

  • 0
نشر
بتاريخ 5 دقائق مضت قال محمد عاطف17:

نعم صحيح ملف واحد. ولكن هذا يعتمد علي الجداول فيجب أن يكون كل لينك خاص بالجدول الذي تريد تحميله.

يمكنك تمرير متغيرات query params في الرابط ليشير إلي الجدول الذى تريد تحميله وفي الملف تحضر نتيجة الإستعلام عن هذا الجدول .

وإذا لم تكن الجداول كثيرة ولم تستطع إستخدام طريقة ال query params يمكنك إستخدام هذا الكود في عدة ملفات وكل ملف خاص بإستعلام جدول معين .

هل توجد مشكلة إذا أنشأت لكل ملف جدول... ملف خاص فيه كود تحميل الأكسل؟ سيكون لديه قرابه اال22 ملف تحميل بيانات اكسل مع 22 ملف جدول... هل توجد مشكلة في ذالك؟ 

  • 0
نشر
بتاريخ 2 دقائق مضت قال Omer Amad:

هل توجد مشكلة إذا أنشأت لكل ملف جدول... ملف خاص فيه كود تحميل الأكسل؟ سيكون لديه قرابه اال22 ملف تحميل بيانات اكسل مع 22 ملف جدول... هل توجد مشكلة في ذالك؟ 

لا مشكلة ولكن الكود سيكون مكررا كثيرا . 

يمكنك وضع الكود الذي ارسلته في ملف و إستدعاء هذا الملف عن طريق include وهذا أفضل حل بدلا من تكرار الكودد 22 مرة.

  • 0
نشر (معدل)
بتاريخ 33 دقائق مضت قال محمد عاطف17:

لا مشكلة ولكن الكود سيكون مكررا كثيرا . 

يمكنك وضع الكود الذي ارسلته في ملف و إستدعاء هذا الملف عن طريق include وهذا أفضل حل بدلا من تكرار الكودد 22 مرة.

صديقي الرائع يبدو أنك لم تفهمني... سوف أوضح لك الموضوع... 

 

فيه عندي قاعدة بيانات mysqli... 

يوجد فيها جدولين 

الأول اسمه UN مرتبط مع form 

الثاني اسمه CH مرتبط مع form 

أنشأت جداول php... حتى يتم عرض البيانات من قاعدة بيانات mysqli.... 

لديه 10 ملفات جداول php خاصة لعرض بيانات من جدول UN..... 

اسماء ملفات الخاصة بعرض بيانات من جدول UN

SHOW1. PHP

SHOW2. PHP

SHOW3. PHP 

SHOW4. PHP

SHOW5. PHP

SHOW6. PHP

SHOW7. PHP

SHOW8. PHP 

SHOW9. PHP 

SHOW10. PHP 

لديه 10 ملفات جداول php خاصة لعرض بيانات من جدول CH

اسماء ملفات الخاصة ب جداول الذي تعرض بيانات من جدول بيانات CH

SHOW_1.PHP

SHOW_2.PHP

SHOW_3.PHP

SHOW_4.PHP

SHOW_5.PHP

SHOW_6.PHP

SHOW_7.PHP

SHOW_8.PHP

SHOW_9.PHP

SHOW_10.PHP

الى هنا عمليه الاتصال والإرسال والعرض ناجحة ومافيها مشكله...... 

............................ 

 

بدي اعمل زر تحميل البيانات من جدول PHP إلى اكسل... البيانات الموجودة نصوص وصور... علمآ ملفات جداول UN فيها اعمده مختلفه عن ملفات جداول CH.... فقط بدي كود الخاص ب تحميل البيانات من جدول PHP إلى اكسل.... 

 

 

 

تم التعديل في بواسطة Omer Amad
  • 0
نشر
بتاريخ 2 ساعة قال مريم-ياسمين:

كود فعال 100% لكن عندي مشكلة المعلومات باللغة العربية تظهر برموز غريبة هل يمكن مساعدتي 

عليكِ استخدام ترميز UTF-8 لنقم بتجربة الحلول التالية بالترتيب:

 

في بداية ملف to_excell.php، أضيفي السطر التالي:

header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet; charset=utf-8');

فذلك يحدد ترميز UTF-8 لملف Excel.

2- بدلاً من setCellValueByColumnAndRow, استخدمي setCellValueExplicit مع تحديد نوع البيانات كـ DataType::TYPE_STRING وذلك لضمان كتابة النصوص العربية بشكل صحيح، ويجب أيضاً تحديد الترميز صراحةً:

use PhpOffice\PhpSpreadsheet\Cell\DataType;

//  داخل الحلقة while
$sheet->setCellValueExplicit($col, $rowNumber, $value, DataType::TYPE_STRING);

3- تأكدي من أن ملف to_excell.php نفسه مُحفظ باستخدام ترميز UTF-8 بدون BOM (Byte Order Mark).

تستطيعي تفقد ذلك باستخدام محرر نصوص يدعم ترميز الأحرف مثل Notepad++ أو Sublime Text.

4-  تحويل النصوص العربية إلى UTF-8 قبل كتابتها في ملف Excel باستخدام دالة mb_convert_encoding:

$value = mb_convert_encoding($value, 'UTF-8', 'auto');
$sheet->setCellValueExplicit($col, $rowNumber, $value, DataType::TYPE_STRING);

5- حفظ ملف Excel بترميز UTF-8

$writer->save('php://output', 'UTF-8'); 

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...