Omer Amad نشر 7 أغسطس أرسل تقرير نشر 7 أغسطس (معدل) كيفكم يا أصدقاء فيه عندي 20 جدول عرض php يعرض لي البيانات نصية وصور من قاعدة بيانات mysqli والعملية ناجحة مافيها مشكله ....السؤال هو بدي اضع زر تحميل البيانات إلى اكسل... كيف؟ تم التعديل في 7 أغسطس بواسطة Omer Amad 1 اقتباس
0 محمد عاطف17 نشر 7 أغسطس أرسل تقرير نشر 7 أغسطس لتحميل البيانات من جداول في php إلى ملف Excel، يمكنك استخدام مكتبة مثل PhpSpreadsheet ويمكنك زيارة التوثيق الرسمي الخاص بها من خلال الرابط التالي : https://phpspreadsheet.readthedocs.io/en/latest/ ولتحميل المكتبة يمكنك تنفيذ الأمر التالي في سطر الأوامر في مجلد المشروع لديك : 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 للأعمدة فقط 1 اقتباس
0 Omer Amad نشر 7 أغسطس الكاتب أرسل تقرير نشر 7 أغسطس بتاريخ 7 دقائق مضت قال محمد عاطف17: لتحميل البيانات من جداول في php إلى ملف Excel، يمكنك استخدام مكتبة مثل PhpSpreadsheet ويمكنك زيارة التوثيق الرسمي الخاص بها من خلال الرابط التالي : https://phpspreadsheet.readthedocs.io/en/latest/ ولتحميل المكتبة يمكنك تنفيذ الأمر التالي في سطر الأوامر في مجلد المشروع لديك : 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 ويمكنك زيارة التوثيق الرسمي الخاص بها من خلال الرابط التالي : https://phpspreadsheet.readthedocs.io/en/latest/ ولتحميل المكتبة يمكنك تنفيذ الأمر التالي في سطر الأوامر في مجلد المشروع لديك : 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 للأعمدة فقط انا عامل الجداول كامله مافيها مشكله انا فقط بدي الكود الخاص بتحميل البيانات من جدول إلى الأكسل... اما موضوع الاعمده والاتصال والاستعلام مافيها مشكله جميعها جاهزة 1 اقتباس
0 محمد عاطف17 نشر 7 أغسطس أرسل تقرير نشر 7 أغسطس بتاريخ 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(); ?> 1 اقتباس
0 Omer Amad نشر 7 أغسطس الكاتب أرسل تقرير نشر 7 أغسطس بتاريخ 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(); ?> لماذا عملت اتصال مع قاعدة بيانات ولماذا عملت اعمده... استاذ الاتصال مع قاعدة بيانات وكود الاعمده والاستعلام جميعها جاهزه... فقط بدي كود تحميل البيانات على الأكسل 1 اقتباس
0 محمد عاطف17 نشر 7 أغسطس أرسل تقرير نشر 7 أغسطس بتاريخ الآن قال 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); 1 اقتباس
0 Omer Amad نشر 7 أغسطس الكاتب أرسل تقرير نشر 7 أغسطس بتاريخ 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); سيكون هذا الكود في ملف واحد.... ونضع لنك في جميع ملفات الخاصة بالجداول صح؟ ام غير ذالك 1 اقتباس
0 محمد عاطف17 نشر 7 أغسطس أرسل تقرير نشر 7 أغسطس بتاريخ الآن قال Omer Amad: سيكون هذا الكود في ملف واحد.... ونضع لنك في جميع ملفات الخاصة بالجداول صح؟ ام غير ذالك نعم صحيح ملف واحد. ولكن هذا يعتمد علي الجداول فيجب أن يكون كل لينك خاص بالجدول الذي تريد تحميله. يمكنك تمرير متغيرات query params في الرابط ليشير إلي الجدول الذى تريد تحميله وفي الملف تحضر نتيجة الإستعلام عن هذا الجدول . وإذا لم تكن الجداول كثيرة ولم تستطع إستخدام طريقة ال query params يمكنك إستخدام هذا الكود في عدة ملفات وكل ملف خاص بإستعلام جدول معين . 1 اقتباس
0 Omer Amad نشر 7 أغسطس الكاتب أرسل تقرير نشر 7 أغسطس بتاريخ 5 دقائق مضت قال محمد عاطف17: نعم صحيح ملف واحد. ولكن هذا يعتمد علي الجداول فيجب أن يكون كل لينك خاص بالجدول الذي تريد تحميله. يمكنك تمرير متغيرات query params في الرابط ليشير إلي الجدول الذى تريد تحميله وفي الملف تحضر نتيجة الإستعلام عن هذا الجدول . وإذا لم تكن الجداول كثيرة ولم تستطع إستخدام طريقة ال query params يمكنك إستخدام هذا الكود في عدة ملفات وكل ملف خاص بإستعلام جدول معين . هل توجد مشكلة إذا أنشأت لكل ملف جدول... ملف خاص فيه كود تحميل الأكسل؟ سيكون لديه قرابه اال22 ملف تحميل بيانات اكسل مع 22 ملف جدول... هل توجد مشكلة في ذالك؟ 1 اقتباس
0 محمد عاطف17 نشر 7 أغسطس أرسل تقرير نشر 7 أغسطس بتاريخ 2 دقائق مضت قال Omer Amad: هل توجد مشكلة إذا أنشأت لكل ملف جدول... ملف خاص فيه كود تحميل الأكسل؟ سيكون لديه قرابه اال22 ملف تحميل بيانات اكسل مع 22 ملف جدول... هل توجد مشكلة في ذالك؟ لا مشكلة ولكن الكود سيكون مكررا كثيرا . يمكنك وضع الكود الذي ارسلته في ملف و إستدعاء هذا الملف عن طريق include وهذا أفضل حل بدلا من تكرار الكودد 22 مرة. 1 اقتباس
0 Omer Amad نشر 7 أغسطس الكاتب أرسل تقرير نشر 7 أغسطس (معدل) بتاريخ 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 إلى اكسل.... تم التعديل في 7 أغسطس بواسطة Omer Amad اقتباس
0 مريم-ياسمين نشر 29 سبتمبر أرسل تقرير نشر 29 سبتمبر كود فعال 100% لكن عندي مشكلة المعلومات باللغة العربية تظهر برموز غريبة هل يمكن مساعدتي 1 اقتباس
0 Mustafa Suleiman نشر 29 سبتمبر أرسل تقرير نشر 29 سبتمبر بتاريخ 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'); اقتباس
السؤال
Omer Amad
كيفكم يا أصدقاء فيه عندي 20 جدول عرض php يعرض لي البيانات نصية وصور من قاعدة بيانات mysqli والعملية ناجحة مافيها مشكله ....السؤال هو بدي اضع زر تحميل البيانات إلى اكسل... كيف؟
تم التعديل في بواسطة Omer Amad12 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.