لوحة المتصدرين
المحتوى الأكثر حصولًا على سمعة جيدة
المحتوى الأعلى تقييمًا في 04/09/21 في كل الموقع
-
لأن الدوال و التوابع الخاصة بالمكتبة تمت إضاتها إلى إطار العمل express نفسه لذلك لم نعد نحتاج لاستخدام المكتبة الآن. و نقوم باستخدام التوابع الخاصة بها كما يلي: app.use(express.json()); بدلًا من: app.use(bodyParser.json());2 نقاط
-
سلام عليكم السؤال في php مع قواعد بيانات mysql الان انا عامل جدول للعملاء فيه بياناتتهم و عامل جدول للاوردرات اللي هي المغروض مرتبطة بالعميل يعني من صفحة عميل باختار اضافة اوردر جديد و بيكون عندي اللينك بالصيغة دي link/order.php?id=1 يبقى الاوردر رقم 1 تلقائي اتسجل للعميل اللي اتفتح الاوردر من صفحته و ليكن عميل 20 مثلا و نفس الفكرة دخلت صفحة عميل رقم 3 و اخترت اوردر جديد هايتسجل باسم اوردر رقم 2 تابع للعميل رقم 3 السؤال الان لما من المتصفح اغير رقم ال ID و احط رقم بعيد عن الواقع بيفتح معايا عادي جدا صفحة الاوردر يعني انا عندي عالسيستيم 5 اوردرات بس لو كتبت في المتصفح 100 عادي يفتح صفحة الاوردر و يفضل متخزن في الداتابيز لحد ما المستخدم يفضل يملى 99 اوردر بشكل طبيعي و ييجي عالاوردر 100 يعمل assign للعميل انا عاوز اقفل الثغرة دي و اخليه لو كتب الاي دي اوتوماتيك يرفض يفتحه يا رب يكون الاستفسار واضح1 نقطة
-
سوف نستعرض في هذا الدرس بعض الأمثلة على كيفية التعامل مع خادم العميل (Client server). مثال Hello TCP Client هذا البرنامج مكمّل لبرنامج Hello TCP Server، ويمكنك تشغيل أي منهما للتحقق من صلاحيتهما. انظر شيفرة المثال فيما يلي: #include <cstring> #include <iostream> #include <string> #include <arpa/inet.h> #include <netdb.h> #include <sys/socket.h> #include <sys/types.h> #include <unistd.h> int main(int argc, char *argv[]) { سنأخذ هنا عنوان IP ورقم بوابة كوسائط لبرنامجنا، نتابع … if (argc != 3) { std::cerr << "Run program as 'program <ipaddress> <port>'\n"; return -1; } auto &ipAddress = argv[1]; auto &portNum = argv[2]; addrinfo hints, *p; memset(&hints, 0, sizeof(hints)); hints.ai_family = AF_UNSPEC; hints.ai_socktype = SOCK_STREAM; hints.ai_flags = AI_PASSIVE; int gAddRes = getaddrinfo(ipAddress, portNum, &hints, &p); if (gAddRes != 0) { std::cerr << gai_strerror(gAddRes) << "\n"; return -2; } if (p == NULL) { std::cerr << "No addresses found\n"; return -3; } ينشئ استدعاء ()socket قناة socket جديدة ويعيد الواصف الخاص بها … int sockFD = socket(p->ai_family, p->ai_socktype, p->ai_protocol); if (sockFD == -1) { std::cerr << "Error while creating socket\n"; return -4; } لاحظ عدم وجود استدعاء ()bind كما في برنامج Hello TCP Server، فذلك غير ضروري رغم أنك تستطيع استدعاءها، لأنه لا يلزم العميل أن يكون له رقم منفذ (port number) ثابت، لذا فإن الاستدعاء التالي سيربطه برقم عشوائي. سيحاول استدعاء ()connect أن ينشئ اتصال TCP بالخادم المحدد … int connectR = connect(sockFD, p -> ai_addr, p -> ai_addrlen); if (connectR == -1) { close(sockFD); std::cerr << "Error while connecting socket\n"; return -5; } std::string reply(15, ' '); هنا يحاول استدعاء ()recv الحصول على إجابة من الخادم، لكن الإجابة قد تحتاج إلى عدة استدعاءات لـ ()recv قبل أن تُستقبَل بالكامل، سنحاول حل هذا لاحقًا … auto bytes_recv = recv(sockFD, &reply.front(), reply.size(), 0); if (bytes_recv == -1) { std::cerr << "Error while receiving bytes\n"; return -6; } std::cout << "\nClient recieved: " << reply << std::endl; close(sockFD); freeaddrinfo(p); return 0; } مثال Hello TCP Server نقترح أن تلقي نظرة سريعة على كتاب Beej's Guide to Network Programming، والذي سيفسر لك معظم المفاهيم المُستخدَمة هنا. سننشئ خادم TCP بسيطًا هنا يعرض الجملة "Hello World" لكل الاستدعاءات الواردة، ثم يُغلقها. كما أنّ الخادم سيتواصل مع العملاء تكراريًا (iteratively)، أي عميلًا واحدًا في كل مرّة. سنشغّل الخادم عبر منفذ محدّد، لذلك سنأخذ رقم المنفذ كوسيط. انظر: #include <cstring> // sizeof() #include <iostream> #include <string> الترويسات التالية من أجل ()getaddrinfo و ()socket والدوال الصديقة … #include <arpa/inet.h> #include <netdb.h> #include <sys/socket.h> #include <sys/types.h> #include <unistd.h> // close() int main(int argc, char *argv[]) { هنا نتحقق مما إذا كان رقم المنفذ قد أُعطي أم لا … if (argc != 2) { std::cerr << "Run program as 'program <port>'\n"; return -1; } auto &portNum = argv[1]; في السطر التالي، عدد الاتصالات المسموح بها في طابور الوارد … const unsigned int backLog = 8; نحتاج إلى مؤشرين، res سيأخذ القيمة وp سيكرر عليها … addrinfo hints, *res, *p; memset( &hints, 0, sizeof(hints)); // راجع الكتاب لمزيد من التوضيحات hints.ai_family = AF_UNSPEC; // التي ستستخدم IP لا تحدّد بعدُ نسخة في السطر التالي، يشير SOCK_STREAM إلى TCP … hints.ai_socktype = SOCK_STREAM; hints.ai_flags = AI_PASSIVE; int gAddRes = getaddrinfo(NULL, portNum, &hints, &res); if (gAddRes != 0) { std::cerr << gai_strerror(gAddRes) << "\n"; return -2; } std::cout << "Detecting addresses" << std::endl; unsigned int numOfAddr = 0; يحرص طول ipv6 على إمكانية تخزين عنواني ipv4/6 في هذا المتغير، وبما أن ()getaddrinfo قد أعطتنا قائمة من العناوين، فسنكرر عليها ونسأل المستخدم أن يختار أحدها لربطها بالبرنامج … char ipStr[INET6_ADDRSTRLEN]; for (p = res; p != NULL; p = p -> ai_next) { void *addr; std::string ipVer; // ipv4 إن كان العنوان من النوع if (p -> ai_family == AF_INET) { ipVer = "IPv4"; sockaddr_in *ipv4 = reinterpret_cast < sockaddr_in *> (p -> ai_addr); addr = &(ipv4 -> sin_addr); ++numOfAddr; } // ipv6 إن كان العنوان من النوع else { ipVer = "IPv6"; sockaddr_in6 *ipv6 = reinterpret_cast < sockaddr_in6 * > (p -> ai_addr); addr = &(ipv6 -> sin6_addr); ++numOfAddr; } // من الشكل الثنائي إلى الشكل النصي IPv4/6 تحويل عناوين inet_ntop(p -> ai_family, addr, ipStr, sizeof(ipStr)); std::cout << "(" << numOfAddr << ") " << ipVer << " : " << ipStr << std::endl; } // في حال عدم العثور على أيّ عنوان if (!numOfAddr) { std::cerr << "Found no host address to use\n"; return -3; } // اسأل المستخدم أن يختار عنوانا std::cout << "Enter the number of host address to bind with: "; unsigned int choice = 0; bool madeChoice = false; do { std::cin >> choice; if (choice > (numOfAddr + 1) || choice < 1) { madeChoice = false; std::cout << "Wrong choice, try again!" << std::endl; } else madeChoice = true; } while (!madeChoice); p = res; // كواصف socketFD لننشئ قناة جديدة، ستُعاد // تعيد هذه الاستدعاءات في العادة القيمة -1 في حال وقوع خطأ ما int sockFD = socket(p->ai_family, p->ai_socktype, p->ai_protocol); if (sockFD == -1) { std::cerr << "Error while creating socket\n"; freeaddrinfo(res); return -4; } // لنربط العنوان بالقناة التي أنشأناها للتو int bindR = bind(sockFD, p->ai_addr, p->ai_addrlen); if (bindR == -1) { std::cerr << "Error while binding socket\n"; // في حال وقوع خطأ، احرص على إغلاق القناة وتحرير الموارد close(sockFD); freeaddrinfo(res); return -5; } // وأخيرا، ابدأ بالإنصات إلى الاتصالات الواردة عبر قناتنا int listenR = listen(sockFD, backLog); if (listenR == -1) { std::cerr << "Error while Listening on socket\n"; // في حال وقوع خطأ، احرص على إغلاق القناة وتحرير الموارد close(sockFD); freeaddrinfo(res); return -6; } // البنية كبيرة كفاية لتحمل عنوان العميل sockaddr_storage client_addr; socklen_t client_addr_size = sizeof(client_addr); const std::string response = "Hello World"; فيما يلي حلقة لا نهائية للتواصل مع الاتصالات الواردة، وستتعامل معها بالتتابع أي واحدة في كل مرة. كذلك فيما يلي من الأمثلة سنستدعي ()fork لكل اتصال مع العملاء … while (1) { // يعيد واصف قناة جديد accept استدعاء int newFD = accept(sockFD, (sockaddr *) &client_addr, &client_addr_size); if (newFD == -1) { std::cerr << "Error while Accepting on socket\n"; continue; } فيما يلي، يعيد استدعاء send البيانات التي مرَّرتها أنت كمعامِل ثاني، وطولها كمعامل ثالث، ويعيد عدد البِتَّات المرسلة فعليًا … auto bytes_sent = send(newFD, response.data(), response.length(), 0); close(newFD); } close(sockFD); freeaddrinfo(res); return 0; } سيعمل البرنامج على النحو التالي: Detecting addresses (1) IPv4 : 0.0.0.0 (2) IPv6 : :: Enter the number of host address to bind with: 1 هذا الدرس جزء من سلسلة دروس عن C++. ترجمة -بتصرّف- للفصل Chapter 127: Client server examples من كتاب C++ Notes for Professionals1 نقطة
-
باستخدام Pulk في لارافل يمكنك تنفيذها كالتالي: $sellers = Seller::with('user')->get()->pluck('user.first_name', 'id') ثم المرور على المتغيّر sellers وطباعة الحقول اللازمة منه. وأيضاً يوجد طريقة أخرى عن طريق استخدام join مع pulk: $s = Seller::join('users', 'sellers.user_id', '=', 'users.id') ->pluck('sellers.id', 'users.id') ->all(); عندها سيتم الدمج بين المستخدمين والبائع عن طريق الرقم الفريد المعرّف id. والحصول على مصفوفة بشكل مشابه للتالي: [ 'seller_1' => 'user_1', 'seller_2' => 'user_2', 'seller_3' => 'user_3', .... ]; كما ويمكنك بشكل مباشر تعريف العلاقة بداخل المودل: Class Seller extends Model { ... public function user() { return $this->hasOne(user::class, 'id') ->select('id', 'first_name'); } } ويمكنك تغيير نوع العلاقة إلى hasMany أو النوع الذي يناسب مشروعك1 نقطة
-
يمكنك إزالة التحقق من CSRF في لارافل من خلال طريقتين: لبعض من المسارات routes محددة، يمكنك التوجه إلى App\Http\Middleware\VerifyCsrfToken ، ثم إضافة المسارات إلى except التي ترغب بتجنّب التحقق من csrf فيها كالتالي: $except = ['/test','/hello'] وأيضاً يمكنك إيقاف عمله بشكل كلي في كل المشروع من خلال app/http/Kernel.php عن طريق تعليق السطر التالي: // \App\Http\Middleware\VerifyCsrfToken::class, ويوجد أيضاً طريقة أخرى عن طريق السماح لكل المسارات بالدخول دون التحقق من csrf أيضاً من خلال \App\Http\Middleware\VerifyCsrfToken.php كالتالي: protected $except = [ '*', ]; ولكن ينصح بعدم إلغاء csrf كونها ميزة هامة من المزايا التي تقدمها لارافل فيما يخص الحماية وأمن التطبيقات. وإلغائها قد يسمح بالخروقات الأمنية للمشروع في حال لم يتم معالجة ذلك بطريقة أخرى.1 نقطة
-
سوف يكوم الكود الخاص بك بهذا الشكل include("includes/db.php"); $title = "إضافة أوردر"; $order_id = $_GET['id']; $uSql = "SELECT * FROM orders WHERE id='$order_id'";// INNER JOIN orders ON orders.client_id = clients.id"; $result = $conn->query($uSql) if ($result->num_rows > 0){ $order = $result->fetch_assoc() ?? false; $result->free(); } else { echo "0 results"; }1 نقطة
-
كيف يمكن عمل Form بحيث تحتوي على خيارين مثلا ( مستخدم أو مقدم خدمة )، وعند إدخال مستخدم لا يظهر أي شيء إضافي، لكن إذا تم اختيار مقدم خدمة، تظهر مربعات إدخال إضافية مثل: اسم الخدمة و...1 نقطة
-
حتعمل كالتالي أنه تضيف Lists لكل الخيارات التي تريدها final List<String> persons = ['User', 'Service']; ثم تنشأ متغير وليكن باسم String selectedPersons; ثم ستنشأ زر الخيارات بهذا الشكل body: Center( child: DropdownButton<String>( hint: Text('Country'), value: selectedPersons, items: persons.map((String value) { return DropdownMenuItem<String>( value: value, child: Text(value), ); }).toList(), onChanged: onChangedCallback, ), ), ثم تنشأ دالة onChangedCallback بهذا الشكل void onChangedCallback(person) { if (person == 'User') { /// } else if (person == 'Service') { /// } else { /// } setState(() { // }); }1 نقطة
-
اشكرك اخي ممكن توضيح عالكود بتاعي مع الشكر include("includes/db.php"); $title = "إضافة أوردر"; $order_id = $_GET['id']; $uSql = "SELECT * FROM orders WHERE id='$order_id'";// INNER JOIN orders ON orders.client_id = clients.id"; if ($result = $conn->query($uSql)){ $order = $result->fetch_assoc() ?? false; $result->free(); }1 نقطة
-
حتعمل تحقق والتأكد من وجود id المضاف في الرابط انه في قاعدة البيانات أو لا و تقدر تعمل بعدها شرط صغير بحيث إذا موجود يعرض مش موجود يحوله لنص أو لصفحة خطأ كالتالي <?php $servername = "localhost"; $username = "username"; $password = "password"; $dbname = "myDB"; // Create connection $conn = new mysqli($servername, $username, $password, $dbname); // Check connection if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); } $id = $_GET['id']; $sql = "SELECT id, firstname, lastname FROM MyGuests WHERE id=$id"; $result = $conn->query($sql); if ($result->num_rows > 0) { while($row = $result->fetch_assoc()) { echo "id: " . $row["id"]. " - Name: " . $row["firstname"]. " " . $row["lastname"]. "<br>"; } } else { echo "0 results"; } $conn->close(); ?> الكود مجرد مثال.1 نقطة
-
حاول الحلين التاليين: git checkout --orphan newBranch git add -A # Add all files and commit them git commit -am "Clean Repo" git branch -D master # Deletes the master branch git branch -m master # Rename the current branch to master git push -f origin master # Force push master branch to github أو: git push --set-upstream origin main أو git push --set-upstream origin master1 نقطة
-
بإمكانك استخدم الكود التالي: def func(): num1 = int(input("enter the 1st number:")) # المستخدم يدخل العدد الأول num2 = int(input("enter the second number:")) # المستخدم يدخل العدد الثاني if num1>num2: # التحقق من أن العدد الأول أكبر من الثاني print("error") return l = [] for i in range(num1,num2+1): # توليد الأعداد المحصورة بين العددين l.append(i) for ele in l: # طباعة الترتيب الصحيح print(ele) for ele in reversed(l): # طباعة الترتيب المعكوس print(ele) func()1 نقطة
-
1 نقطة
-
لكل منصة أهميتها، لكن المهم هو أن أدرس السوق و أتعرف على الجمهور المستهدف و أين يتواجد و ما هي إهتماماته، ويمكننا بعد ذلك تحديد أولوياتنا واي المنصات سيكون لنا النصيب الأكبر من المجهود والميزانية.1 نقطة
-
يجب أن تقوم بالتطبيق على ما تعلمته خلال الدورة بالكامل من خلال عمل بعض الأعمال والمشاريع الخاصة بك، ووضع هذه المشاريع في معرض أعمالك في أحد المواقع أو رفعها على GitHub، إن لم يكن لديك أفكار لمشاريع حاليًا تستطيع أن تقوم بتطبيق فكرة مشروع من أحد مواقع العمل الحر مثل مستقل أو غيرها (مجرد تطبيق للمشروع لتضعه في معرض أعمالك وليس لتقدم على الوظيفة نفسها)، بعد القيام بعمل عدد من المشاريع المنفصلة والتي وضعت فيها كل مهاراتك سيمكنك أن تقوم بفتح حساب في أحد مواقع العمل الحر والبدء في إرسال عروض العمل على المشاريع التي يمكنك القيام بها. أنصحك أن تقدم عرض واحد أو عرضين كحد أقصى يوميًا. قد يتطلب من الأمر وقت طويل جدًا لتلقي أول عمل لك، خلال هذه الفترة عليك أن تطور من مهاراتك وأن تتابع المجال الذي تتخصص فيه من خلال قراءة المقالات ومعرفة آخر الأخبار الخاصة به. بالتوفيق.1 نقطة
-
بكل إختصار أفضل منصتين للتسويق الإلكتروني هما إنستقرام وفايسبوك. أقولها لك عن خبرة وتجارب عديدة1 نقطة
-
في الحقيقة ان كل المنصات في عالم الانترنت مهمة جدًا ولكن ينبغي ان تعرف اين يتواجد عملائك او عملاء الشركة التي تشتغل لها, فمثلًا اذا كنت تستهدف دول الخليج فمن غير الطبيعي ان تقوم بإطلاق اعلانك على منصة فيسبوك! ف اغلب إن لم يكن كل اهل الخليج يكونوا في انستقرام وسناب شات والسعودية بالتحديد يكونوا في تويتر , إن كنت تستهدف شركات كبرى فمن غير الطبيعي ان تقوم بإطلاق اعلانك في سناب شات فقط! ولكن ينبغي ان يتواجد اعلانك في كثير من المنصات وأهمها لينكد ان, وهكذا .. يجب عليك اولًا قبل ان تطلق اعلانك ان تسأل نفسك سؤالين ,احدهما اين هم عملائي؟ ومن هم عملائي المثاليين؟ ....1 نقطة
-
تتعدد المنصات كما تتعدد النيشات أو المجالات فكل منصة مختصة في مجال معين وطبيعة المنتوج والفئة المستهدفة لذلك1 نقطة
-
لقد قمت بفتح ملفات مشروعك و لم أجد في صفحة المسارات إلا التالي: Route::get('/', function () { return view('welcome'); }); //Route::get('posts/craete', function () { // return view('posts.craete'); //}); Route::get('/', function () { return view('welcome'); }); فكما تلاحظ يوجد فقط مسار مكرر للصفحة الرئيسية و مسار آخر تم تعليقه و بالتالي لن يعمل هذا المسار. إذا كنت تريد أن يعمل ذلك المسار قم بحذف التعليق و أجعله: Route::get('posts/create', function () { return view('posts.create'); }); لأنه لديك خطأ في كتابة الكلمة create. ثم قم بالذهاب إلى الرابط: posts/create إذا ظهرت معك الصفحة 404 عليك تنفيذ الأمر: php artisan route:clear لحذف الكاش الخاص بالمسارات. أو تنفيذ الأمر: php artisan optimize:clear لحذف كل الكاش. و في هذه الحالة إذا ذهبت إلى الرابط posts/create سيظهر معك الخطأ: View [posts.create] not found. أي أن صفحة العرض غير موجودة و بالتالي عليك إنشاؤها بنفس الإسم create.blade.php بداخل مجلد posts و الذي بدوره يكون داخل مجلد views.1 نقطة
-
أعتقد أن كل المنصات مهمة ويتوقف إستخدام المنصة على تواجد الجمهور المستهدف, فمثلا اذا كانت الجمهور المستهدف للسلعة او الخدمة يتواجدون على إنستجرام مثلا فيكون هو المنصة الأفضل لك. لذلك البداية والنهاية لتسويق أي سلعة أو خدمة يبدأ وينتهي عند الجمهور المستهدف وتحليل انماطه وإهتماماته لشكل جيد1 نقطة