-
المساهمات
6975 -
تاريخ الانضمام
-
تاريخ آخر زيارة
-
عدد الأيام التي تصدر بها
218
نوع المحتوى
ريادة الأعمال
البرمجة
التصميم
DevOps
التسويق والمبيعات
العمل الحر
البرامج والتطبيقات
آخر التحديثات
قصص نجاح
أسئلة وأجوبة
كتب
دورات
كل منشورات العضو Wael Aljamal
-
نضيف الشيفرات البرمجية من خلال محرر الأكواد الملاحظات: دالة findProfile لا تعيد قيمة return لاتقوم بتمرير قيمة لملف العرض return view('livewire.search', ['results' => $results]);
- 3 اجابة
-
- 1
-
- 4 اجابة
-
- 1
-
يمكننا إضافة الخواص للكائنات بشكل ديناميكي، مثل المرور على أول غرض، وإسناد كل من المفتاح و القيمة للغرض الآخر، و بالتالي عملية بناء الغرض الجديد بنفس القيم. <?php // كائن أول $x = new stdClass(); // كائن ثاني $y = new stdClass(); // استنساخ أول كائن لكتئن جديد $z = clone $x; // المرور على الكائن الثاني و قراءة الثنائيات و إسنادها ل الكائن الجديد foreach($y as $k => $v) {$z->$k = $v;} كما يمكننا عمل كائن جديد فيه خاصيتين كل منها عبارة عن كائنات مراد دمجها، وبتخصيص دالة get__ يمكننا إعادة الخاصية من الكائن الجديد من إحدى خاصيتيه <?php // تعريف صنف جديد class Compositor { // كل خاصية عبارة عن كائن مراد دمجه private $obj_a; private $obj_b; // الدالة البانية تسند غرضين لخواص الكائن public function __construct($obj_a, $obj_b) { $this->obj_a = $obj_a; $this->obj_b = $obj_b; } // من خلال الدالة السحرية public function __get($attrib_name) { // في حال كلنت الخاصية من أول كائن نعيدها if ($this->obj_a->$attrib_name) { return $this->obj_a->$attrib_name; } // وإلا ستكون في الثاني else { return $this->obj_b->$attrib_name; } } }
- 2 اجابة
-
- 1
-
في علاقة الكثير لكثير، كل سجل أو وثيقة تحوي ثنائية أو أكثر من الخواص GameTeam team_1_id team_2_id date score .. 1 1 2 2 2 3 3 2 3 لاحظ أن لكل مباراة معلوماتها الكاملة، من الفرق المشاركة و التاريخ و النتيجة .. أي سطر في الجدول يعبر عن مباراة
- 10 اجابة
-
- 1
-
سبب الخطأ هو عدم تضمين صنف الخواص DataTypes من مكتبة sequelize const { DataTypes , sequelize } = require("sequelize"); DataTypes.INTEGER هنا تصبح تعمل ربما تختلف حسب إصدار المكتبة لديك. يمكنك تعريف الجدول الوسيط من خلال نموذج مثل أي نموذج آخر.. ويتم الربط من خلال تمريراسم النموذج للنماذج المرتبطة به من خلال through وتأكد من تطابق الأسماء مثلاً في المباراة أكثر من فريق، وكل فريق يلعب أكثر من مباراة تكون العلاقة: const GameTeam = sequelize.define('GameTeam', { id: { type: DataTypes.INTEGER, primaryKey: true, } }); Team.belongsToMany(Game, { through: GameTeam }); Game.belongsToMany(Team, { through: GameTeam }); sequelize many-to-many
- 10 اجابة
-
- 1
-
هل بدأت بكتابة البرنامج؟ يمكننا مساعدتك في إصلاح الأخطاء ليكن لديك ملف اتصال مع قاعدة البيانات فيه الشيفرة: <?php // بيانات اتصال مع الخادم $servername = "localhost"; $username = "username"; $password = "password"; $dbname = "myDB"; // انشاء اتصال $conn = mysqli_connect($servername, $username, $password, $dbname); // تحقق من الاتصال if (!$conn) { die("Connection failed: " . mysqli_connect_error()); } ?> يتم تضمين الجزء السابق في جميع ملفات PHP التي تتخاطب مع قاعدة البيانات لعرض بيانات تصنيف معين، نمرر له id من خلال النقر على رابط <a href="page.php?id=123"> الصفحة 123 </a> ثم لجلب بيانات معينة نقوم بالتالي: <?php // قراءة التصنيف من المستخدم $id = $_GET['id']; // تجهيز الاستعلام $sql = "SELECT id, name FROM category where id = $id "; // تنفيذ الاستعلام $result = mysqli_query($conn, $sql); // في حال وجود نتائج if (mysqli_num_rows($result) > 0) { // طباعة النتائج سطر بسطر while($row = mysqli_fetch_assoc($result)) { echo "id: " . $row["id"]. " - Name: " . $row["name"]. "<br>"; } } else { echo "0 results"; } mysqli_close($conn); لإرسال بيانات للمخدم، نستخدم HTML Form method=post أي نريد إرسال استمارة فيها ملفات action=page.php اسم صفحة التي تعالج الطلبية حقول إدخال <form method="post" action="page.php"> <input type="text" name="id" value="1"/> <input type="text" name="name" value="cat_name"/> <button type="submit">Submit</button> </form> التعامل مع النماذج: يمكنك الاستفادة من مقالة SQL التالية لتنفيذ استعلامات الإضافة و الحذف: شرح استخدام واجهة mysqli: والتعامل مع الملفات: يمكنك الاستفادة من توثيق حسوب موسوعة حسوب PHP عنصر الإدخال input ننتظر كتابتك لبعض الشيفرات ثم طرح سؤال محدد أكثر. قدمت إجابة لجلب بيانات المنتجات التي لها تصنيف معين
-
لإنشاء ملف والكتابة عليه، يمكننا استخدام الصنف File Writer و الدالة write import java.io.FileWriter; // تضمين FileWriter class import java.io.IOException; // تضمين IOException class للتعامل مع الأخطاء public class WriteToFile { public static void main(String[] args) { try { // اسم الملف تعريف كائن للكتابة على الملف FileWriter myWriter = new FileWriter("filename.txt"); myWriter.write("نكتب نص في الملف!"); myWriter.close(); System.out.println("تم الكتابة بنجاح"); } catch (IOException e) { System.out.println("حدثت مشكلة"); e.printStackTrace(); } } } للقراءة من ملف: import java.io.File; // تضمين File class import java.io.FileNotFoundException; // تضمين class to تعامل مع أخطاء import java.util.Scanner; // تضمين Scanner class to قراءة ملفات نصية public class ReadFile { public static void main(String[] args) { try { // اسم الملف إنشاء غرض يمثل الملف File myObj = new File("filename.txt"); // تمرير الملف للماسح Scanner myReader = new Scanner(myObj); // طالما يوجد سطر في الملف while (myReader.hasNextLine()) { // قراءة السطر String data = myReader.nextLine(); // طباعة البيانات System.out.println(data); } myReader.close(); } catch (FileNotFoundException e) { System.out.println("حدث خطأ."); e.printStackTrace(); } } } بالنسبة لحذف بيانات من ملف، نقرأ الملف ونخزنه ضمن سلسلة نصية، ثم نعدل عليها (مثلاً عمل فلترة) ثم نعيد كتابة البيانات يمكنك الاستفادة من السؤال التالي: وتأكدي من مسار الملف بأن يكون قابل للاستخدام من البرنامج مثل المشكلة مقالة:
-
نعم بالطبع يمكنك تصميم صفحات وتركيبها على أي بيئة ويب تدعم ذلك، ومنها ووردبريس. ولكن من الأفضل لك تعلم كيفية تخصيص واجهات ووردبريس، وتركيب التصاميم والثيمات وتعديلهم، من خلال مشاهدة أي دورة تشرح ذلك. عمل تصاميم ووردبريس هي تشبه عملية ربط الصفحة مع PHP. مع العلم، ووردبريس مجاني ومتوفر للتعلم. يمكن بيع التصاميم والثيمات على موقع خمسات او بيكاليكا.
-
نعم صحيح، يمكنك اعتبار تطبيق Electron واجهة أمامية يعمل استعلامات من خادم ويب ويمكن أن يتصل عليه من خلال API
- 3 اجابة
-
- 1
-
حاول إعادة صياغة السؤال و توضيحه، يمكنك كتابة إجابة و حل للمشكلة إن عرفت
-
الأمر غير مرتبط بلغة برمجة، حيث أن مفهوم تعدد التجار، هو أن كل مستخدم يمكنه نشر منتجات و بضائع و خدمات و يتم عرضهم على الزبائن، وبعد أن يشتري الزبون يتم تحويل رصيد الأموال لحساب التاجر. أي يمكن عمل المتجر من خلال django أو لارافل أو غيره أي الموضوع يتعلق بالبرمجة، و بعض شروط عمل المتجر الإلكتروني. يوجد منصات جاهزة تساعدك على إطلاق متجرك مثل: Shopify ماجنتو BigCommerce وOpenCart و برمجيات: WooCommerce من ووردبريس مقالة من مدونة مستقل: دليلك لاختيار أفضل منصات التجارة الإلكترونية
-
بالنسبة للخواص المحمية Protected يصطلح تسميتها بداية مع underscore _ و يمن حماية القيم من التعديل بتوفر دالة get فقط، و عدم وضع set ضمن تعريف الصنف. حماية الخواص من قيم خاطئة class Person { _age = 0; set setAge(value) { if (value < 0) { value = 0; } this._age = value; } get getAge() { return this._age; } constructor(age) { this._age = age; } } let p = new Person(100); // تعديل العمر coffeeMachine.waterAmount = -10; // _age يصبح 0, وليس -10 مثال آخر: حماية الخواص من الإسناد بشكل تام (منع إسناد قيمة جديدة) class Person { // ... constructor(value) { this._age = value; } get age() { return this._age; } } let p = new Person(100); alert(`Age is: ${p.age} Year`); // Age is: 100 p.age = 25; // Error (no setter) لا يتم تطبيقها console.log(p.age) // 100
-
إن المنطق وراء ربط عدة مستخدمين مع بعضهم يكمن في أن لهم جميعاً قاعدة بيانات واحدة، ويوجد بيانات فيها مشتركة (على الأقل قابلة للقراءة منهم جميعاً). أي حتى يصبح تطبيقك قابل لتبادل البيانات مع غير مستخدمين، سيتوجب عليك الحصول على قاعدة بيانات على الانترنت ومخدم لها عنوان انترنت مشترك يتصل به جميع المستخدمين. يوجد الكثير من قواعد البيانات، ولنفرض أن لديك قاعدة من نوع MySQL لتطبيقك على استضافة. ما تحتاج عمله في تطبيقك هو تنصيب الوحدة الموافقة لقاعدة البيانات تلك، ثم إجراء العمليات: تهيئة الاتصال مع قاعدة البيانات تنفيذ الاستعلامات من قبل المستخدمين تنصيب الحزمة الخاصة ب mysql npm install mysql ثم تضمين الوحدة، و تهيئة الاتصال و عمل استعلام var mysql = require('mysql'); // إضافة معلومات المستخدم للاتصال على قاعدة البيانات var connection = mysql.createConnection({ host : 'localhost', user : 'root', password : null, // password database : 'my-database-name' }); // الاتصال connection.connect(function(err) { // حدوث خطأ if(err){ console.log(err.code); console.log(err.fatal); } }); // تعريف الالة التي تجلب الاستعلام function get_10_Rows(callback){ // استعلام افتراضي $query = 'SELECT * FROM `Tasks` LIMIT 10'; connection.query($query, function(err, rows, fields) { if(err){ console.log("An error ocurred performing the query."); // حصول خطأ console.log(err); return; } console.log("Query succesfully executed", rows); // نجاح الاستعلام }); // اغلاق الاتصال connection.end(function(){ }); } ناتج الاستعلام يعود من خلال المتغير rows. <script> // عند النقر على زر معين document.getElementById('action-btn').addEventListener('click', function(){ // استدعاء دالة جلب أول 10 مهام // rows فيها النتيجة get_10_Rows(function(rows){ var html = ''; rows.forEach(function(row){ html += '<tr>'; html += '<td>'; html += row.id; html += '</td>'; html += '<td>'; html += row.name; html += '</td>'; html += '</tr>'; console.log(row); }); // حقن النتيجة في الجدول document.querySelector('#table > tbody').innerHTML = html; }); },false); </script> كانت هذه طريقة التواصل مع قاعدة بيانات مباشرة، يمكنك عمل خادم ويب مثل EXPRESS والاتصال معه عبر API ليعمل عبر الشبكة المحلية، يتوجب الاتصال على IP الحاسوب المحلي الذي فيه مخدم قواعد البيانات mysql , وضعه مكان host في جزء تهيئة الاتصال مع تحديد منفذ 3306. var connection = mysql.createConnection({ host : ' 192.168.1.2', IP port : '3306', MySQL port
- 3 اجابة
-
- 2
-
سبب المشكلة هو أن محدد الوصول الذي تستخدمه في جيكويري سيجلب أول عنصر له id أو class معين. الحل، وطالما أنك تحدد النقر على الأيقونة، سوف نجلب العنصر الذي يليها var Favourite=$(this).next('#favouriteInput').attr('value'); var Item=$(this).next('.item').attr('value'); var User=$(this).next('.user').attr('value'); استخدمت next لأن ترتيب شيفرة HTML هي كذلك. نريد العنصر التالي الذي له الصنف كذا .. this سوف تدل على العنصر الخاص بالأيقونة الذي تم النقر عليه.
- 1 جواب
-
- 1
-
من الواضح أنك وضعت المفتاح بطريقة خطأ، أرجو اتباع هذه الخطوات: expo camera مكون جاهز يمكنك استعماله وفيها خاصية onBarCodeScanned لقراءة رمز الاستجابة السريعة { "expo": { "name": "appname", "slug": "appslug", "privacy": "unlisted", "sdkVersion": "32.0.0", "platforms": [ "ios", "android" ], "version": "2.0.36", "orientation": "portrait", "icon": "./assets/icon.png", "splash": { "image": "./assets/splash.png", "resizeMode": "contain", "backgroundColor": "#FFFFFF" }, "updates": { "fallbackToCacheTimeout": 0 }, "assetBundlePatterns": [ "**/*" ], "ios": { "supportsTablet": true, "bundleIdentifier": "gl.js.app", "infoPlist": { "NSCameraUsageDescription": "This app uses the camera to let user put a photo in his profile page." } }, "android": { "package": "gl.js.app", "permissions": [ "CAMERA", "WRITE_EXTERNAL_STORAGE", "CAMERA_ROLL" ], "versionCode": 36 } } } لاحظ الصلاحيات لأندرويد "android": { "package": "gl.js.app", "permissions": [ "CAMERA", "WRITE_EXTERNAL_STORAGE", "CAMERA_ROLL" ], "versionCode": 36 }
-
صحيح، إن expo يقوم بتوليد هذه الملفات لاحقاً، أي طريقة بناء المشروع وهرميته مختلفة قليلاً، يمكنك إضافة الصلاحيات Permissions من خلال app.json ضمن تطبيقات EXPO و التوثيق التالي يشرح الأمر expo permissions #android expo config permissions حيث أن الطريقة هي عمل مفتاح ضمن app.json بقيمة permissions ونمرر لها مصفوفة بالصلاحيات التي نحتاجها { permissions: [ "CAMERA", "ACCESS_FINE_LOCATION" ] }
- 15 اجابة
-
- 1
-
كما نشر الاستاذ عبد اللطيف ايمش: يمكنك أن تجد معلومات تحديث باقي الدورات من الرباط: تحديثات دورات أكاديمية حسوب
- 1 جواب
-
- 1