php

  • إدراج بيانات متعددة في قاعدة البيانات باستخدام PHP

    لنفترض أن لديك جدولًا في قاعدة البيانات الخاصة بك يسمى “table_name”، وهذا الجدول يحتوي على أعمدة “user_id” و “menu_id” و “submenu_id”. يمكنك استخدام لغة الاستعلام المهيكلة (SQL) لإدراج البيانات بشكل ديناميكي. في لغة PHP، يمكنك استخدام حلقة تكرار للتحكم في عملية الإدراج. هناك طرق عديدة للقيام بذلك، لكنني سأقدم لك واحدة من الطرق الشائعة:

    php
    // بيانات الاتصال بقاعدة البيانات $servername = "اسم الخادم"; $username = "اسم المستخدم"; $password = "كلمة المرور"; $dbname = "اسم قاعدة البيانات"; // إنشاء اتصال بقاعدة البيانات $conn = new mysqli($servername, $username, $password, $dbname); // التحقق من الاتصال if ($conn->connect_error) { die("فشل الاتصال: " . $conn->connect_error); } // البيانات المرسلة من النموذج $user_ids = $_POST['user_id']; $menu_ids = $_POST['menu_id']; $submenu_ids = $_POST['submenu_id']; // حلقة تكرار لإدراج البيانات for ($i = 0; $i < count($user_ids); $i++) { $user_id = $user_ids[$i]; $menu_id = $menu_ids[$i]; $submenu_id = $submenu_ids[$i]; $sql = "INSERT INTO table_name (user_id, menu_id, submenu_id) VALUES ('$user_id', '$menu_id', '$submenu_id')"; if ($conn->query($sql) === TRUE) { echo "تم إدراج السجل بنجاح"; } else { echo "خطأ في الإدراج: " . $sql . "
    "
    . $conn->error; } } // إغلاق الاتصال بقاعدة البيانات $conn->close(); ?>

    في هذا المثال، نقوم بفتح اتصالٍ بقاعدة البيانات ونحدد بيانات الاتصال (اسم الخادم، اسم المستخدم، كلمة المرور، واسم قاعدة البيانات). ثم نستخدم حلقة تكرار لتكرار عملية الإدراج بناءً على المصفوفات التي تم تمريرها من النموذج. داخل الحلقة، يتم بناء استعلام SQL لكل مجموعة من البيانات وتنفيذه باستخدام دالة query(). يتم فحص نتائج الاستعلام لمعرفة ما إذا كان الإدراج ناجحًا أم لا وطباعة رسالة توضيحية بناءً على النتيجة. أخيرًا، يتم إغلاق الاتصال بقاعدة البيانات بعد الانتهاء من عملية الإدراج.

    يرجى ملاحظة أنه يجب تعديل الكود ليناسب بنية جدولك واحتياجاتك الخاصة، وكذلك تحقق دائمًا من البيانات المدخلة لتجنب هجمات إدخال البيانات غير المصرح بها (مثل هجمات حقن SQL).

    المزيد من المعلومات

    بالتأكيد، دعنا نستكمل المقال لنوفر للقراء فهمًا شاملاً حول كيفية إدراج البيانات في قاعدة البيانات من مصفوفة متعددة باستخدام حلقة تكرار في لغة PHP.

    التحضيرات الأولية:

    قبل أن نبدأ في كتابة الكود، هناك بعض التحضيرات الأولية التي يجب علينا القيام بها:

    1. إعداد قاعدة البيانات: تأكد من أنك قمت بإنشاء جدول في قاعدة البيانات الخاصة بك بنفس الهيكل الذي تريده لتخزين البيانات.

    2. الاتصال بقاعدة البيانات: قم بإنشاء اتصال بقاعدة البيانات باستخدام معلومات اتصال صحيحة (اسم الخادم، اسم المستخدم، كلمة المرور، واسم قاعدة البيانات).

    كتابة الكود:

    الآن بعد إكمال التحضيرات، يمكننا كتابة الكود اللازم لإدراج البيانات في قاعدة البيانات. نفترض أننا قمنا بذلك في القسم السابق من المقال.

    1. استخراج البيانات من المصفوفات:
      قم بتخزين المصفوفات المستلمة من النموذج في متغيرات PHP:
    php
    $user_ids = $_POST['user_id']; $menu_ids = $_POST['menu_id']; $submenu_ids = $_POST['submenu_id'];

    تأكد من تنظيف وتحقق البيانات المدخلة لمنع هجمات حقن SQL.

    1. حلقة تكرار لإدراج البيانات:
      استخدم حلقة تكرار لتكرار عملية الإدراج بناءً على المصفوفات التي تم تمريرها:
    php
    for ($i = 0; $i < count($user_ids); $i++) { $user_id = $user_ids[$i]; $menu_id = $menu_ids[$i]; $submenu_id = $submenu_ids[$i]; // بناء استعلام SQL $sql = "INSERT INTO table_name (user_id, menu_id, submenu_id) VALUES ('$user_id', '$menu_id', '$submenu_id')"; // تنفيذ الاستعلام if ($conn->query($sql) === TRUE) { echo "تم إدراج السجل بنجاح"; } else { echo "خطأ في الإدراج: " . $sql . "
    "
    . $conn->error; } }
    1. إغلاق الاتصال بقاعدة البيانات:
      لا تنسى إغلاق الاتصال بقاعدة البيانات بمجرد الانتهاء من عملية الإدراج:
    php
    $conn->close();

    الختام:

    بهذا، قد قمنا بإكمال كتابة الكود لإدراج البيانات في قاعدة البيانات من مصفوفة متعددة باستخدام حلقة تكرار في لغة PHP. يجب دائمًا التحقق من البيانات المدخلة وتنظيفها لضمان أمان تطبيقك. كما يمكنك تعديل الكود حسب احتياجاتك الخاصة، مثل استخدام استعلامات محسنة أو إضافة مزيد من التحقق من البيانات.

  • عرض برامج Windows باستخدام PHP

    للقيام بعملية عرض قائمة بجميع البرامج المثبتة على نظام التشغيل Windows باستخدام PHP، يمكنك استخدام واجهة برمجة التطبيقات (API) المقدمة من نظام التشغيل نفسه. يمكن القيام بذلك باستخدام الدالة exec() في PHP لتنفيذ أمر في سطر الأوامر واستدعاء أمر PowerShell للحصول على قائمة البرامج المثبتة.

    فيما يلي الخطوات التفصيلية:

    1. تنفيذ أمر PowerShell: استخدم الدالة exec() لتنفيذ أمر PowerShell في PHP. يمكن استخدام الأمر التالي للحصول على قائمة البرامج المثبتة:
    powershell
    Get-WmiObject -Class Win32_Product | Select-Object Name
    1. تحليل النتائج: بعد تنفيذ الأمر، ستحتاج إلى تحليل النتائج للحصول على قائمة البرامج بتنسيق مفهوم. يمكنك استخدام دوال مثل explode() في PHP لتقسيم النص إلى أجزاء ومعالجتها بالشكل المناسب.

    2. تنظيف النتائج: قد يتطلب التنظيف للنتائج إزالة أية أحرف زائدة أو تنسيقات غير مرغوب فيها.

    وفيما يلي قد يكون مثالًا على كيفية تنفيذ هذه الخطوات في PHP:

    php
    // تنفيذ الأمر PowerShell للحصول على قائمة البرامج المثبتة $command = 'powershell.exe "Get-WmiObject -Class Win32_Product | Select-Object Name"'; $output = exec($command); // تحليل النتائج وتقسيمها إلى أسماء البرامج $programs = explode("\n", $output); // تنظيف النتائج من أية أحرف زائدة foreach ($programs as $key => $program) { $programs[$key] = trim($program); } // عرض قائمة البرامج echo '
      '; foreach ($programs as $program) { echo '
    • ' . $program . '
    • '
      ; } echo '
    '
    ; ?>

    يجب أن تكون هذه الخطوات قادرة على عرض قائمة بجميع البرامج المثبتة على نظام التشغيل Windows باستخدام PHP. يرجى ملاحظة أنه قد تحتاج إلى تحديث إعدادات PHP للسماح بتنفيذ الأوامر في سطر الأوامر، وتأكد من أن النصائح الأمنية مطبقة لمنع استخدام هذا النوع من الأوامر في التطبيقات العامة.

    المزيد من المعلومات

    بالتأكيد، ها هو المقال بشكل مكتمل:


    كيفية عرض قائمة بجميع البرامج المثبتة على Windows باستخدام PHP

    تعتبر عملية عرض قائمة بجميع البرامج المثبتة على نظام التشغيل Windows مهمة مفيدة في العديد من السيناريوهات، سواء كنت تقوم بتطوير تطبيقات الويب أو تحليل بيانات النظام. في هذا المقال، سنتعلم كيفية القيام بذلك باستخدام لغة PHP.

    الخطوة 1: تنفيذ أمر PowerShell

    أول خطوة في هذه العملية هي تنفيذ أمر PowerShell للحصول على قائمة البرامج المثبتة. يمكننا القيام بذلك باستخدام الدالة exec() في PHP، مع تمرير الأمر المناسب. في حالتنا، سنستخدم الأمر التالي:

    powershell
    Get-WmiObject -Class Win32_Product | Select-Object Name

    الخطوة 2: تحليل النتائج

    بعد تنفيذ الأمر، سيتم استرجاع نتائجه كنص. يجب علينا تحليل هذه النتائج لاستخراج قائمة البرامج. يمكن استخدام دوال PHP مثل explode() لتقسيم النص إلى سلسلة من الأسماء.

    الخطوة 3: تنظيف النتائج

    قد يحتوي النص المسترجع على أحرف زائدة أو تنسيقات غير مرغوب فيها. لذا، يتعين علينا تنظيف النتائج باستخدام دوال PHP مثل trim() لإزالة الفراغات الزائدة.

    الخطوة 4: عرض قائمة البرامج

    بعد تحليل وتنظيف النتائج، يمكننا عرض قائمة البرامج المثبتة. يمكن استخدام علامات HTML مثل

      و

    • لعرض القائمة بشكل منظم.

      الشيفرة الكاملة

      ها هو مثال على كيفية تنفيذ هذه الخطوات في PHP:

      php
      // تنفيذ الأمر PowerShell للحصول على قائمة البرامج المثبتة $command = 'powershell.exe "Get-WmiObject -Class Win32_Product | Select-Object Name"'; $output = exec($command); // تحليل النتائج وتقسيمها إلى أسماء البرامج $programs = explode("\n", $output); // تنظيف النتائج من أية أحرف زائدة foreach ($programs as $key => $program) { $programs[$key] = trim($program); } // عرض قائمة البرامج echo '
        '; foreach ($programs as $program) { echo '
      • ' . $program . '
      • '
        ; } echo '
      '
      ; ?>

      الختام

      باستخدام الخطوات المذكورة أعلاه، يمكنك الآن عرض قائمة بجميع البرامج المثبتة على نظام التشغيل Windows باستخدام PHP. يرجى ملاحظة أنه يجب أن يكون لديك أذونات مناسبة وأمان محسن عند تنفيذ هذا النوع من الأوامر في بيئة إنتاجية.

      المراجع

      مع تمنياتي لك بالتوفيق في تطبيق هذه الخطوات في مشاريعك القادمة!

  • نقل الملفات والمجلدات في Amazon S3 باستخدام PHP

    عندما تقوم بنقل جميع الملفات والمجلدات من مجلد إلى آخر في دلو S3 باستخدام PHP، فإن الطريقة الشائعة للقيام بذلك تتضمن خطوات معينة، كما ذكرت:

    1. الحصول على قائمة جميع الكائنات (الملفات والمجلدات) من المجلد المصدر.
    2. نسخ جميع الكائنات إلى المجلد الوجهة.
    3. حذف جميع الكائنات من المجلد المصدر.

    ومع ذلك، هناك طريقة أخرى تسمح بتنفيذ هذه العملية بشكل أقصر، وهي باستخدام وظيفة واحدة تقدمها مكتبة AWS SDK for PHP. يمكنك استخدام وظيفة copyObject مع تمرير معرفات المجلدات المصدر والوجهة، وذلك بدلًا من القيام بالخطوات الثلاثة المذكورة:

    php
    require 'vendor/autoload.php'; // تحميل ملف تعريف الطلبات الخاص بـ AWS use Aws\S3\S3Client; use Aws\Exception\AwsException; // معلومات الاعتماد وإعداد العميل $credentials = new Aws\Credentials\Credentials('your-access-key', 'your-secret-key'); $s3Client = new S3Client([ 'version' => 'latest', 'region' => 'your-region', 'credentials' => $credentials ]); // اسماء المجلدات المصدر والوجهة $sourceFolder = 'source-folder'; $destinationFolder = 'destination-folder'; try { // نسخ كل الكائنات من المجلد المصدر إلى المجلد الوجهة $objects = $s3Client->listObjectsV2([ 'Bucket' => 'your-bucket-name', 'Prefix' => $sourceFolder // ابحث عن الكائنات التي تبدأ بـ $sourceFolder ]); foreach ($objects['Contents'] as $object) { $sourceKey = $object['Key']; $destinationKey = str_replace($sourceFolder, $destinationFolder, $sourceKey); // نسخ الكائن من المجلد المصدر إلى المجلد الوجهة $s3Client->copyObject([ 'Bucket' => 'your-bucket-name', 'CopySource' => 'your-bucket-name/' . $sourceKey, 'Key' => $destinationKey ]); } // حذف جميع الكائنات من المجلد المصدر $s3Client->deleteObjects([ 'Bucket' => 'your-bucket-name', 'Delete' => [ 'Objects' => array_map(function ($object) { return ['Key' => $object['Key']]; }, $objects['Contents']) ] ]); echo "تم نقل جميع الملفات والمجلدات بنجاح."; } catch (AwsException $e) { echo $e->getMessage(); } ?>

    باستخدام هذا الكود، يتم نسخ جميع الكائنات (الملفات والمجلدات) من المجلد المصدر إلى المجلد الوجهة مباشرة، ثم يتم حذف جميع الكائنات من المجلد المصدر، كل ذلك في ثلاثة أسطر فقط من الكود.

    المزيد من المعلومات

    بالتأكيد، إليك استكمال للمقال:

    باستخدام الكود السابق، يمكنك الآن تنفيذ عملية نقل الملفات والمجلدات بسرعة وكفاءة في دلو Amazon S3 باستخدام لغة PHP. يُظهر هذا الكود كيف يمكن استخدام وظيفة copyObject المتوفرة في AWS SDK for PHP لنسخ الكائنات من مجلد إلى آخر، وبعد ذلك يتم حذفها باستخدام وظيفة deleteObjects.

    هذه الطريقة توفر حلاً بديلًا للخطوات الثلاث التي ذكرتها سابقًا، مما يقلل من تعقيد الكود ويجعل عملية النقل أكثر فعالية. بالإضافة إلى ذلك، يمكنك تكييف هذا الكود لتنفيذ أوامر أخرى مثل البحث عن ملفات معينة أو تغيير أذونات الوصول، مما يجعله أداة مرنة وقوية لإدارة محتوى دلو Amazon S3.

    ومن الجدير بالذكر أنه قبل استخدام هذا الكود في بيئة إنتاجية، يجب عليك التأكد من تكوين المتغيرات بشكل صحيح مثل اسم الدلو ومعلومات الاعتماد، كما يجب أن تتحقق من صلاحيات الوصول إلى دلو Amazon S3 المستهدفة.

    بهذا، يمكنك الآن البدء في استخدام هذا الكود لنقل الملفات والمجلدات بسرعة وسهولة بين مجلدين داخل دلو Amazon S3 باستخدام لغة PHP.

  • PHP Equivalent for JavaScript Array.some()

    في PHP، يمكننا تحقيق نفس الوظيفة المتمثلة في دالة array_some() في جافا سكريبت باستخدام بعض التقنيات المتاحة. على الرغم من عدم وجود دالة مدمجة تسمح بذلك بشكل مباشر مثل دالة Array.prototype.some() في جافا سكريبت، إلا أنه يمكننا كتابة وظيفة مخصصة لتحقيق نفس الغرض.

    فيما يلي مثال يوضح كيفية تحقيق وظيفة مماثلة في PHP:

    php
    function array_some($array, $callback) { foreach ($array as $key => $value) { if ($callback($value, $key, $array)) { return true; } } return false; } function isBiggerThan10($element) { return $element > 10; } $array1 = [2, 5, 8, 1, 4]; $array2 = [12, 5, 8, 1, 4]; $result1 = array_some($array1, 'isBiggerThan10'); $result2 = array_some($array2, 'isBiggerThan10'); echo $result1 ? 'true' : 'false'; // false echo $result2 ? 'true' : 'false'; // true

    تُعرف الدالة array_some() الخاصة بنا بأخذ مصفوفة ودالة استعلام كمدخلات. تقوم هذه الدالة بتطبيق الدالة المعطاة ($callback) على كل عنصر في المصفوفة. إذا كانت الدالة المعطاة تعيد قيمة true على الأقل لأحد العناصر، فإن الدالة array_some() تعيد true، وإلا فإنها تعيد false.

    الدالة isBiggerThan10() هي الدالة المرشحة التي نقوم بتمريرها إلى array_some() للتحقق مما إذا كان أحد العناصر في المصفوفة أكبر من 10 أم لا.

    المزيد من المعلومات

    بالطبع، دعنا نعمق في التفاصيل قليلاً.

    في الكود المُعرَّف، يتم استخدام دالة array_some() لتحقق مما إذا كان أي عنصر في المصفوفة يستوفي شرطًا معينًا، الذي يتم تمريره كوظيفة اختبار باستخدام استدعاء isBiggerThan10().

    بدايةً، يتم تعريف دالة array_some()، التي تأخذ المصفوفة المراد فحصها ودالة استدعاء لتطبيقها على كل عنصر في المصفوفة. يتم استخدام حلقة foreach للانتقال عبر كل عنصر في المصفوفة. في كل تكرار، يتم استدعاء الدالة المرشحة ($callback) وتمرير القيمة الحالية للعنصر بالإضافة إلى مفتاحه والمصفوفة نفسها إذا كان ذلك ضروريًا. إذا أعادت الدالة المرشحة true على الأقل مرة واحدة، يتم إرجاع قيمة true من الدالة array_some() على الفور، مما يعني أن هناك عنصرًا واحدًا على الأقل يمر بالشرط المحدد. إذا لم يعود أي من الاستدعاءات true، فإن الدالة تعود بقيمة false.

    تم تعريف دالة isBiggerThan10() لتكون الدالة المرشحة. تأخذ هذه الدالة عنصرًا كمدخل وتقارنه بالقيمة 10، وتعود بالقيمة true إذا كان العنصر أكبر من 10، و false إذا كان أقل من أو يساوي 10.

    بعد ذلك، تم تعريف مصفوفتين $array1 و$array2، وتم استخدام دالة array_some() مع الدالة المرشحة isBiggerThan10() للتحقق من كل مصفوفة بشكل منفصل. ثم تم طباعة النتائج التي تشير إما إلى وجود عنصر يستوفي الشرط أو عدم وجوده.

    يُظهر هذا المثال كيف يمكن تحقيق وظيفة مشابهة لدالة Array.prototype.some() في جافا سكريبت في PHP باستخدام الوظائف المتاحة في اللغة، وكيف يمكن للمطورين تطبيق الأساليب المتاحة بديلًا عن الوظائف المدمجة عندما لا تكون متاحة مباشرة.

  • حل مشكلة الأقواس الزائدة في بيانات JSON

    المشكلة الرئيسية في الكود المُقدم هي أنه ينتج عنه تشكيلات زائدة من الأقواس المُجعّدة في بيانات JSON المُخرجة. عند فحص الكود، يظهر أن المشكلة تنشأ من استخدام دوال PHP بطريقة غير صحيحة مع بناء بيانات النتائج.

    أولاً وقبل كل شيء، يبدو أنك تستخدم ملف config.php، والذي قد يحتوي على اتصال بقاعدة بيانات MySQL. يُفضل استخدام اتصال مع PDO أو MySQLi بدلاً من توسيع دالة mysql_* التي تعتبر مهجورة وغير موصى بها.

    ثانيًا، في الجزء الداخلي من الحلقة for، يبدو أنك تقوم بحساب مجموع crime_mudered لكل عام من السنوات المحددة. لكن المشكلة تكمن في كيفية بناء البيانات. يجب أن يكون لديك مصفوفة داخلية تحتوي على البيانات لكل سنة، وبعد ذلك يتم إضافة هذه المصفوفة الداخلية إلى مصفوفة خارجية.

    بالنظر إلى الكود الخاص بك، يتم تقديم البيانات بطريقة غير صحيحة. يتم إنشاء مصفوفة $data1 كمتغير محلي داخل الحلقة for، لذا سيتم إعادة تعيينها في كل تكرار. بدلاً من ذلك، يجب أن يتم إنشاء المصفوفة $data1 خارج الحلقة، ويتم إضافة المصفوفة $data3 إليها بعد الانتهاء من الحلقة.

    إليك نسخة معدلة من الكود:

    php
    header('Content-Type: application/json'); include('config.php'); $data1 = array(); // تحريك المصفوفة خارج الحلقة for($i = 1990; $i <= 2016; $i++) { $sum = 0; $data3 = array(); // إعادة تهيئة المصفوفة في كل تكرار للحلقة $result = mysql_query("SELECT * FROM crimedetails WHERE crime_year = $i"); while($row = mysql_fetch_array($result)) { $sum += $row['crime_mudered']; } $data['crime_mudered'] = $sum; $data['crime_year'] = $i; $data3[] = $data; $data1[] = $data3; // إضافة المصفوفة الداخلية إلى المصفوفة الخارجية } print json_encode($data1); ?>

    بهذا التعديل، يجب أن يتم توليد بيانات JSON بالشكل الصحيح دون وجود تشكيلات زائدة من الأقواس المُجعّدة.

    المزيد من المعلومات

    بالطبع، هذا التعديل يحل مشكلة الأقواس المُجعّدة الزائدة في بيانات JSON الناتجة. ومع ذلك، هناك بعض النقاط الإضافية التي يجب النظر فيها لتحسين الكود وتجنب المشاكل المحتملة في المستقبل.

    أولاً، من الأفضل استخدام استعلامات معدلة لتحسين أداء استرجاع البيانات من قاعدة البيانات. يمكن استخدام استعلام واحد لاسترجاع المجموع المطلوب مباشرةً بدلاً من استرجاع جميع البيانات ثم حساب المجموع في PHP. على سبيل المثال:

    php
    SELECT crime_year, SUM(crime_mudered) AS total_murders FROM crimedetails GROUP BY crime_year;

    هذا الاستعلام سيُعيد مجموع جرائم القتل لكل عام بشكل فعّال.

    ثانياً، كما ذكرت سابقاً، استخدم دوال mysqli أو PDO بدلاً من الدوال المهجورة mysql_* لتفادي مشاكل الأمان وتحسين الأداء.

    وثالثاً، من الجيد أيضًا التأكد من وجود معالجة لأي أخطاء محتملة خلال استرجاع البيانات من قاعدة البيانات، مثل فشل الاستعلام أو عدم وجود نتائج.

    وأخيرًا، يُنصح دائمًا بتوثيق الكود بشكل جيد، مما يشمل توضيح الغرض من كل قطعة من الكود وتفسير الخطوات المنطقية المتبعة.

    بتطبيق هذه التحسينات والإصلاحات، يمكن تحسين أداء وجودة الكود وضمان حصولك على نتائج دقيقة وموثوقة عند توليد بيانات JSON من قاعدة البيانات.

  • تحويل وظيفة PHP إلى Node.js

    التحويل من وظيفة PHP إلى وظيفة مماثلة في Node.js يتطلب فهماً لكل من لغة PHP ولغة JavaScript بالإضافة إلى مكتبات التشفير المتوفرة في كل منهما. في الحالة الحالية، الوظيفة المعطاة تقوم بتشفير بيانات باستخدام خوارزمية TripleDES. لنقم بتحويل هذه الوظيفة إلى Node.js.

    قبل البدء في البرمجة، يجب علينا التأكد من توفر مكتبة تشفير متوافقة في Node.js. في هذا المثال، سنستخدم مكتبة crypto المدمجة في Node.js لتنفيذ الخوارزمية المطلوبة.

    إليك الوظيفة المحولة إلى Node.js:

    javascript
    const crypto = require('crypto'); function Encrypt(input, key_seed) { input = input.trim(); const block = 8; // TripleDES block size is 8 bytes const len = Buffer.byteLength(input); const padding = block - (len % block); input += String.fromCharCode(padding).repeat(padding); // Generate a 24 byte key from the md5 of the seed const key = crypto.createHash('md5').update(key_seed).digest().slice(0, 24); // Encrypt const cipher = crypto.createCipheriv('des-ede3', key, Buffer.alloc(0)); let encrypted_data = cipher.update(input, 'utf8', 'base64'); encrypted_data += cipher.final('base64'); return encrypted_data; } // Example usage const input = "Your input data"; const key_seed = "Your key seed"; const encrypted_data = Encrypt(input, key_seed); console.log(encrypted_data);

    تم تعديل الوظيفة لتتوافق مع بيئة Node.js. تم استبدال استخدام مكتبة mcrypt بمكتبة crypto المدمجة في Node.js لتنفيذ عملية التشفير باستخدام TripleDES. كما تم تحديد حجم الكتلة (block size) مباشرة كقيمة ثابتة لأن حجم الكتلة في TripleDES هو 8 بايت.

    عملية البدء في التشفير تمت بواسطة crypto.createCipheriv() مع استخدام “des-ede3” كخوارزمية. يتم إرجاع النص المشفر كنص Base64 مشفر. يمكنك استدعاء الوظيفة بتمرير البيانات المطلوبة والبذرة (seed) كما هو موضح في المثال.

    المزيد من المعلومات

    بالتأكيد، سنكمل المقال الذي يشرح كيفية تحويل الوظيفة من PHP إلى Node.js بشكل أكثر تفصيلًا وشمولًا.

    الخطوة الأولى في تحويل الوظيفة هي فهم كيفية عمل الوظيفة الأصلية في PHP. الوظيفة تقوم بتشفير البيانات باستخدام TripleDES، وتقوم بإضافة حشوة (padding) لضمان توافق حجم البيانات مع حجم الكتلة. ثم، تقوم بتوليد مفتاح تشفير من معطى (seed)، وتشفير البيانات باستخدام هذا المفتاح، وأخيرًا تقوم بإعادة النص المشفر كنص Base64.

    بعد فهم كيفية عمل الوظيفة الأصلية، نقوم بتحويلها إلى Node.js. في Node.js، نستخدم مكتبة crypto المدمجة لتنفيذ العمليات التشفيرية.

    1. تجهيز البيانات:
      في الوظيفة الأصلية، يتم إزالة الفراغات الزائدة من بداية ونهاية البيانات باستخدام trim() ومن ثم يتم إضافة حشوة (padding) لتوافق حجم الكتلة المطلوب. في النسخة المحولة، نستخدم String.fromCharCode(padding).repeat(padding) لإنشاء الحشوة بشكل متوافق مع تقنية TripleDES.

    2. توليد المفتاح:
      في الوظيفة الأصلية، يتم توليد المفتاح باستخدام MD5 من المعطى (seed) ومن ثم يتم استخدام القسم الأول من الناتج كمفتاح. في النسخة المحولة، نستخدم crypto.createHash('md5').update(key_seed).digest().slice(0, 24) لتوليد المفتاح بنفس الطريقة.

    3. عملية التشفير:
      في الوظيفة الأصلية، تستخدم mcrypt لتنفيذ عملية التشفير. في النسخة المحولة، نستخدم crypto.createCipheriv() مع استخدام “des-ede3” كخوارزمية لتنفيذ التشفير. يتم استخدام cipher.update() و cipher.final() للحصول على النص المشفر.

    4. إرجاع النتيجة:
      في الوظيفة الأصلية، يتم إرجاع النص المشفر كنص Base64. في النسخة المحولة، يتم إرجاع النص المشفر بشكل مماثل.

    بعد كتابة وتحويل الوظيفة، يمكنك اختبارها باستخدام مجموعة متنوعة من البيانات للتأكد من أنها تعمل كما هو متوقع. من المهم أيضًا التأكد من تأمين وحماية المفتاح والبيانات المشفرة بشكل صحيح في تطبيقك.

    باستخدام هذه الخطوات، يمكنك بسهولة تحويل وظائف PHP إلى Node.js والاستفادة من مزايا كل منصة في تطوير تطبيقاتك.

  • مشاكل رفع النص وإدراجه في قاعدة البيانات

    مشكلات في رفع النص،

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

    1. “تنويه: متغير غير معرف: sExt في” ..
      حاولت حل المشكلة ببيان if فارغ، ولكن دون نجاح..

    2. السكريبت يقوم بإدخال أرقام (1،2،3…) في Mysql إذا كان حقل الرفع فارغًا….
      حاولت حل المشكلة بالكود أدناه، ولكن أيضًا بدون نجاح..

    “إذا ($_FILES [‘files’] [‘name’]! = “”)”…

    هل لديك أي نصيحة؟

    شكراً لك..

    كودي:

    $tmp_name) {
    $errors = array();
    $file_name = md5(uniqid(“”) . time());
    $file_size = $_FILES[‘files’][‘size’][$key];
    $file_tmp = $_FILES[‘files’][‘tmp_name’][$key];
    $file_type = $_FILES[‘files’][‘type’][$key];

    if($file_type == “image/gif”){
    $sExt = “.gif”;
    } elseif($file_type == “image/jpeg” || $file_type == “image/pjpeg”){
    $sExt = “.jpg”;
    } elseif($file_type == “image/png” || $file_type == “image/x-png”){
    $sExt = “.png”;
    }
    if (!in_array($sExt, array(‘.gif’,’.jpg’,’.png’))) {
    $errors[] = “أنواع الصور المسموح بها هي (.gif، .jpg، .png) فقط!”;
    }

    if ($file_size > 2097152000) {
    $errors[] = ‘يجب أن يكون حجم الملف أقل من 2 ميغابايت’;
    }

    $query = “INSERT into user_pics (`person_id`,`pic_name`,`pic_type`) VALUES(‘1′,’$file_name’,’$sExt’)”;
    $result = mysqli_query($link,$query);

    $desired_dir = “user_data/”;
    if (empty($errors)) {
    if (is_dir($desired_dir) == false) {
    mkdir(“$desired_dir”, 0700);
    }
    if (move_uploaded_file($file_tmp, “$desired_dir/” . $file_name . $sExt)) {
    $uploadedFiles[$key] = array($file_name . $sExt, 1);
    } else {
    echo “تم رفع الملفات!” . $_FILES[‘files’][‘name’][$key];
    $uploadedFiles[$key] = array($_FILES[‘files’][‘name’][$key], 0);
    }
    } else {
    print_r($errors);
    }
    }

    foreach ($uploadedFiles as $key => $row) {
    if (!empty($row[1])) {
    $codestr = ‘$file’ . ($key+1) . ‘ = $row[0];’;
    eval ($codestr);
    } else {
    $codestr = ‘$file’ . ($key+1) . ‘ = NULL;’;
    eval ($codestr);
    }
    }

    }



    المزيد من المعلومات

    بالطبع، إليك استكمالٌ للمقال:

    بدلاً من التركيز فقط على التعديلات المطلوبة في الكود، دعنا نفحص كلاً من الأخطاء بعمق ونعرض الحلول المناسبة:

    1. “تنبيه: متغير غير معرف: sExt في” ..

    هذا الخطأ يحدث لأن المتغير $sExt قد لا يتم تعريفه في بعض الحالات. على سبيل المثال، إذا كان نوع الملف غير صورة (مثل ملف نصي أو ملف PDF)، فإن $sExt لن يتم تعيينه إلى أي قيمة. لحل هذا الخطأ، يمكنك تعريف $sExt بقيمة افتراضية في بداية الكود.

    php
    $sExt = ""; // تعريف $sExt بقيمة افتراضية

    2. السكريبت يقوم بإدخال أرقام (1،2،3…) في Mysql إذا كان حقل الرفع فارغًا….

    هذه المشكلة تنشأ من استخدام شرط if ($_FILES['files']['name']!="") للتحقق مما إذا كانت هناك ملفات تم رفعها أم لا. ومع ذلك، لا يتم التحقق من كل ملف بشكل منفصل. بدلاً من ذلك، يجب عليك التحقق من احتواء كل ملف على اسم قبل إدراج التفاصيل في قاعدة البيانات.

    php
    foreach ($_FILES['files']['tmp_name'] as $key => $tmp_name) { if ($_FILES['files']['name'][$key] != "") { // قم بإدراج التفاصيل في قاعدة البيانات هنا } }

    بعد تطبيق هذه الإصلاحات، ينبغي أن يعمل السكريبت بشكل صحيح دون وجود الأخطاء المذكورة. يمكنك أيضًا إضافة مزيد من التحققات والإجراءات الأمنية حسب الحاجة، مثل فحص نوع الملف وحجمه بشكل أكبر.

  • إنشاء مصفوفة ديناميكية في PHP من $_POST

    في لغة PHP، يُمكنك إنشاء مصفوفة ديناميكية مرتبطة (Associative Array) باستخدام القيم التي تأتي من متغير $_POST. للقيام بذلك، يمكنك استخدام حلقة التكرار (loop) لتحقق من القيم وتكوين المصفوفة النهائية بشكل ديناميكي. هناك عدة طرق لتحقيق هذا الأمر، وأحد الطرق الشائعة هي استخدام حلقة foreach لتحليل المتغير $_POST وإنشاء المصفوفة النهائية. دعنا نلقي نظرة على كيفية تنفيذ هذا:

    php
    // إنشاء مصفوفة فارغة لاستيعاب القيم غير الفارغة $my_array = array(); // تحقق من وجود القيم في $_POST وإضافتها إلى المصفوفة foreach ($_POST as $key => $value) { // التحقق مما إذا كانت القيمة غير فارغة أو مختلفة عن القيم الفارغة المحتملة if (!empty($value) && $value !== NULL) { // إضافة الزوج الرئيسي والقيمة إلى المصفوفة النهائية $my_array[$key] = $value; } } // الآن، $my_array يحتوي على القيم الغير فارغة من $_POST ?>

    في هذا الكود، نبدأ بإنشاء مصفوفة فارغة تُسمى $my_array. ثم، نستخدم حلقة foreach للتحقق من كل القيم الموجودة في متغير $_POST. داخل الحلقة، نقوم بفحص كل قيمة للتأكد مما إذا كانت غير فارغة أو مختلفة عن القيم الفارغة المحتملة. إذا كانت القيمة غير فارغة، نضيف الزوج الرئيسي والقيمة المقابلة إلى المصفوفة $my_array باستخدام مفتاح العنصر الحالي. في النهاية، ستحتوي $my_array على القيم الغير فارغة من $_POST.

    يمكنك استخدام هذا الكود لإنشاء مصفوفة ديناميكية مرتبطة في PHP تحتوي فقط على القيم غير الفارغة التي تم الحصول عليها من $_POST، بحيث يمكنك التعامل مع البيانات بشكل أنيق وفعال.

    المزيد من المعلومات

    بالطبع، دعنا نواصل تطوير المقال لإضافة المزيد من التفاصيل والشروحات:


    عند العمل مع البيانات المُرسلة إلى صفحات الويب، يكون من الشائع استخدام متغير $_POST في لغة PHP للاحتفاظ بالقيم التي تم إرسالها عبر الطلب POST. ومن المهم أحيانًا فقط الاهتمام بالقيم غير الفارغة لتجنب معالجة القيم الفارغة أو الغير مهمة.

    في المثال السابق، قمنا بتوضيح كيفية إنشاء مصفوفة ديناميكية مرتبطة في PHP باستخدام القيم المُرسلة من $_POST، وذلك باستخدام حلقة foreach لتحليل القيم وإنشاء المصفوفة النهائية. لكن دعونا نقوم الآن بتوسيع هذا المفهوم لتضمين التعامل مع القيم الفارغة أو المفقودة.

    تفادي القيم الفارغة يمكن أن يحسن من أداء تطبيقك ويساعد على ضمان أمان البيانات، ولذلك يمكننا تعديل الكود السابق ليتجاهل القيم الفارغة أو المفقودة وينشئ المصفوفة النهائية فقط بالقيم غير الفارغة. هذا يسمح لنا بالتعامل مع البيانات بشكل أكثر دقة واستبعاد القيم غير الضرورية.

    لتحقيق ذلك، يمكن تحسين الكود السابق بإضافة شرط إضافي داخل حلقة foreach لفحص القيم قبل إضافتها إلى المصفوفة النهائية. إليك الكود المعدل:

    php
    // إنشاء مصفوفة فارغة لاستيعاب القيم غير الفارغة $my_array = array(); // تحقق من وجود القيم في $_POST وإضافتها إلى المصفوفة foreach ($_POST as $key => $value) { // التحقق مما إذا كانت القيمة غير فارغة أو مختلفة عن القيم الفارغة المحتملة if (!empty($value) && $value !== NULL) { // إضافة الزوج الرئيسي والقيمة إلى المصفوفة النهائية $my_array[$key] = $value; } } // الآن، $my_array يحتوي على القيم الغير فارغة من $_POST ?>

    بهذا التعديل، يتم فقط إضافة القيم غير الفارغة أو المفقودة إلى المصفوفة $my_array، مما يسمح بتجنب التعامل مع البيانات الغير ضرورية.

    من المهم أن نذكر أنه يجب أن يتم التعامل بحذر مع البيانات المُرسلة من العميل، وذلك لتجنب الهجمات الأمنية مثل هجمات الحقن (Injection Attacks). يُنصح دائمًا بتنظيف وفحص البيانات المُرسلة قبل استخدامها في تطبيقك، وذلك باستخدام تقنيات مثل تهيئة البيانات (Data Sanitization) والتحقق من صحة البيانات (Data Validation).

    بهذا، يمكنك الآن إنشاء مصفوفة ديناميكية مرتبطة في PHP باستخدام القيم المُرسلة من $_POST، مع تجنب القيم الفارغة أو المفقودة لتحسين أداء تطبيقك وضمان أمان البيانات.

  • ترتيب عشوائي متماثل في PHP و MySQL

    عندما يتعلق الأمر بترتيب البيانات بطريقة عشوائية ولكن متماثلة في كل مرة في تطبيقات PHP و MySQL، يمكن تحقيق ذلك باستخدام مجموعة متنوعة من الطرق. سنستكشف بعض الخيارات الممكنة لتحقيق هذا الهدف.

    الخيار الأول هو إضافة عمود جديد إلى جدول قاعدة البيانات يتضمن أرقامًا عشوائية حقيقية تُولد عند إدخال البيانات. بمجرد أن يكون لدينا هذا العمود، يمكننا استخدامه لترتيب البيانات بطريقة عشوائية وثابتة في كل مرة.

    الخيار الثاني يتعلق بكتابة استعلام معقد في MySQL يستخدم وظائف الرياضيات والترتيب لتوليد ترتيب عشوائي للصفوف. على الرغم من أن هذا الخيار قد يكون أكثر تعقيدًا، إلا أنه يتيح لنا تحقيق الغرض المطلوب دون الحاجة إلى تغيير بنية الجدول.

    الخيار الثالث يتضمن استخدام اللغة البرمجية PHP لتنفيذ عملية الفرز العشوائي عند استرجاع البيانات من قاعدة البيانات. يمكن استخدام الدوال الرياضية في PHP لتوليد ترتيب عشوائي للصفوف.

    بغض النظر عن الخيار الذي تم اختياره، يجب التأكد من أن النتيجة العشوائية ستظل ثابتة بين عمليات الاستعلام المتعددة، حيث سيكون هذا الأمر مهمًا بشكل خاص في حالة استخدام النتائج في تطبيقات حيوية مثل عرض المنتجات على موقع الويب.

    للمزيد من التفاصيل والتوجيهات الفعّالة لتحقيق هذا الهدف، يمكن أن نستكشف كل خيار بشكل أعمق ونحدد الأفضل بناءً على متطلبات التطبيق المحددة والأداء المتوقع.

    المزيد من المعلومات

    بعد استعراض الخيارات الممكنة لتحقيق ترتيب عشوائي متماثل في التطبيقات التي تستخدم PHP و MySQL، يجب أن نقوم بتحليل كل خيار بشكل أعمق لنفهم الأساليب المتاحة والعوامل التي قد تؤثر على اختيار الحل المثلى.

    الخيار الأول، وهو إضافة عمود جديد إلى جدول قاعدة البيانات، يتيح لنا إمكانية إضافة أرقام عشوائية حقيقية لكل صف أثناء عملية الإدخال. ومن ثم، يمكن استخدام هذا العمود في استعلامات SELECT لترتيب البيانات بطريقة عشوائية. هذا الخيار يتطلب تعديلًا في بنية قاعدة البيانات وتحديثات في التطبيق لضمان توليد الأرقام العشوائية بشكل صحيح.

    أما الخيار الثاني، الذي يتضمن كتابة استعلام معقد في MySQL لتوليد ترتيب عشوائي، فيتيح لنا القدرة على القيام بالترتيب المطلوب دون تعديل بنية قاعدة البيانات. ومع ذلك، فإن هذا الخيار قد يكون أكثر تعقيدًا ويمكن أن يؤدي إلى تأثير سلبي على أداء الاستعلامات في حالة الجداول الكبيرة.

    أما الخيار الثالث، والذي يتضمن استخدام PHP لتنفيذ عملية الفرز العشوائي، فيتيح لنا مرونة أكبر في تحديد ترتيب البيانات. يمكن للمطورين استخدام دوال الرياضيات في PHP لتوليد أرقام عشوائية ومن ثم استخدامها لفرز البيانات. ومع ذلك، يجب الانتباه إلى أنه في حالة استخدام هذا الخيار، سيتم تحميل جميع البيانات من قاعدة البيانات إلى الذاكرة قبل تطبيق الفرز، مما قد يؤدي إلى استهلاك موارد النظام.

    بعد التفكير في الخيارات المتاحة وتقييم متطلبات التطبيق، يمكن اتخاذ القرار المناسب حول الطريقة التي تلبي احتياجات التطبيق بأفضل شكل ممكن، مع مراعاة الأداء والصيانة وسهولة التطبيق والتوسع في المستقبل.

  • تصحيح أخطاء PHP في استعلام قاعدة البيانات

    يبدو أن الكود الذي قدمته يعاني من عدة أخطاء شائعة في لغة PHP، لذا دعني أساعدك في تصحيحها.

    أولًا، لديك خطأ في كتابة الدالة التي تقوم بتحديد قاعدة البيانات، حيث كتبت “msql_select_db” بينما يجب أن تكون “mysql_select_db”.

    ثانيًا، في السطر الذي يتضمن الاستعلام SQL، استخدمت “msql_query” وهو خاطئ أيضًا، يجب أن تكون “mysql_query”.

    ثالثًا، لديك خطأ في ترتيب الأقواس في الشرطية التي تحيط بالسطر الذي يحتوي على الجملة “else”، يجب أن يكون السطر الذي يحتوي على الشرطية الأولى بالقرب من الشرطية الثانية.

    رابعًا، في حلقة الـ “while” يجب أن تستخدم “mysql_fetch_assoc” بدلاً من “mysql_fetch_array” لأنها ترجع البيانات في صورة أكثر تنظيماً.

    خامسًا، في الجملة التي تحتوي على “echo”، لا يجب أن تستخدم علامة “=” بعد “echo”.

    إليك الكود المصحح:

    php
    include 'connect.php'; mysql_select_db("u972015033_jobss") or die("Could not find DB"); if(isset($_POST['search'])){ $searchq = $_POST['search']; $query = mysql_query("SELECT * FROM job_search WHERE job_name LIKE '%$searchq%'") or die("Could not find"); $count = mysql_num_rows($query); if($count == 0){ $output = 'There was no results found'; } else { while($row = mysql_fetch_assoc($query)){ $jobname = $row['job_name']; $jobdesc = $row['job_desc']; $jobcomp = $row['job_company']; $output .= '
    '.$jobname.' '.$jobdesc.' '.$jobcomp.'
    '
    ; } echo $output; } }

    تأكد من أن ملف الاتصال بقاعدة البيانات “connect.php” يحتوي على كود الاتصال الصحيح. بعد ذلك، قم بتضمين هذا الكود في صفحة HTML التي تحوي النموذج الذي يقوم بإرسال البحث إلى هذا الكود.

    أتمنى أن يساعدك هذا الإصلاح في تشغيل الكود بنجاح وعرض النتائج بشكل صحيح.

    المزيد من المعلومات

    بالطبع، إليك المقال المكتمل:


    عندما يتعلق الأمر ببرمجة تطبيقات الويب باستخدام لغة PHP، قد تواجه بعض التحديات والأخطاء الشائعة. واحدة من هذه الأخطاء هي الخطأ الذي يظهر عند استخدام دالة “T_print”، وهو خطأ يشير إلى مشكلة في الكود يصعب تحديدها.

    في الكود الذي تقدمت به، واجهت هذا النوع من الخطأ. لكن لحسن الحظ، يمكن تصحيح هذه المشكلة بسهولة باستخدام الخطوات الصحيحة.

    أولاً وقبل كل شيء، عليك أن تتحقق من الكود الخاص باتصال قاعدة البيانات. تأكد من أنه يعمل بشكل صحيح ويتصل بقاعدة البيانات المطلوبة. ثم، تحقق من الكود الذي يقوم بتنفيذ الاستعلام SQL لجلب البيانات من قاعدة البيانات.

    تحقق من أن جميع الدوال المستخدمة صحيحة، وأنك قمت بتصحيح الأخطاء الشائعة مثل استخدام “mysql_query” بدلاً من “msql_query” و “mysql_fetch_assoc” بدلاً من “mysql_fetch_array”.

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

    إليك الكود المصحح:

    php
    include 'connect.php'; mysql_select_db("u972015033_jobss") or die("Could not find DB"); if(isset($_POST['search'])){ $searchq = $_POST['search']; $query = mysql_query("SELECT * FROM job_search WHERE job_name LIKE '%$searchq%'") or die("Could not find"); $count = mysql_num_rows($query); if($count == 0){ $output = 'There was no results found'; } else { while($row = mysql_fetch_assoc($query)){ $jobname = $row['job_name']; $jobdesc = $row['job_desc']; $jobcomp = $row['job_company']; $output .= '
    '.$jobname.' '.$jobdesc.' '.$jobcomp.'
    '
    ; } echo $output; } }

    باستخدام الكود المصحح أعلاه، يجب أن تتمكن الآن من تنفيذ الاستعلام بنجاح وعرض النتائج بشكل صحيح. ولا تتردد في التحقق من الاتصال بقاعدة البيانات وصحة الاستعلام لضمان عمل الكود بشكل سلس.

    إذا واجهت أي مشكلة أو استفسار، فلا تتردد في طرحه هنا أو البحث عن المزيد من الموارد عبر الإنترنت لمزيد من المساعدة في تطوير تطبيقاتك بلغة PHP.

زر الذهاب إلى الأعلى
إغلاق

أنت تستخدم إضافة Adblock

يرجى تعطيل مانع الإعلانات حيث أن موقعنا غير مزعج ولا بأس من عرض الأعلانات لك فهي تعتبر كمصدر دخل لنا و دعم مقدم منك لنا لنستمر في تقديم المحتوى المناسب و المفيد لك فلا تبخل بدعمنا عزيزي الزائر