لوحة المتصدرين
المحتوى الأكثر حصولًا على سمعة جيدة
المحتوى الأعلى تقييمًا في 06/06/16 في كل الموقع
-
حمل عام 2015 حدثًا مهمًا لمجتمع PHP، فبعد أحد عشر عامًا بعد إصدار PHP 5.0 تم إطلاق الإصدار الرئيسي الجديد ألا وهو PHP 7. وسنتحدث في هذا الدرس عمّا حمله هذا الإصدار من تغييرات وإضافات. لكن أين اختفى إصدار PHP 6؟ إذا لم تعمل منذ فترة على PHP، فربما تتساءل ما الذي حدث لإصدار PHP 6، لماذا قفزوا مباشرةً من PHP 5 إلى PHP 7؟ الجواب باختصار هو الفشل الذريع في PHP 6. فالميزة الأساسية للإصدار 6 هي الدعم المُضمّن لمحارف يونيكود وذلك لأنَّ PHP تُستخدَم بشكل رئيسي في تطوير الويب، وسنحتاج إلى استخدام محارف يونيكود في الويب، ولهذا كان التوجه الأساسي هو جلب دعم محارف يونيكود إلى PHP. للأسف، واجهت تلك الخطة الطموحة مشاكل أكبر من تلك المتوقعة، فكان من المفترض تحويل جزء كبير من الشيفرة البرمجية لكي تدعم محارف يونيكود في أساس اللغة وفي الإضافات (extensions) المهمة، لكن تلك المهمة كانت مملة وصعبة؛ وهذا ما أبطأ من تطوير الميزات الأخرى في اللغة، مما أزعج الكثير من مطوري PHP. وبعد فترة ظهرت عقباتٌ أخرى أدّت إلى تقليل الاهتمام بتطوير دعم مُضمّن (أي مدمج في اللغة) لمحارف يونيكود؛ مما أدى في النهاية إلى إيقاف العمل على المشروع. لكن كُتِبَت مقالات وكتب عن PHP 6 ودعمها لمحارف يونيكود قبل إيقاف المشروع، لهذا سُمِّي الإصدار الجديد PHP 7 لرفع الالتباس. حسنًا، لنترك الماضي الحزين وراء ظهورنا ولننظر ما الذي أتت به PHP 7. تحسينات في الأداء أحد أكبر الأسباب التي تجعلك تستعمل PHP 7 في خودايمك هو تحسينات الأداء التي أتت PHP 7 بها، حيث أشارت الإحصائيات الرسمية إلى أنَّ أغلبية التطبيقات العملية التي تستعمل PHP 5.6 ستعمل أسرع بضعفين على الأقل فيما لو استخدمت PHP 7. يمكنك إلقاء نظرة على العرض الذي قدمه Rasmus Lerdorf لتفاصيل أكثر عن الإحصائيات حول الأداء، هذه صورة مأخوذة من ذاك العرض التي تُظهِر نتائج تشغيل ووردبريس على مختلف إصدارات PHP: تستطيع PHP 7 معالجة ضعف الطلبيات في الثانية تقريبًا، الذي يُمثِّل عمليًا تحسينًا قدره 100% في الأداء في المواقع التي تستعمل ووردبريس. هنالك تحسينات أيضًا في مقدار استهلاك PHP 7 للذاكرة، حيث أنَّ تحسين البنى الداخلية للغة كان أحد الأسباب التي أدت إلى تحسين الأداء وتقليل استخدام الذاكرة لتفسير الشيفرات. المشاكل في التوافقية مع الإصدارات السابقة حدثت عدِّة تغييرات في بنية PHP في الإصدار السابع، التي يؤدي بعضها إلى عدم توافقية مع ما سبقها من الإصدارات. أهم تلك التغييرات هي حذف الدوال والعناصر المهملة (deprecated) خصيصًا وسوم البداية والنهاية التي تشبه ASP (أي <% و <%= و %>) حيث حُذِفَت بالإضافة إلى وسم <script language="php">، تأكد أنَّك تستعمل الوسم <?php بدلًا عنهما. الدوال التي أُهمِلَت في الإصدارات السابقة تم حذفها في PHP 7 مثل الدالة split، والدوال التي تتبع للإضافة ereg (أي جميع الدوال التي تبدأ بالسابقة ereg_). يجب استخدام الدوال التي تتبع للإضافة PCRE بدلًا عنها (أي الدوال التي تبدأ بالسابقة preg_) والتي توفر ميزات أكثر. وحُذِفَت جميع دوال الإضافة mysql أيضًا (أي الدوال التي تبدأ بالسابقة mysql_) والتي أهمِلَت منذ الإصدار 5.5؛ عليك استخدام دوال إضافة mysqli التي تبدأ بالسابقة mysqli_ بدلًا منها. طُبِّقَت أيضًا السياسة الموحدة لتفسير المتغيرات، التي حلّت العديد من المشاكل التي تتعلق بالتعابير التي تحتوي على متغيرات. الميزات الجديدة هذا هو الجزء المسلي هنا، لنتحدث عن أكثر الميزات إثارةً التي ستحصل عليها عند التحديث إلى PHP 7. معاملين جديدين يمكن استخدام معامل spaceship (<=> أو معامل المقارنة المدمج) لجعل تعبير المقارنة أقصر ما يمكن. انظر إلى هذا المثال: a<=>b ستكون نتيجة التعبير السابق 1- إن كان a$ أصغر من $b، و 0 إذا كان $aيساوي $b، و 1 إذا كان $a أكبر من $b. ويمكن اعتباره اختصارًا للتعبير الآتي: (a < b)? -1 : ((a > b) ? 1 : 0)) تحديد أنواع المعاملات والقيم المُعادة إحدى أهم الميزات الجديدة المنتظرة التي أتت بها PHP 7 هي تحديد أنواع معاملات (parameters) للدوال. التي تعني أنَّنا تستطيع تحديد ما هو نوع المعامل الذي ستقبله الدالة والذي سيكون إما int (للأعداد الصحيحة) أو float (للأعداد العشرية) أو string (للسلاسل النصية) أو bool (للقيم المنطقية true أو false أو ما يكافئها). لا يكون الالتزام بأنواع المعاملات المُحدَّدة إجباريًا افتراضيًا، أي non-strict، وهذا يعني لو مررت (int(1 إلى دالة تتطلب عددًا عشريًا (float) فستصبح قيمة الوسيط الممرر (float(1.0 تلقائيًا، أما لو مررت (float(1.5 إلى دالة تتطلب عددًا صحيحًا (int)، فعندها ستصبح القيمة (int(1. ميزات أخرى متفرقة أصبحت PHP 7 تدعم محرف تهريب (escaping) جديد هو \u الذي يسمح لنا باستعمال محارف يونيكود (بالنظام الست عشري) داخل سلاسل PHP النصية، ويستعمل بالشكل {\u{CODE، المثال الآتي يُظهِر رمز القلب: echo “\u{1F49A}”; أضيفت أيضًا ميزة إنشاء أصناف مجهولة (Anonymous classes) التي تُفيد في حال أردنا إنشاء كائن وحيد من الصنف فقط: الإصدارات قبل PHP 7 class Logger { public function log(msg { echomsg; } } $util->setLogger(new Logger()); في الإصدار PHP 7 $util->setLogger(new class { public function log($msg) { echo $msg; } }); المصادر لمزيدٍ من المعلومات حول الإضافات التي حدثت في PHP 7، راجع التدوينة Getting Ready for PHP 7 لصاحبتها Erika Heidi. والتدوينة Introduction To PHP 7: What’s New And What’s Gone لصاحبها Vilson Duka، وصفحة New PHP 7 features في دليل PHP. إذا أردت شرحًا لما حُذِفَ في PHP 7، فانظر إلى صفحة Backward incompatible changes في دليل PHP هنالك مرجع كامل لتغيرات PHP موجودٌ في الصفحة الآتية على github، وانظر كذلك إلى PHP RFC.1 نقطة
-
سنشرح في هذا الدرس كيف نوزِّع شيفرات على عدِّة ملفات وكيف نُضمِّن شيفرات من ملفات أخرى. توفِّر PHP أربع دوال لتضمين الشيفرات من الملفات الأخرى: include include_once require require_once الدالة include تُستعمَل include لتضمين الملفات الخارجية إلى الملف الحالي، حيث تنسخ النص من الملف الخارجي وتلصقه مكان وجودها، وإن حدثت أيّة أخطاء فستتجاوز هذه الدالة عملية تضمين الملف وسيُستكمَل التنفيذ مع إظهار تحذير (warning) دون إظهار خطأ (error). على سبيل المثال، لدي ملفان هما tutorials.php و tutorials2.php في نفس المجلد. الملف tutorials2.php: <?php /** * this is another class in file tutorial2.php */ class Bird { function __construct() { echo "class Bird included"; } } ?> الملف tutorials.php: <?php include 'tutorial2.php'; // كما يُمكن أن نكتبه على النّحو التّالي include('tutorial2.php'); $obj = new Bird(); ?> الناتج: class Bird included الدالة include_once هذه الدالة شبيهة بالدالة include لكن الاختلاف أنها تُضمِّن الملف مرةً واحدةً فقط؛ مثلًا، إن كان لديك ملفُ آخرٌ يُضمِّن كلا الملفين السابقين باستخدام include فسيُضمَّن الصنف Bird مرتين وسينتج عن ذلك خطأ لأنه لا يُسمَح بإعادة تعريف الصنف مرةً أخرى. وهذا الأمر يحدث كثيرًا في المشاريع أو التطبيقات الكبيرة، لذا يكون البديل هو استخدام include_once التي ستُضمِّن tutorial2.php مرةً واحدةً فقط. الدالة require تعمل require كعمل include إلا أنها تعطي خطأً (بدلًا من تحذير) عندما يحدث خطأ في تضمين الملف، ويتوقّف البرنامج عن التّنفيذ. الدالة require_once وهي تعمل أيضًا بشكلٍ شبيهٍ بالدالة include_once إلا أنها تعطي خطأً بدلًا من تحذير كما في require، ويتوقّف البرنامج أيضًا. مسار التضمين كان لدينا في المثال السابق كلا الملفين في نفس المجلد ثم ضمَّنا الملف tutorial2.php مباشرةً، وهذا ما يدعى "بالمسار النسبي"؛ لكن كيف يمكننا أن نضمِّن ملفًا من مجلدٍ آخر؟ يمكننا تمثيل المسار إلى الملف بطريقتين: المسارات النسبية المسارات المطلقة المسارات المطلقة وهي مسار الملف بدءًا من مجلد الجذر؛ الذي يكون في لينكس (وغيره من الأنظمة الشبيهة بِيونكس) كالآتي: include_once( '/var/www/html/findalltogether/tutorial2.php' ); أما في ويندوز، فسيبدأ المسار المطلق بحرف القرص (مثل C:\www\html\tutorial2.php)، لاحظ أنَّ الشرطة المائلة الخلفية (\) هي التي تستعمل في المسارات في ويندوز. المسارات النسبية وهي مسار الملف نسبةً إلى الملف الحالي (أي الملف الذي يجري عملية التضمين)؛ حيث يمكن أن يكون الملف في ثلاثة أماكن نسبية: أن يكون في نفس مجلد الملف الذي يجري عملية التضمين أن يكون ضمن مجلد في نفس مجلد الملف الذي يجري عملية التضمين أن يكون المجلد الأب (parent) أو في مجلدٍ موجودٍ في المجلد الأب لنتناول شرح كل حالةٍ على حدة: لقد استعملنا مسبقًا الحالة الأولى، ولقد وضعنا اسم الملف مباشرةً إن كان في نفس المجلد 2. أما في الحالة الثانية، فعلينا أن نضيف اسم المجلد؛ فمثلًا إن كان الملف موجودًا في مجلدٍ باسم folder فسيكون سطر التضمين هو: include('folder/tutorial2.php'); أما لو كان هنالك أكثر من مجلد فرعي، فسنحتاج إلى كتابة أسمائها أيضًا: include('first/second/third/tutorial2.php'); 3. في الحالة الأخيرة، سنستعمل "../" (نقطتين ثم خط مائل) كي ننتقل إلى المجلد السابق؛ وبفرض أنَّ الملف الحالي موجودٌ في /var/www/html/tutorials/include/tutorials.php ونريد تضمين الملف /var/www/html/another/tutorial2.php، فسنستعمل: include('../../another/tutorial2.php'); لتضمينه، إذ أنَّ ../ تعني أننا ننتقل إلى الخلف مجلدًا واحدًا فقط. مجالات الأسماء في المشاريع الكبيرة، من الممكن (وهذا يحدث عادةً) أن يكون لدينا دالتان أو صنفان لهما نفس الاسم في مكتبتين أو ملفين مختلفين؛ ونحتاج أحيانًا أن نضمن كلا الملفين في نفس الملف، مما يؤدي إلى حدوث خطأ لأنه لا يجوز أن نعيد تعريف دالة أو صنف أكثر من مرة واحدة؛ لذا جاءت مجالات الأسماء (namespaces) للمساعدة في تجنب تلك التضاربات. مجالات الأسماء كالمجلدات، حيث لا نستطيع أن نضع ملفين بنفس الاسم في نفس المجلد، وبالمثل لا نستطيع تعريف دالتين أو صنفين في نفس مجال الأسماء، لكن نستطيع فعل ذلك في مجال أسماءٍ مختلف. لنفترض مثلًا أننا نبرمج نظامًا للتسوق، ولدينا دالتَا عرض مختلفتين، واحدة في ملف car.php كي تُظهِر عربة التسوق والأخرى في checkout.php لتظهر معلومات الدفع؛ ونريد تضمين هاتين الدالتين في ملفٍ سينفِّذ الدالة display() من ملف checkout.php إن ضغط المستخدم على زر "checkout"، وسيستدعي الدالة display() من ملف cart.php فيما عدا ذلك. علينا هاهنا أن نستعمل مجالًا للأسماء، حيث سنُعرِّف كل دالة بمجال أسماءٍ مختلف كي لا تظهر أيّة أخطاء عند تضمين كلا الملفين سويةً. ملف checkout.php: <?php namespace Checkout; function display() { // code for display function echo "dispay in checkout"; } ?> ملف cart.php: <?php namespace Cart; function display() { //code of dispay function in cart echo "display in cart"; } ?> ملف tutorials.php: <?php // including files in different namespace require 'checkout.php'; require 'cart.php'; // checking condition if ( $action == "checkout" ) { // calling from checkout namespace Checkout\display(); } else { // calling from cart namespace Cart\display(); } ?> لاحظ ما يلي في الأمثلة السابقة: تُنشَأ مجالات الأسماء بكتابة namespace NamespaceName; بعد وسم <?php نستطيع استدعاء الدوال والأصناف من مجالات أسماء معيّنة بكتابة NamespaceName\functionName() و NamespaceName\classname على التوالي وبالترتيب مجالات الأسماء الفرعية والكلمة المفتاحية use يمكننا تعريف مجال فرعي كما لو كنا ننشِئ مجلدًا فرعيًا، الشكل العام لتعريفه هو namespace NamespaceName/subNamespaceName/anotherSubNamespace; وطريقة استعمال مجالات الأسماء الفرعية مماثلة تمامًا لاستعمال مجالات الأسماء العادية؛ وعندما يكون المشروع كبيرًا ويحتوي الكثير من مجالات الأسماء الفرعية، فسيصبح من المزعج أن نكتب نفس الاسم مرارًا وتكرارًا، لذا توفِّر لغة PHP الكلمة المحجوزة «use» لهذا الغرض، إذ تُسنِد use اسم مجال الأسماء الفرعي بأكمله إلى اسمٍ ذي كلمةٍ وحيدة. use longNamespaceName as shortName; يمكنك بعد ذلك أن تستعمل الاسم القصير لمجال الأسماء بدلًا من كتابة كل الاسم، يدعى الاسم القصير بالاسم البديل (alias). <?php require "checkout.php"; // نعرف اسمًا أقصر للاسم الأطول use Namespace\SubNamespace\FrontEnd\Checkout as NewCheckout; NewCheckout\display(); ? > التحميل التلقائي للأصناف العديد من المبرمجين الذين يكتبون برامج كائنية التوجه يُنشئون ملفًا لكل صنف، ومن أكثر الأشياء التي تزعجهم هي كتابة قائمة طويلة من الملفات التي يجب تضمينها في بداية كل ملف. لم يعد ذلك ضروريًا في PHP 5، فأصبحت هنالك طريقة لتضيمن الأصناف تلقائيًا عند الحاجة إليها. يمكننا استعمال التحميل التلقائي للأصناف عبر الدالةspl_autoload_register()، وهذه الدالة مرنة جدًا، وتسمح باستخدام أكثر من محمل تلقائي (autoloader)، هذا مثالٌ عن استخدامها: <?php spl_autoload_register(function ($class_name) { include $class_name.'.php'; }); $obj = new MyClass1(); $obj2 = new MyClass2(); ?> تقبل دالة spl_autoload_register وسيطًا هو الدالة التي ستضمن ملفات الأصناف، فإما أن تُعرِّف الدالة ثم تمرر اسمها إلى دالة spl_autoload_register، أو أن تعرف دالة مجهولة مباشرةً داخل الدالة spl_autoload_register كما في المثال السابق. مثالٌ عن الحالة الأولى: <?php function my_autoloader($class_name) { include $class_name.'.php'; } spl_autoload_register('my_autoloader'); ?> في هذه الحالة ولدى محاولة استخدام صنف غير مُعرّف في نفس الملف مثل: $car = new Car; سيقوم PHP بمحاولة تحميل الملف Car.php (يبحث في المُجلّد الحالي) وإن وجده يقوم بإنشاء مُتغير جديد من صنف Car. التحميل التلقائي في Composer شاع استعمل Composer لإدارة حزم المكتبات البرمجية في PHP، إن أردت الاطلاع على المزيد من المعلومات حوله، فانظر إلى مقالة ما هو Composer ولماذا يجب على كل مطور PHP استخدامه. يُنشِئ Composer الملف vendors/autoloader.php الذي يتيح تضمين المكتبات الضرورية لعمل مشروعك تلقائيًا دون الحاجة إلى فعل ذلك يدويًا، وذلك عبر تضمين ذاك الملف في شيفرات PHP: <?php require_once "vendors/autoloader.php"; أسهل طريقة هي تحديد كل صنف على حدة، وسنُعرِّف لهذا الغرض مصفوفةً تحتوي على مسارات الملفات التي نريد تحميلها تلقائيًا في ملف composer.json، ربما تستفيد من هذه الطريقة في تضمين الملفات التي تحوي دوال PHP التي لا يمكن تحميلها تلقائيًا: { "autoload": { "files": ["src/MyLibrary/functions.php"] } } أو عبر PSR-4، التي تسمح لك بربط مجالات الأسماء إلى مسارات نسبية (relative paths) لجذر الحزمة، فعند التحميل التلقائي لصنف مثل Foo\\Bar\\Abz، فإن سابقة (prefix) مجال الأسماء Foo\\ التي تشير إلى المجلد src/ تعني أن آلية التحميل التلقائي ستبحث عن ملف باسم src/Bar/Baz.php وتضمِّنه إن كان موجودًا: { "autoload": { "psr-4": { "Monolog\\": "src/", "Vendor\\Namespace\\": "" } } } ولو أردت أن تبحث عن نفس السابقة في أكثر من مجلد، فعليك تحديد تلك المجلدات في مصفوفة كالآتي: { "autoload": { "psr-4": { "Monolog\\": ["src/", "lib/"] } } } وتستطيع توفير مجلد افتراضي إن لم يُعرَّف مجال الأسماء للصنف الذي يراد تحميله تلقائيًا، وذلك بترك مكان السابقة فارغًا: { "autoload": { "psr-4": { "": "src/" } } } المصادر مقال Distribute code in files in PHP لصاحبه Harish Kumar توثيق Composer صفحات include و require و Autoloading Classes و spl_autoload_register و __autoload1 نقطة
-
الهدف من خطة العمل أن تصبح رؤيتك للمشروع واضحة وشاملة ومعتمدة على خطة قائمة على معلومات وبيانات، فهي كخارطة طريق توضح لك أين أنت الآن ووضعك الحالي وما الذي تهدف أو تطمح للوصول إليه بعد فترة محددة من الزمن (خطوات مدروسة من النجاح والتقدم) تشمل خطة العمل بشكل عام: · دراسة الفئة المستهدفة من الجمهور، الاحتياجات، الاتجاهات، التفاعل مع المحتوى أو المنتج، ما الذي يجذبهم لشراء الخدمة أو المنتج، ما الجديد الذي ستضيفه لجمهورك. · دراسة السوق وتحليله والتعرف على الوضع التنافسي. · توقّع الإنجازات والمراحل المستقبلية، والاستعداد لمواجهة الصعوبات أو المشاكل المتوقعة (الطوارئ). · ضبط التكاليف والمصروفات والعوائد المتوقعة من المشروع. ( المصادر المالية للمشروع) · مجموعة من الافتراضات المتغيرة وخاصة عند التعامل مع شبكات التواصل الاجتماعي. عليك التحلّي بالصبر والمرونة فقد لا تسير الخطة تمامًا كما تخيلتها فلا تحبط أو تشعر بالفشل، بإمكانك مراجعة الخطة باستمرار وإدخال التعديلات والتغييرات عليها.1 نقطة
-
فشلت في ٣ مشاريع سابقة استغرقت مني ١٠ سنوات ولكني أريد الاستمرار بالمحاولة، كيف أدير مشروعي الحالي بحيث أتجنب أي احتمال للفشل ؟1 نقطة
-
أهلاً بك للأسفل لايوجد خطوات تمنعك من الفشل بشكل حتمي ولكن هناك مايساعدك كثيراً في تجنبه مستقبلاً وهو الدروس التي بإمكانك تعلمها من التجارب السابقة. نصيحتي لك أن تعيد النظر في مشاريعك وتحاول تحديد موطن الخطأ فيها قد تكون المشكلة من السوق او من الممول او المستثمر ولكن عادةً مايتحمل رائد الاعمال الجزء الجوهري من الخطأ، من المهم جداً أن تكون صادقاً مع نفسك حتى تصل للسبب الرئيسي في الفشل السابق ولابأس أن يساعدك في التقييم أشخاص من فريقك الذي نفذ معك تلك المشاريع. وكخطوات ناجحة لادارة مشروعك المستقبلي أنصحك بتحديد هدفك بشكل واضح ثم احصاء المعرفة والمهارات والادوات والخبرات والمعارف التي تمتلكها عندها ستدرك أن هذه السنوات لم تضع هدراً، ثم ضع خطة واضحة بناء على ماتملكه وماتود الوصول اليه ولاتنسى التقييم المستمر أثناء التنفيذ . تذكر دوماً أن الكثير من رواد الأعمال الناجحين كانت أخطائهم السابقة هي خطوتهم للنجاح وبالتوفيق.1 نقطة
-
توجد طريقتين لفعل ذلك، فإما أن تكتب ذلك بنفسك وهذه هي طريقة مختصرة لفعل ذلك: أولا تأكد من إصدارات البرامج، وهذه هي طريقة التأكد من اصدار php: $php_version=phpversion(); if($php_version<5) { $error=true; $php_error="PHP version is $php_version - too old!"; } بعد ذلك تأكد من عدم وجود أخطاء في الاتصال قواعد البيانات( معلومات الاتصال حصلنا عليها من المستخدم): $db_error=false; // try to connect to the DB, if not display error if(!@mysql_connect($_POST['dbhost'],$_POST['dbuser'],$_POST['dbpass'])) { $db_error=true; $error_msg="Sorry, these details are not correct. Here is the exact error: ".mysql_error(); } if(!$db_error and !@mysql_select_db($_POST['dbname'])) { $db_error=true; $error_msg="The host, username and password are correct. But something is wrong with the given database. Here is the MySQL error: ".mysql_error(); } البيانات التي ستحصل عليها من المستخدمين لقواعد البيانات ستكون مشابهة لهذه: // try to create the config file and let the user continue $connect_code="<?php define('DBSERVER','".$_POST['dbhost']."'); define('DBNAME','".$_POST['dbname']."'); define('DBUSER','".$_POST['dbuser']."'); define('DBPASS','".$_POST['dbpass']."'); ?>"; إذا استطعت كتابة هذه المعلومات إلى ملف الإعداد فإفعل ذلك، وإلا اجعل المستخدم يفعل ذلك: if(!is_writable("inc/db_connect.php")) { $error_msg="<p>Sorry, I can't write to <b>inc/db_connect.php</b>. You will have to edit the file yourself. Here is what you need to insert in that file:<br /><br /> <textarea rows='5' cols='50' onclick='this.select();'>$connect_code</textarea></p>"; } else { $fp = fopen('inc/db_connect.php', 'wb'); fwrite($fp,$connect_code); fclose($fp); chmod('inc/db_connect.php', 0666); } في النهاية أنشئ الجداول واملئها بالبيانات المطلوبة: // assuming you have DB established connection // and have the resource identifier in $db_link $q="DROP TABLE IF EXISTS `users`;"; mysqli_query($db_link,$q); $q="CREATE TABLE `users` ( `id` bigint(20) unsigned NOT NULL auto_increment, `username` varchar(100) NOT NULL default '', `level` varchar(100) NOT NULL default '', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8"; mysqli_query($db_link,$q); $q="INSERT INTO `users` (username, level) VAUES ('admin','admin');"; mysqli_query($db_link,$q); إذا لم تعجبك هذه الطريقة فيمكنك استخدام احدى سكربتات التثبيت الجاهزة مثل PHPAppInstaller وZZ/OSS Installer وغيرها. المصدر1 نقطة
-
كيف أقوم بعمل دراسة تسويقية لمعرفة هل سيتلقى مشروعي اقبالا عليه أم لا؟1 نقطة
-
تُعتبر دراسة السوق واحدة من أهم الخطوات التي تُحدد مدى نجاح العمل أو المنتج إن لم نقل أنها الأهم على الإطلاق. تبدأ دراسة السوق بجمع البيانات الخاصة بالعملاء (الحاليين لمنتجات مُنافسة أو مُشابهة، أو المتوقعين لمنتج جديد)، هذه البيانات تتعلق بالسنّ، الدخل، المهنة، مكان الإقامة. ثم تبدأ بدراسة أنماط الشراء، وهي شيء أعمق من جمع بيانات العملاء، ما هي العادات الشرائية لدى السوق، الاتجاهات العامة له، الانطباعات الموجودة لديه عن منتج ما، دوافعه بالشراء، قدرته على الشراء، المواصفات التي يحبها في المنتج الحالي، المواصفات التي يبحث عنها ولا يجدها، المواصفات الموجودة في منتجين ويرغب بالجمع بينها في منتج واحد إلخ .. هذا ما يُسمى بنمط الشراء. تحديد حجم الطلب الحالي (حال وجود منتجات مُشابهة) ودراسة حركة التغيّر (صعودًا أو هبوطًا) والعوامل المؤثرة عليها. ثم تحديد حجم الطلب اللازم لتغطية تكاليف المنتج والبدء بالربح.. وهكذا يمكن باستمرار قياس الأداء والعمل. يمكن بناء هيكل للدراسة على الشكل التالي: نقاط القوة، نقاط الضعف، الفرص، التحديات وهذا بالنسبة لمنتجك، والمنتجات الحالية بالتوفيق1 نقطة
-
نجاح الفيسبوك يرجع بالتأكيد إلى عوامل كثيرة، منها: - الفكرة وقدرتها على التوسّع؛ الفيس بوك قدّم مُنتجًا موجهًا أساسًا إلى شريحة قابلة للتوسّع بشكل كبير. خدمات التدوين (سواء المطوّلة منها مثل بلوغر، ووردبريس، MySpace سابقًا، أو القصيرة منها مثل تويتر) موجّهة إلى فئة مُحددة.. كم من الناس لديه موهبة في صياغة الأفكار وكتابتها بأسلوب جذاب؟ بالتأكيد هذه شريحة ليست بالقليلة لكنها في نهاية المطاف مُحدودة بسقف لا يُمكن تجاوزه.. نعم المدونات (مثل تمبلر) حاولت أن تُوسّع هويتها وأن تُحفّز المشتركين على مشاركة الصور، الاقتباسات، الروابط، مقاطع الفيديو.. إلى جانب النصوص، لكن ذلك أتى في مرحلة متأخرة، بعد أن أكلت شبكات مثل الفيسبوك السوق بالكامل. فيسبوك استطاع توسيع نفسه باستمرار، منذ خروجه عن هويته الأولى الموجهة لطلاب الجامعات، وإلى اليوم، ينجح الفيسبوك بإعادة تشكيل وتوسيع خدماته حسب توجهات السوق واحتياجاته. ولذا يعمل الفيسبوك على إضافة خدمات مثل الفيديو، المقالات الفورية، الصور، الملاحظات، المناسبات، وأي شيء يرغب به المستخدمون.. - الإعجاب، بمشاركتك ضمن الفيسبوك أنت تحصل على جائزة مُباشرة وفورية "حصد الإعجابات"، هناك الكثير من الدراسات النفسية والاجتماعية التي تتحدّث عن أثر هذا الزر الصغير في تشجيع الآخرين على المشاركة لنيل الإعجاب، وانعكاس ذلك على المزاج الشخصي.. مجددا بعض الخدمات حاولت تقديم أفكار مشابهة لكن ذلك كان تقليدا لنجاح الفيسبوك - تقديم الفكرة في منتج تقني سهل الاستخدام، فعّال، لا تنسَ عدد مرات توقف خدمة مثل تويتر، أو صعوبة إدارة مدونة مثل ووردبريس.. فيسبوك تجاوز ذلك، واجهة بسيطة، ومنتج ناجح من الناحية الفنية والتقنية1 نقطة
-
بالإضافة لموقع خمسات و مستقل فتوجد مواقع أجنبية أيضا يمكنك التسجيل فيها والعمل من خلالها وأشهرها: upwork elance freelance تبحث داخل هذه المواقع حسب تخصص العمل،وبها بعض رواد الأعمال العرب أي أنه يمكنك العمل في مشاريع باللغة العربية أو مع أشقاء عرب.1 نقطة