محمد المري2
الأعضاء-
المساهمات
68 -
تاريخ الانضمام
-
تاريخ آخر زيارة
-
عدد الأيام التي تصدر بها
6
نوع المحتوى
ريادة الأعمال
البرمجة
التصميم
DevOps
التسويق والمبيعات
العمل الحر
البرامج والتطبيقات
آخر التحديثات
قصص نجاح
أسئلة وأجوبة
كتب
دورات
كل منشورات العضو محمد المري2
-
السؤال غير واضح , هل تقصد بأنك تريد عرض الساعة حسب التوقيت الموجود في جدول معين ؟ (اي ان الجدول يحتوي على عمود يحتفظ بالتاريخ والوقت ) .. أو انك تقصد بأنك تريد عرض الساعة حسب الوقت الذي يقوم باحتسابه الـ SQL Server ? اذا كان حسب الوقت الذي يقوم بإحتسابه الـ SQL Server فهو يعتمد على توقيت النظام نفسه, كما هو الحال مع الـ C# فلو اخذنا على سبيل المثال في الـ C# : DateTime time = DateTime.Now; وفي الـ SQL Server : SELECT GETDATE() جميعها ستكون متساوية بالتواقيت. لمعرفة ذلك يمكنك عمل تجربة صغيرة بداخل برنامج الـ C# : string sql; string cSharpTime = DateTime.Now.ToString(); using (SqlConnection connection = new SqlConnection(db)) { using (SqlCommand cmd = new SqlCommand("SELECT GETDATE()", connection)) { connection.Open(); sql = cmd.ExecuteScalar().ToString(); } } Console.WriteLine("C# : " + cSharpTime); Console.WriteLine("SQL : " + sql);
-
اتقان لغة الجافا لوحدها كافيه بأن تمكنك من إنشاء تطبيقات بالاندرويد واي برامج او تطبيقات اخرى يمكن عملها بالجافا (مثلاً برامج لانظمة اخرى). ولكن في الاندرويد , قد تحتاج الى معرفة الـ XML وبعض اللغات الاخرى (مثل JavaScript و HTML و CSS) التي ستمكنك من وضع لمسات اضافية خاصة لكل تطبيق. والاهم معرفة المكتبات الخاصة بالاندرويد وكيفية استعمالها .. لانك ستحتاج الى مثل تلك المهارات في بعض تطبيقات الاندرويد . اما عن تعلمها, فالجواب عليه يعتمد على سرعة الإستيعاب والفهم . فحتى لو خصصت نصف يوم بشكل يومي , لايهم, المهم مقدار المعرفة واالمهارات التي اكتستبها خلال فترة تعلمك .. فمن الممكن ان تتعلم وتقن مهارات بالجافا خلال شهر , بينما اخرين قد يتقنونها باكثر من ثلاثة اشهر !
- 3 اجابة
-
- 2
-
هنالك برامج تعمل تشفير للمصدر , بعضها قد تحتاج الى تثبيت تطبيقهم الخاص على السيرفر حتى يعمل التشفير. من اشهر تلك البرامج : Zend Guard IonCub SourceGuardian phpSHIELD
- 1 جواب
-
- 1
-
اذا كنت محتفظ بأي معلومات تسجيل دخول داخل البرنامج, فيجب عليك التخلص منها وإتخاذ طريقة اخرى لعملها. لان هذا يعتبر خطأ برمجي حاد, فأي شخص يستطيع الوصول لها بكل سهولة. لذلك مايتوجب عليك عمله هو اولاً ضبط طريقة الاتصال بالـ SQL Server وذلك عن طريق التعديل على ConnectionString للإتصال وجعله يعتمد على حساب المستخدم المسجل بالنظام Windows Account Login .. والـ ConnectionString سيكون شبيه بالتالي : connectionString="Data Source=ServerName;Initial Catalog=DatabaseName;Integrated Security=True" فقط تقوم بتغيير الـ ServerName و DatabaseName .. وسيكون الاتصال بقواعد البيانات مبني على تصاريح حساب المستخدم الذي يستخدمه على النظام نفسه Windows .. ومن الممكن ان يتم عمل متغيرات لها حتى يتمكن المستخدم من تغيير اسم ServerName و DatabaseName اذا كان سير عمل البرنامج يسمح بذلك. اما عن معلومات تسجيل الدخول الاخرى او اي معلومات قد تكون حساسة , يجب عليك تشفيرها وعدم حفظها بدون تشفير, وجعل البرنامج يقرأها بالتشفير. واذا كنت لاتعرف كيف ذلك, انصحك بالبحث والقراءة ثم تطبيقها على مشروع جديد (تجريبي) وعندما تكون جاهزة , يمكن تطبيقها على البرنامج وعمل التغييرات اللازمة لها. يمكن ايضاً حفظها بملف اعدادات البرنامج Settings وذلك عن طريق الضغط على اسم المشروع الزر الايمن ثم اختيار Properties ثم الذهاب الى Settings .. اذا لم يكن هنالك ملف اعدادات قم بإنشاءه (في Visual Studio سيكون هنالك رسالة لذلك عند فتح نافذة Settings فقط اضغط عليها وسيتم انشائها تلقائياً). فائدة ملف الاعدادات هذا هو حفظ اي بيانات تمكن البرنامج من قرائتها باستمرار بما فيها معلومات الـ ConnectionString مثل DatabaseName و ServerName .. ويمكن ايضاً حفظ معلومات الدخول فيها ولكن كما ذكرت ليست الحل الامثل لها ولكنها ستعمل خارج نطاق البرنامج. ويمكن ايضاً وضع متغيرات بداخلها يقوم البرنامج بقرائتها او الحفظ فوقها في كل مره يعمل (مثل عدد مرات تشغيل البرنامج) .. اما بداخل البرنامج فيتم استدعائها عن طريق : String someString = Properties.Settings.Default.MySavedSettingString; اما اذا كنت قد استخدمت خصائص DataSet و Data Models وقمت بإستيراد schema من الـ VisualStudio فالـ ConnectionString سيكون استدعائه مشابه للمثال الآتي : String db = ConfigurationManager.ConnectionStrings["ProjectName.Properties.Settings.db"].ConnectionString; اتمنى ان تكون الامور اوضح الآن
- 3 اجابة
-
- 2
-
فقط قم بالذهاب الى قائمة Build ثم اختار Publish وحدد مكان حفظ البرنامج .. واستخدم هذه النسخة مع الزبائن .. مايقوم به الـ Publish هو عمل نسخة Complied للبرنامج ويقوم بحفظ حزمة الملفات داخل ملف exe حتى يمكن للشخص تنصيب البرنامج على جهازه.
- 3 اجابة
-
- 1
-
الوسم هو <HTML> ككل. حتى تتضح الصورة بشكل افضل. الوسم يكون بهذه الطريقة : <التعريف> كل وسم يجب أن يحمل تعريف, والتعريف هو عبارة عن عنوان يقوم بتعريف الكائنات الموجودة داخل الوسم. مثال بسيط : <Person> <Name>Mohammed</Name> </Person> في المثال السابق, قمنا بتعريف Person (شخص) وإعطائه إسم محمد. لو لاحظنا, الوسم <Person> هو الوسم الرئيسي الذي يحمل وسم <Name> أي ان وسم <Name> عباره عن جزء من <Person> وبهذا نعرف أن الشخص هذا اسمه محمد. لكن لو قمنا بعمل الآتي : <Person> <>Mohammed</> </Person> الوسم <Person> سيحمل وسم "مجهول" بداخله لأنه لم يتم إعطائه تعريف. لاننا سنعرف ان هذا هو شخص, ويملك محمد. ولكن مانوع محمد الذي يملكه ؟ هل يقصد اسمه ؟ اما مكان؟ ام هواية ؟ ام ماذا ؟ ولذلك ستكون كتابته خاطئه لان قواعد اللغة البرمجية لاتسمح بإعطاء تعريف مجهول لأي وسم سواء كان في HTML او XML او حتى بعض اللغات الأخرى التي تستخدم الوسوم في منظومتها. (مثال على لغات اخرى) في الجافا و C# ArrayList<int> numberList = new ArrayList<int>(); في المثال اعلاه قمنا بتعريف مصفوفة جديدة من نوع int (اعداد صحيحة) وذلك بإستخدام وسم <int> .. لو قمنا بعمل الآتي : ArrayList<> numberList = new ArrayList<>(); لن ينجح البرنامج من ترجمة نوع المصفوفة Compile , والسبب ان المترجم لن يستطيع تحديد نوع المصفوفة لأننا لم نقم بإعطائها تعريف فأصبحت مجهولة الهوية! فلذلك عند استخدام الوسوم في لغات البرمجة, لابد دائماً اضافة التعريف للوسم. اما في حالة استخدام اشارة الوسم كمعامل رياضي (مثل معاملات المقارنة المذكورة سابقاً) فهذا الامر لاينطبق عليها.
-
اذا كنتِ تقصدين HTML فهي تسمى وسوم او وسم - Tags أو Elements (عنصر) مثلاً <HTML> </HTML> بداية الوسم يكون <HTML> ونهايته يكون <HTML/> .كذلك هو الحال تماماً مع XML .. ايضاً في HTML يستخدم لإضافة تعليقات مثال : <!-- Comment --> اما بقية لغات البرمجة فلا تستخدم هذه الطريقة بالوسم. بل تستخدمها في عدة مواضع بطرق مختلفه. مثلاً C# لو أخذنا List .. للتعريف عن نوعها يتوجب علينا استخدام الوسم واضافة نوعها داخل الوسم مثل هذه الطريقة List<String> فهنا قمنا بتعريف القائمة على انها قائمة نصية ايضاً تستخدم في بعض العمليات الحسابية والمقارنة مثل اكبر من, اكبر من أو يساوي , اصغر من , اصغر من أو يساوي a < b // a is smaller than b a > b // a is grater than b a <= b // a is smaller than or equal to b a >= b // a is grater than or equal to b وهذه مشتركة في غالبية اللغات .. ايضاً في الـ SQL وبعض اللغات الاخرى .. تستخدم <> للمقارنة وتعني (لاتساوي). a <> b // a is not equal to b
- 6 اجابة
-
- 1
-
تم تصميم الـ SQL من قبل Donald D. Chamberlin و Raymond F. Boyce داخل شركة IBM سنة 1970. 3. لا اذكر ان لها موقع رسمي. لأنها متبناه من قبل شركات مختلفه وكل شركة لها موقعها (فقط ابحثي بإسم المحرك - رقم 6-). 4. سبق واجبتك على هذا السؤال. 5. Database 6. يعتمد على المحرك ( MySQL, PostgreSQL مفتوحة المصدر اما SQL Server و Oracle فمغلقة المصدر ). 7. اجبت على هذا السؤال سابقاً. 8. يعتمد على نظام المحرك هو من يتحكم بهذا الامر. 9. سبق وذكرت انها declarative language 10. interpreter
-
الـ SQL هي لغة البرمجة اما الـ MySQL و SQL Server و Oracle وغيرها .. هذي تسمى نظام إدارة قواعد البيانات Database Management System ويختصرونها بكلمة DBMS .. فنظام إدارة قواعد البيانات مبني على SQL واللي من خلاله راح يسهل علينا التعامل مع البيانات بشكل مرئي واسرع. هذا هو الفرق بينها.
-
لم تقم بتحديد نوع المحرك المطلوب للـ SQL .. مثل SQL Server, Oracle, MySQL, ...etc .. لذلك يمكنك زيارة هذه الصفحة والإستفادة من الكتب الموجودة : https://www.kutub.info/library/category/15 بالنسبة لأمر طباعة كلمة "aslam alikom " SELECT 'aslam alikom' اما بالنسبة للـ program domain لم افهم ماذا تقصد بها ؟ اما دعم الـ OOP (اعتقد انك تقصد Object Oriented Programming) بالنسبة للـ Oracle PL/SQL نعم يدعمها, وتسمى Object Types .. اما بقية المحركات الأخرى (مثل SQL Server) فلا تدعمها بشكل مباشر, وانما تحتاج الى لغات اخرى تدعمها (مثل C#) وتقوم بإستخدام OOP من خلالها .. لان محركات الـ SQL الاخرى لاتتعامل مع البيانات كـ Objects وانما تتعامل معها كجداول بيانات بعلاقات Relational Database. لان الـ SQL لغة تصريحية declarative language بينما الـ OOP لغة حتمية imperative language . في الـ SQL انت فقط تقوم بتحديد نوع المخرجات ومحرك الـ SQL يقوم بالعمليات الاخرى لجلبها لك. بينما في الـ OOP انت تقوم بصياغة الخطوات الكاملة للمخرجات. وهذا هو الفرق بينها.
-
هنالك عدة طرق لأتمتة العمل. بالنسبة لبوابة الدخول, ليست هنالك طريقة سهله طالما أن ليس لديك الوصول لمصدر البيانات الرئيسي. لذلك لن نتمكن من عملها إلا في حالة المعاينة والتجربة على بوابة الدخول لمعرفة آلية الدخول والتحميل ومن ثم تحديد ما اذا كان ممكن عمله او لا. اما بالنسبة لمابعد تحميل الملف, فمثلاً من الممكن تحميله وحفظه باسم معين في مكان معين. والاسم والمكان ثابتين. ثم نقوم بعمل سكربت ليقوم بإرسال الرسالة متضمناً معها الملف, البريد المرسل إليه مع العنوان والرسالة. هنالك عدة طرق لعمل سكربت اما عن طريق ملف Batch او Powershell او حتى VB. كلها واردة. بالنسبة للـ Batch هنالك مكتبات جاهزة لها من اشهرها Blat و SendEmail مكتبة أوامر ارسال الرسائل الإلكترونية عن طريق شاشة الاوامر للويندوز Windows Command Prompt والتي ايضاً يمكن ان نستعين بها لإستخدام اوامرها بشكل تلقائي من خلال ملف Batch. يمكن ايضاً استخدام أوامر الـ Powershell وهو بديل للـ Batch ويعطي نفس النتائج. مثال بسيط : Function Send-EMail { Param ( [Parameter(` Mandatory=$true)] [String]$EmailTo, [Parameter(` Mandatory=$true)] [String]$Subject, [Parameter(` Mandatory=$true)] [String]$Body, [Parameter(` Mandatory=$true)] [String]$Password ) $EmailFrom = "user@domain" $SMTPServer = "HMAIL IP" $SMTPMessage = New-Object System.Net.Mail.MailMessage($EmailFrom,$EmailTo,$Subject,$Body) $SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 25) $SMTPClient.EnableSsl = $true $SMTPClient.Credentials = New-Object System.Net.NetworkCredential($EmailFrom, $Password); $SMTPClient.Send($SMTPMessage) Remove-Variable -Name SMTPClient Remove-Variable -Name Password وهذه طريقتين شائعة. بعد عمل السكربت, يمكنك إضافته الى جدولة المهام في الويندوز Task scheduler وتحديد الوقت الذي سيقوم الويندوز بتشغيل السكربت فيه في كل مره. وحفظ المهمة وسيقوم الويندوز تلقائياً بتشغيل السكربت في الوقت المحدد وبالشروط المعطاه له. هذا موجز مبسط لطريقة أتمتة العمل المطلوب.
-
تحتاج إلى التأكد من مسبب المشكلة ليتم حلها. قم بتفعيل وضع Debug من خلال اضافة هذا السطر : define( 'WP_DEBUG_LOG', true ); الى ملف wp-config.php .. وبعدها قم بإعادة المحاولة لإضافة منشور جديد او تحديث منشور حالي. بعدها إذهب الى مجلد wp-content وستجد بداخله ملف جديد بإسم debug.log. قم بنسخ محتواه وضعه في ردك القادم. وسأقوم بمراجعتها وإعلامك بطريقة لتجاوز هذه المشكلة بإذن الله.
-
هل تقوم بإستخدام اضافة لتحرير المحتوى مثل Elementor و DIVI Builder ؟ بالنسبة للرابط الذي تم وضعه في المشاركة الأولى, الموقع: blog.maksupply.com.tr لا يعمل, ولكن http://www.maksupply.com.tr يعمل. ايضاً وجدت أن الموقع يدعم تعدد اللغات, فهل أنت قمت بتفعيل خاصية تعدد المواقع Multisite Network ؟ وماهي الإضافة المستخدمة لذلك ؟ هل تستخدم MultilingualPress؟
- 7 اجابة
-
- 1
-
المتغيرات في الـ PHP (وفي كافة لغات البرمجة) تعمل على حفظ القيم المعطاه لها. فمثلاً لو قمت بإنشاء متغير جديد وإعطاءه القيمة 1. سيحمل المتغير هذه القيمة, فإينما وضعت المتغير سيتم قرائتها على أنها 1. لكن عندما تقوم بإنشاء المتغير بدون أي قيمة مسجلة, سيعطي NULL او سيظهر خطأ على حسب لغة البرمجة. في الـ PHP أي متغير يتم إنشاءه بدون قيمة, سيتم تسجيل قيمة NULL بداخله. مثال على ذلك : $id; $NullCheck = is_null($id); //True or False if($NullCheck == 1){ echo "I'm a NULL"; }else{ echo "$id"; } في المثال أعلاه, قمنا بإنشاء متغير id$ بدون إعطاءه أي قيمة, ثم قمنا بإنشاء متغير آخر NullCheck$ وسجلنا به الدالة $NullCheck = is_null($id) ودالة is_null() في الـ PHP تقوم بمراجعة قيمة المتغير id$ فإذا كانت قيمته NULL ستكون النتيجة 1 (اي True) وإذا كانت غير ذلك ستكون النتيجة 0 (اي False). لو لاحظت أني لم أقم بإعطاء id$ اي قيمة, وعند محاكاة الكود اعلاه ستظهر لنا رسالة I'm a NULL وهذا بسبب أن id$ لا يحمل قيمة بداخلة بل يحمل قيمة NULL. ولو استخدمنا وضع Debug في PHP وإظهار الأخطاء error_reporting(E_ALL) سيظهر لنا خطأ Undefined variable وهذا يعيد كلامي السابق بأن المتغير لم يتم إعطاءه أي قيمة. ولكن لو قمنا بإعطاء المتغير id$ قيمة (مثلا 1) واستخدمنا المثال السابق, ستظهر لنا النتيجة (1) ويزول خطأ Undefined variable مثال : $id = 1; $NullCheck = is_null($id); //True or False if($NullCheck == 1){ echo "I'm a NULL"; }else{ echo "$id"; } هذه فكرة ملخصة عن المتغيرات. قد تكون قيمة مضافة لك وقد تكون مراجعة. نعود الى الخطأ الرئيسي في الكود الخاص بك. لديك $sql="SELECT * FROM threads WHERE id='$id'"; يجب ان يكون المتغير id$ لديه قيمة مسبقة حتى يتم استبداله بهذه القيمة, ولكن في الكود الخاص بك ليس هنالك أي قيمة مسبقة له. فمثلاً كحل سريع للمشكلة , لنقل أن الرقم التعريفي للمنشور المراد التعديل عليه هو 456. فلو قمنا بعمل الآتي : $id = 456; if($connect=mysqli_connect('localhost','root','a','flip')){ $sql="SELECT * FROM threads WHERE id='$id'"; $query=mysqli_query($connect,$sql); وبهذا تم حل مشكلة التعديل على المنشور رقم 456. ولكن هذا يعني اننا سنحتاج إلى وضع رقم المنشور في كل مره يحتاج الى تعديل بشكل يدوي. إذا سنحتاج الى طريقة لجلب رقم المنشور المراد التعديل عليه وثم تخزينة في id$. حتى يتم تنفيذ امر sql$ بدون مشاكل. وطريقة جلب رقم المنشور تعتمد على طريقة حفظ رقم المنشور نفسه واستدعائه.
-
مانوع السيرفر الذي تستخدم الوردبريس عليه ؟ Apache او IIS ؟
-
$sql="SELECT * FROM threads WHERE id='$id'"; $id لم يتم تجهيزة بأي قيمة قبل الإتصال بقواعد البيانات. يجب استيراد الـ id وتخزينه في $id ثم بعد ذلك تقوم بالإتصال بقواعد البيانات. حتى يتم تحويل المتغير الى القيمة المخزنة بداخلة (القيمة المستوردة) .
-
اعتقد ان مشكلتك تكمن في الرابط نفسه. أستخدم دلالات بالحروف الإنجليزية عوضاً عن العربية. قم ايضاً بالذهاب الى الإعدادات ثم Permalinks واضغط على زر حفظ التغييرات Save Changes حتى يتم تحديث الإعدادات إذا لازالت المشكلة موجودة , قم بالرجوع الى صفحة الـ Permalinks ثم قم بإسترجاع الإعدادات الافتراضية للروابط بحيث يكون الرابط برقم المقال او الصفحة (الخيار الأول Plain) ثم احفظ الإعدادات. إذا كنت تستخدم IIS , تأكد بان تختار Custom وتضع /%postname%/index.php وتقوم بحفظ الإعدادات
-
حاولت ابحث لك عن شرح جاهز ويكون مبسط. وهذا قد يفي بالغرض : ما هى ال joins ؟ و ما انواعها و فيما تستخدم ؟ ملاحظات تهمك (تعقيب على الشرح ) : الـ INNER JOIN يكتب على ثلاث صيغ (بما أنه الربط الإفتراضي) . SELECT s.stor_id, d.discounttype FROM stores s JOIN discounts d ON s.stor_id = d.stor_id SELECT s.stor_id, d.discounttype FROM stores s INNER JOIN discounts d ON s.stor_id = d.stor_id الصيغيتن التي بالأعلى متشابهه وهي على صيغة ANSI-92 standard وهي الصيغة الحديثة وستعطي نفس النتائج سواء تم كتابة الـ JOIN بخيار الـ INNER او بدونه. اما الصيغة التالية : select s.store_id, d.discounttype from stores s, discounts d where s.store_id=d.store_id هذه الصيغة هي الصيغة القديمة من الصيغيتين السابقة وهي على صيغة ANSI-89 standards . وعلى الرغم من ان لازالت محركات قواعد البيانات تدعمها, إلا أني لا أنصح بإستخدامها ودائماً نستخدم الصيغ الحديثة لأن محركات قواعد البيانات تستخدم الصيغة الحديثة. أي نضع دائماً الكلمات الدلالية للربط JOIN ونستخدم الـ ON لشرط الربط (عدا الـ CROSS JOIN لايحتاج الى ON). هذا سيجنبك اي مشاكل قد تحدث بسبب الصيغ (لان محركات قواعد البيانات في تحديث مستمر, واحتمالية تخلصها من الصيغ القديمة عالية). إذا كان هنالك أي استفسار حول الشرح بالرابط المدرج أعلاه, يرجى طرحه وسأحاول أن اجيب عليه بإذن الله.
- 2 اجابة
-
- 1
-
بيئة الأندرويد تفي بالغرض اما الـ unity بالإمكان تضمينها داخل بيئة عمل الاندرويد ولكنك لن تحتاجها إلا عند تصميم الألعاب التي تتطلب هذه البيئة.
- 1 جواب
-
- 1
-
هذا الطلب صعب تخيل سعره .. لانه بيعتمد على متطلباتك والجهد والوقت المبذول فيها .. فمثلاً , ممكن مشروع مفتوح المصدر مع بعض التخصيصات فيه قد تفي بالغرض .. وممكن راح تحتاج الى انك تبرمجها من الصفر .. وبالحالتين الاسعار تختلف !
-
اذا كنت تقصد صفحة اضافة الأكلات والبحث , فليس لدي مثال فوري على ذلك. ولكن هنالك بعض الأمثلة لمشاريع مواقع للمطاعم بشكل عام مفتوحة المصدر يمكنك استخدامها أو حتى استلهام الافكار منها مثل : https://github.com/tastyigniter/TastyIgniter
- 5 اجابة
-
- 1
-
والله مابعرف اذا باللحق اجاوب على كامل السؤال او لا .. انت بالمختصر عندك موقع للأكلات بشكل عام , ومتطلباتك مختلفه وتختلف التقنيات المستخدمة فيها كذلك. فمثلاً صفحة اضافة الأكلات , هذا من الممكن برمجته من خلال Javascript و PHP. ستقوم بإستخدام الجافاسكربت في التحكم بالتغييرات الديناميكية في واجهة المستخدم. مثلاً, قام المستخدم بإختيار اكلة من القائمة, سيظهر له حقلين جديدة بشكل تلقائي وبدون تحديث للصفحة. مثل هذه التغييرات الديناميكية يمكن عملها بالجافا سكربت, اما الـ PHP فلا يتميز بها. فلذلك غالباً مايتم استخدام التقنيتن معاً لهذا السبب. وهذا ايضاً يدخل في موضوع البحث وإظهار قائمة المقترحات وقت البحث (هذا ايضاً بالجافا سكربت). بالنسبة لقواعد البيانات, إذا كانت قاعدة بيانات الأكل والأسعار , وقاعدة بيانات البيانات والتصنيفات منفصلة عن بعضها البعض, فأنصحك بإعادة بناء قاعدة بيانات جديدة تضم القاعدتين, وتكون فيها الجداول مرتبه بحسب نوعها. مثلاً, جدول للأكل والأسعار. جدول للبيانات , جدول للتصنيفات ... الخ. الفكرة هي عمل قاعدة بيانات بشجرة مرتبه ومرتبطه بعضها ببعض. وهذا سيسهل عليك عملية البحث والربط والاضافة والتعديل .. الخ. ولا أنصح ابداً بإكمال العمل على قواعد بيانات منفصلة بهذه الطريقة. فمثلاً لو كانت مفصولة, لن يمكنك الاستفادة من الذكاء الاصطناعي لسبب انه لايمكنه الوصول الى كامل المعلومات اللازمة لبناء معلومات حول أكلة معينة سواء كان بنوعها او بسعرها او حتى بشعبيتها وغيرها من طرق التحليل. اما بالنسبة للـ Google Sheets, فبإمكانك اضافتها الى قواعد البيانات وهنالك طرق مختلفه لذلك. ولكن اسهلها هي استخدام ملفات CVS , فقواعد البيانات تقرأ ملفات CVS وبإمكانك تصدير Google Sheets الى CVS ومن ثم استيرادها من داخل قواعد البيانات. ولكن لابد أن تكون الجداول والصفوف والأعمدة بنفس ترتيب جدولها الموجود داخل قاعدة البيانات. اما عن برنامج يقترح عليك الاكل المناسب من قاعدة البيانات , هذا ممكن ولكن تحتاج الى استخدام ذكاء اصطناعي, هنالك الكثير من المواقع تقدمه بشكل مجاني (مفتوح المصدر). فقط ابحث عنه وستجده. -كيف ممكن ابرمج نظام الخانات يعني انو دائما يشوف شو الاكلة الي خترتها واذا الها اضافات يعملي خانات جنبها واذا لا ما يعمل ... وكيف فيني حدد الاضافات لكل اكلة ؟؟ بالنسبة لرؤية الأكلة او ظهورها بشكل عام بالصفحة, فهذا يعتمد على طريقتك بإظهارها. الـ PHP سيكون كافي لإظهارها, ولكن كما ذكرت سابقاً ستحتاج الى التقنيات الديناميكية للتحكم بتنسيق الصفحة بشكل عام مثل HTML, CSS, Javascript. اما تحديد الاضافات لكل اكلة, فهذه فائدة قواعد البيانات الموحدة, يمكنك ربط كل اضافة بالرقم التعريفي للأكلة في قواعد البيانات ومن ثم قرائتها من الـ PHP. ولا يمنع من استخدام بعض Queries المساعدة لنتائج افضل. - كيف ممكن اربط التصنيفات تبع الاكل مع الاكل بقاعدة البيانات (نوع كل اكلة .... مع العلم لدي فقط 5 انواع)؟ كما ذكرت تقوم بإعطاء رقم تعريفي ID مميز لكل تصنيف داخل جدول التصنيفات. ومن ثم تقوم بإضافة عمود جديد مثلا تقوم بتسميته الصنف وتقوم بربطه بمفتاح اجنبي foreign key في جدول الأكلات وتقوم بإضافة الرقم التعريفي للتصنيف لكل اكل عبر استخدام داخل هذا العمود. مثال : رقم الأكلة العنوان الوصف الصنف وبكل الاحوال لماذا تقوم ببرمجتها من الصفر بينما هنالك برامج جاهزة مفتوحة المصدر ومجانية وقابلة للتخصيص كيفما تريد وتقوم بتخصيصها والتعديل عليها قدر حاجتك لكسب الوقت والجهد ؟ مثل WooCommerce على سبيل المثال. متخصص بالتسويق الالكتروني, ولكن يمكن تخصيصه الى متجر أكلات. ان شاء الله اني وفقت بالاجابة
- 5 اجابة
-
- 1
-
ستحتاج إلى إما استخدام API او مكتبة بها الحزمة المطلوبة. شخصياً, انا استخدمت Google QR Code في أحد المشاريع السابقة, وهنالك مواقع اخرى تقدم مثل هذه الخدمة ولكن الغالبية العظمى منها خدماتها ليست مجانية. ايضاً هنالك مكتبات برمجية جاهزة يمكنك استخدامها مثل مكتبة ZXing (مفتوح المصدر) وهي مكتبه تعمل على كثير من المنصات مثل Java و C# و Android وغيرها. نقطة أخيرة , بما أنك ستسخدمها لحفظ بيانات بنكية, الـ QR Code ليس آمن لمثل هذه الإستخدامات, ولا أنصح به. ولكن لو كنت تريد إستخدامه يجب عليك ان لاتحفظ البيانات بدون تشفير, اي قم بتشفيل البيانات اولاً ثم بعد ذلك حفظها ك QR Code.