اذهب إلى المحتوى

محمد_عاطف

الأعضاء
  • المساهمات

    9380
  • تاريخ الانضمام

  • تاريخ آخر زيارة

  • عدد الأيام التي تصدر بها

    133

كل منشورات العضو محمد_عاطف

  1. إن البرمجية حرفيا هي المستقبل فإن معظم الوظائف مستقبلا ستكون من نصيب البرمجة . والمجال حاليا يتطور سريعا بشكل فائق والسباق الومنافسة حاليا أصبحت شديدة . ومن المجالات الحالية والمستقبلية هي : الذكاء الإصطناعي AI تحليل البيانات data analysis. computer vision تطبيقات الويب تطبيقات الجوال تطبيقات سطح المكتب إنترنت الأشياء IoT . أما بالنسبة إلى لغات البرمجة فهي تختلف من كل مجال إلى أخر وهي تطور بشكل سريع أيضا و أصبح الآن لا يمكن الإقتصار على تعلم لغة واحدة فقط . ومن حيث اللغة التي تحتاج لتعلمها فهي تعتمد على مجال البرمجة الذي ترغب في التخصص فيه. على سبيل المثال: إذا كنت ترغب في تطوير تطبيقات الويب، فمن المفيد أن تتعلم لغات مثل JavaScript (وإطارات عمل مثل React أو Angular) و node js أو Python (مع إطارات عمل مثل Django أو Flask). أو php مع إطار عمل مثل Laravel إذا كنت تفضل تطوير تطبيقات الجوال، فقد تحتاج إلى تعلم Swift لتطبيقات iOS أو Kotlin لتطبيقات Android. وأيا كانت اللغة التي سوف تتعلمها لا بد من متابعة التعلم دائما و البحث عن الجديد الذى يتم نشره .
  2. الأمر بسيط وهو كتابة شرط لإسم المسار هكذا : <?php if ($_SERVER["REQUEST_METHOD"] == "POST") { $option = $_POST["option"]; if ($option != "inf1" || $option != "inf2") { echo "من فضلك إختر خيار صحيح"; die(); } $path = ($option == "inf1") ? "img/" : "img2/" ; $targetFile = $path . basename($_FILES["image"]["name"]); if ($_FILES["image"]["size"] > 2000000) { echo "عذراً، حجم الملف كبير جداً."; die(); } // الاتصال بقاعدة البيانات $servername = "localhost"; $username = "root"; $password = ""; $dbname = "db_name"; $conn = new mysqli($servername, $username, $password, $dbname); if ($conn->connect_error) { die("فشل الاتصال: " . $conn->connect_error); } if (move_uploaded_file($_FILES["image"]["tmp_name"], $targetFile)) { $sql = "INSERT INTO table_name ($option) VALUES ('$targetFile')"; if ($conn->query($sql) === TRUE) { echo "تم رفع الملف بنجاح"; } else { echo "عذراً، حدث خطأ أثناء رفع الملف."; die(); } $conn->close(); } else { echo "عذراً، حدث خطأ أثناء رفع الملف."; } } وهذا السطر هو ما سيقوم بتنفيذ المهمة $path = ($option == "inf1") ? "img/" : "img2/" ; لاحظ هنا قمنا بإنشاء متغير يسمى path وهو خاص بمسار الصور وقمنا بالمقارنة مع المتغير option وهو الذي تم إرساله في ال form و إذا وجدنا أنه يطابق inf1 إذا سنقوم بجعل المسار هو img لرفع الصور فيه وحفظه في قاعدة البيانات أم غير ذلك سيتم وضعه في مجلد img2 .
  3. وعليكم السلام ورحمة الله وبركاته . يمكنك النظر إلى الخوارزميات إلى أنها هى الخطوات أو الطرق التي يتم تنفيذها لحل مشكلة أو عمل شئ معين و من الممكن أنه يوجد عدة خوارزميات لمشكلة معنية أو تنفيذ شئ معين و لكن الفرق الرئيسي بينهما هو ما هي أفضل خوارزمية من حيث السرعة و قلة إستهلاك الموارد . أما بخصوص كتابة الخوارميات فهي بالطبع ستجد صعوبة في بداية الأمر حيث أن كتابة الخوارزميات تعتمد بشكل أساسى على عدة أمور أهمها هي في طريقة تفكيرك لحل أى مشاكل حيث يوجد العديد من المواقع للتدريب وتقوية المستوى فى حل المشاكل (problem solving) ومن أهم تلك المواقع هو leetcode . ويمكنك قراءة الأجوبة التالية لمزيد من التفاصيل حول حل المشاكل : الآن بعد التمكن من حل المشكلات و التفكير المنطقي سيتوجب عليك الآن أن تكون ملما تمام بالأساسيات حيث أن الطريقة التالية لكتابة الخوارزمية هو معرفة طريقة كتابتها فإذا لم تكن جيدا في اللغة البرمجية فلن تستطيع تنفيذ الخوارمية وكتابتها فلهذا يجب أن تكون لديك الأساسيات لمعرفة كبفية تنفيذها . وأخيرا لا تقلق كل شئ سيأتي مع التدريب و الخبرة ومع حل المشكلات وكتابة والتمرين على كثير من الأسئلة . لذلك نصيحتى لك هو البداية في حل التمارين على المواقع الخاصة بحل المشكلات وكما ذكرت لك أشهرهم leetcode وستجد في الأجوبة التي أرفقتها لك العديد من المواقع الأخري وهذا حتي تتكون لديك مهارة التفكير المنطقى وحل المشكلات و تكون لديك حصيلة كبيرة من الخوارزمبات التي قمت بالعمل عليها وستساعدك فيما بعد على تنفيذ المشاريع.
  4. وعليكم السلام ورحمة الله وبركاته. الأمر يعتمد على ما تريد تنفيذه فإذا أردت أن يوجد 2 inputs للصور ويظهر حقل واحد بناء على إختيار من select فالحل الصحيح كما وضح مصطفي في التعليق السابق . ولكن ما فهمته أنك تريد إرفاق صورة ووضعها في حقل بناء على إختيار select . ففي هذه الحالة الحل الأفضل هو وضع input واحد وليس إثنين كما فعلت . حيث يتم إرسال الملف من خلال input واحد ولكن في الواجهة الخلفية نقوم بتحديد الحقل في قاعدة البيانات بناء على ما تم إختياره من العنصر select . وهذا هو ملف الواجهة الأمامية html : <!DOCTYPE html> <html lang="ar"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> </head> <body> <form action="upload.php" method="post" enctype="multipart/form-data"> <label for="option">من فضلك إختر من التالي:</label> <select id="option" name="option"> <option value="">اختر...</option> <option value="inf1">الخيار الأول</option> <option value="inf2">الخيار الثاني</option> </select> <div> <label for="image">حقل الصورة:</label> <input type="file" name="image" accept="image/*"> </div> <button type="submit">إرسال</button> </form> </body> </html> والآن في جزء الواجهة الخلفية ملف upload.php: <?php if ($_SERVER["REQUEST_METHOD"] == "POST") { $option = $_POST["option"]; $path = "uploads/"; if ($option != "inf1" || $option != "inf2") { echo "من فضلك إختر خيار صحيح"; die(); } $targetFile = $path . basename($_FILES["image"]["name"]); if ($_FILES["image"]["size"] > 2000000) { echo "عذراً، حجم الملف كبير جداً."; die(); } // الاتصال بقاعدة البيانات $servername = "localhost"; $username = "root"; $password = ""; $dbname = "db_name"; $conn = new mysqli($servername, $username, $password, $dbname); if ($conn->connect_error) { die("فشل الاتصال: " . $conn->connect_error); } if (move_uploaded_file($_FILES["image"]["tmp_name"], $targetFile)) { $sql = "INSERT INTO table_name ($option) VALUES ('$targetFile')"; if ($conn->query($sql) === TRUE) { echo "تم رفع الملف بنجاح"; } else { echo "عذراً، حدث خطأ أثناء رفع الملف."; die(); } $conn->close(); } else { echo "عذراً، حدث خطأ أثناء رفع الملف."; } }
  5. بدء تعلم لغة برمجة معينة مثل بايثون للمبتدئين ليست بالخطأ ولا يوجد مشكلة في ذلك بل هو في الواقع خيار جيد حيث أن بايثون تتميز بالتالي: سهولة البدء: حيث تتميز بايثون بسهولة التعلم والفهم مما يجعلها مثالية للمبتدئين. و تتيح لهم فهم الأساسيات البرمجية بشكل سهل. التركيز على المفاهيم الأساسية: إن معظم وإن لم تكن أغلب اللغات البرمجية لها نفس المفاهيم والأساسيات والإختلاف الرئيسي في طريقة الكتابة في اللغة ولذلك يمكن للمبتدئين التركيز على فهم المفاهيم الأساسية مثل المتغيرات، الشروط، الحلقات، والوظائف دون أن يتعقدو من المفاهيم المعقدة و الطرق الطويلة للكتابة كلغات مت C++ وغيرها. التطبيق العملي: يمكن للمبتدئين بناء تطبيقات بسيطة و سهولة وسرعه التنفيذ في لغة بايثون. ولكن بالطبع فهم علوم الحاسوب مفيد جدا لمن ليس له أى تعامل مع التكنولوجيا أو إطار البرمجة عموما حيث أن دورة علوم الحاسب تبدا لديك من الصفر تمام في كل شئ من حيث فهم الأساسيات والتفكير المنطقي لحل المشاكل و طرق التصميم وغيرها من الأساسيات التي ستسهل لك مسار التعلم و لكنه ليس شرطا أساسيا للبدء في تعلم البرمجة. حيث يمكن للمبرمجين وأي شخص أن يكتسب هذه المعرفة تدريجيا أثناء تعلمهم البرمجة بلغة محددة. لذالك ليس هناك مشكلة أو قلق في بدء تعلم لغة برمجة مثل بايثون من البداية ولكن يفضل كما وضحت لك إذا لم يكن لديك أى تعامل سابقا مع البرمجة أو التكنولوجيا عموما فإن علوم الحاسب ستسهل لك الأمور .
  6. توجد عدة طرق لإغاء ال register route و الطريقة التي إتبعتها جيدة ومن المفترض أن تقوم بإلغاء رابط التسجيل . ولكن من الممكن أن المشكلة بسبب أنك إستخدمت Auth::routes(); عدة مرات ولذلك يجب حذفهم . إذا كنت تسخدم fortify في لارافيل فهذه الطريقة لن تعمل يجب عليك الذهاب إلى ملف config/fortify.php وستجد مصفوفة features كالتالي 'features' => [ // Features::registration(), // إلفاء رابط التسجيل Features::resetPasswords(), Features::emailVerification(), Features::updateProfileInformation(), Features::updatePasswords(), Features::twoFactorAuthentication(), ], قم بعمل comment للسطر الأول كما وضحتها لك. إذا لم تعمل أى من الحلول السابقة الحل الوحيد إذا هو إنشاء الرابط بنفسك وإرجاع صفحة 404 هكذا : Route::get('/register', function() { return abort(404); }); وتأكد من وضع الكود السابق في بداية الملف
  7. يجب عليك إنشاء صفحة HTML تحتوي على نموذج (Form) يحتوي على حقول لرفع صورة البطاقة الشخصية وحقول أخري للبينات التي تريدها . ملف ال form : <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> </head> <body> <form action="upload.php" method="post" enctype="multipart/form-data"> <label for="name">الإسم:</label><br> <input type="text" id="name" name="name"><br><br> <label for="email">البريد:</label><br> <input type="email" id="email" name="email"><br><br> <label for="file">قم برفع الصورة الشخصية:</label><br> <input type="file" id="file" name="file"><br><br> <input type="submit" value="Submit"> </form> </body> </html> هنا قمنا بإنشاء form لملئ البيانات والبيانات هي الإسم والبريد و ملف الصورة الشخصية . وأيضا تأكد من وضع خاصية enctype="multipart/form-data" في عنصر ال form للسماح برفع الصور . ملف PHP لمعالجة النموذج (upload.php): <?php // تحقق من أن الفورم تم إرساله بشكل صحيح if ($_SERVER["REQUEST_METHOD"] == "POST") { // اتصال بقاعدة البيانات - يمكنك تعديل المعلومات التالية حسب إعدادات قاعدة البيانات الخاصة بك $servername = "localhost"; $username = "root"; $password = ""; $dbname = "test"; // إنشاء اتصال $conn = new mysqli($servername, $username, $password, $dbname); // تحقق من الاتصال if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); } // استخراج البيانات من الفورم $name = $_POST['name']; $email = $_POST['email']; // رفع الصورة الشخصية $file_name = $_FILES['file']['name']; $file_tmp = $_FILES['file']['tmp_name']; move_uploaded_file($file_tmp,"images/".$file_name); // حفظ الصورة في مجلد images بالخادم // تخزين البيانات في قاعدة البيانات $sql = "INSERT INTO user (name, email, personal_id_image) VALUES ('$name', '$email', '$file_name')"; if ($conn->query($sql) === TRUE) { echo "تم إرسال البيانات بنجاح!"; } else { echo "خطأ: " . $sql . "<br>" . $conn->error; } // إغلاق الاتصال بقاعدة البيانات $conn->close(); } ?> تأكد من أن مجلد الصور images موجود ولديك الصلاحية للرفع عليه من قبل السيرفر. وهذه هي أبسط طريقة لرفع الصور بواسطة php. ويمكنك قراءة المزيد من الإجابات التالية :
  8. إن طريقة مذاكرة البرمجة مختلفة عن جميع طرق المذاكرة الأخري حيث هنا في البرمجة يجب عليكي أولا فهم الأساسيات وليس حفظها ومع التكرار والعمل كثيرا ستجدين أنكي تلقائيا قمتي بحفظ تلك الدوال تلقائيا. وليس عليكي بالتأكيد حفظ جميع الدوال فلا يوجد أحد يحفظ جميع الدوال الموجودة و لكن يعرف فيما وكيف تستخدم . ولكن يوجد بعض الدوال يجب بالطبع عليكي حفظها ولكن يمكنك إستخدام الإقتراح التلقائى لتكملة الدوال حاليا ويكفي فقط أنكي تفهمين ما هي وظيفتها وفيما تستخدم . أما بالنسبة للإختبار فلن يتم السؤال في كل الأمور النظرية ولكن التركيز سيكون بشكل أكبر على الجانب العملي والأمور النظرية الهامة و أيضا السؤال حول التطبيقات العملية التي قمت بها ومدى استيعابك بعد ذلك سيتم تحديد مشروع عملي لكؤ لتنفيذه كمشروع تخرج وأيضا الإختبار سيكون محادثة صوتية لمدة 30 دقيقة ولن يكون البحث عبر جوجل متاحا . فالإختبار سيكون لمقياس مدي إستيعابك. ويمكنكي الاطلاع على تفاصيل ومراحل اجتياز الامتحان من هذا الرابط. ويمكنكي قراءة تفاصيل أكثر حول هذا في الإجابات التالية :
  9. لاحظ أنك قمت بتسمية ال route إلى student-edit و تقوم بإستدعائه ب student.edit لذلك الحل هو كالتالي في ملف web.php : Route::get('/student.edit', [StudentController::class, 'edit'])->name('student.edit');
  10. هذا هو إسم العمود وهو gender ويمكنك تغيره إلى أي إسم تريده وإستقباله في الخادم: <select id="gender" name="gender"> وهذا هو إسم العمود في إختصاص الرجال maleJob : <select id="maleJob" name="maleJob"> وإسم العمود في إختصاص النساء هو femaleJob : <select id="femaleJob" name="femaleJob">
  11. أعتقد أنك يجب عليك دراسة الأساسيات أولا قبل البدأ في أى مشاريع حيث أنك إذا لم تكن لديك علم بالأساسيات فالعمل سيكون صعبا و لن يكون شيئا جيدا بالنسبة للتعلم . أولا إن ما يتم إرساله إلى الخادم هو مصفوفة تحمل المدخلات الخاصة بال Form . وهذه المصفوفة تكون المفاتيح فيها هي خاصية ال name فى المدخلات و قيمتها هي ما تم إدخاله . لاحظ هنا <select id="femaleJob" name="femaleJob"> الخاصية name لها قيمة femaleJob إذا ما سيتم إرساله إلى الخادم كالتالي فرضا أن المستخدم إختار ممرضة : [ "femaleJob" => "ممرضة" ] وهذا ما سيأتي في الخادم : $femaleJob = $_POST['femaleJob']; وهكذا في أى مدخل (input) لديك . و يمكنك بعد ذلك إدخاله في قاعدة البيانات
  12. كما أخبرتك منذ البداية أنك تستخدم الدالة route('student-create') دون أن تعرف ال route في web.php وستجد هنا أنك تستخدمها وأعتقد أن هذا سطر 13 كما أخبرتك. والحل هو وضع الإسم في ملف web.php كما أخبرتك هكذا Route::get('/student.create', [StudentController::class, 'create'])->name('student-create'); وهذا سيحل المشكلة إن شاء الله حيث وضعنا إسم لل route وهو نفس الإسم الذى تستدعيه وهو student-create
  13. الخطأ في ملف student.blade.php سطر 13 وليس create.blade.php . عموما الحل هو تبديل أخر سطر لديك في ملف web.php بالتالي : Route::get('/student.create', [StudentController::class, 'create'])->name('student-create');
  14. وعليكم السلام ورحمة الله وبركاته الخطأ لديك أنك تستخدم ال routing name دون أن تقوم بتعريفه . ستجد أنك تستخدم الدالة route('student-create') في ملف ال view دون أن تقوم بتعريف إسما لل route student-create في ملف web.php . لذلك يجب عليك إرسال ملف web.php وملف ال view الذى يحدث فيه المشكلة .
  15. عذرا كان يجب أيضا تغير كود الجافاكريبت حتي تظهر قيم حقول ال select وهذا هو الكود بعد التعديل : <script> const genderSelect = document.getElementById('gender'); const maleJobsDiv = document.getElementById('maleJobs'); const femaleJobsDiv = document.getElementById('femaleJobs'); genderSelect.addEventListener('change', function() { if (this.value === 'ذكر') { maleJobsDiv.style.display = 'block'; femaleJobsDiv.style.display = 'none'; } else if (this.value === 'أنثى') { maleJobsDiv.style.display = 'none'; femaleJobsDiv.style.display = 'block'; } else { maleJobsDiv.style.display = 'none'; femaleJobsDiv.style.display = 'none'; } }); </script> وتأكذ إذا قمت بتغير ال value في عناصر ال select قم بتغيرها في هذا الجظء أيضا بنفس الثمية تمام
  16. يمكنك تعير ذلك من خلال تغير الخاصية value في عنصر option بداخل select هكذا : <label for="gender">الجنس:</label> <select id="gender" name="gender"> <option value="">اختر الجنس</option> <option value="ذكر">ذكر</option> <option value="أنثى">أنثى</option> </select> هنا قمنا بتعير كلمة male في الخاصية value إلى ذكر و female إلى أنثى ويمكنك تغيرهم الى أي قيمة تريد . <div id="maleJobs" style="display: none;"> <label for="maleJob">الوظيفة (للذكور):</label> <select id="maleJob" name="maleJob"> <option value="">اختر الوظيفة</option> <option value="مهمدس">مهندس</option> <option value="طبيب">طبيب</option> <option value="مدرس">مدرس</option> </select> </div> <div id="femaleJobs" style="display: none;"> <label for="femaleJob">الوظيفة (للإناث):</label> <select id="femaleJob" name="femaleJob"> <option value="">اختر الوظيفة</option> <option value="ممرضه">ممرضة</option> <option value="مدرسة">مدرسة</option> <option value="مصممة">مصممة</option> </select> </div> وهنا أيضا قمنا بتغير الخاصية value إلى الفيمة التي تريدها ويمكنك تغيرها كيفما شئت
  17. مرحبا احمد . مما اتذكر انك مشترك في دورة php وهذه الدورة هي خاصة ببرمجة الواجهات الخلفية وفيها تقوم بتعلم برمجة نطبيقات متكاملة ب php واطار عمل لارافيل وايضا ستقوم بتعلم إنشاء واجهات API ولكن لن يتم إستدعائها في المشروع حيث هذه من وظائف مبرمج الواجهات الامامية . اما الدورات الخاصة بالواجهات الامامية مثل دورة تطوير التطبيقات باستخدام JavaScript ففي هذه الدورة ستتعلم تطوير وبرمجة الواجهات الامامية وكيفية استخدام واستدعاء ال API فى المشروع
  18. إذا المشكلة كما وضحت لك أنه تم عمل حفظ للبيانات chaching ويتم مسحها بعد مدة معينة من الممكن أن تكون عدة ساعات . الآن إذا لم تقم بإضافة الكود الذى أرفقته لك وقمت بإضافة بيانات في قاعدة البيانات في جدول الproperties ستجد أن البيانات الجديدة لا تظهر لأنه قام بعمل caching للبيانات القديمة . والكود الذى أرفقته لك يقوم بتجاهل حفظ ال chaching ويقوم بفرض إعادة إحضار البيانات الجديدة.
  19. ليس من الواجب فهم كل المواضيع الموجودة جميعها في موسوعة حاسوب أو أى مكان آخر يكفي فقط فقهم الأساسيات حيث كل شئ سيأتي بالخبرة والتدريب والعمل على المشاريع. إذا كنت مشترك في دورة غير دورة تطوير واجهات المستخدم ستجد أن أول مسار هو أساسيات html و css وهو متاح مجانا لأى شخص دون الإشتراك في الدورة . أما إذا كنت مشترك في دورة تطوير واجهات المستخدم يكفى مذاكرة أول مسار
  20. لقد قمت بتحميل الملف الذى ينتهي بإمتداد xlsx وهو يظهر بشكل جيد ومنظم في صفوف وأعمدة . أما في الفيديو المرفق يظهر أن جميع البيانات موضوعه في عمود واحد ومفصول بينها ب comma . يمكنكي إتباع الحل التالي لفصل العمود إلى عدة أعمدة بناء على الفاصلة comma. أولا قومي بتحديد العمود كاملا . ومن الذهاب إلي خانة Data ثم إختيار Text to Columns . بعد ذلك ستظهر نافذة نختار منها Delimited ثم نظغط next . بعد ذلك نختار نوع الفصل وفي حالتنا تلك نختار comma فقط . وفي هذه الخطوة في الأسفل ستجدين شكل الملف بعد الفصل . اآن نختار next ومن ثم نختار general وبعد ذلك نظغط finish . وهكذا سيتم فصل العمود إلى عدة اعمدة لديكي . ويفضل تحميل الملف بصيغة xlsx أفضل حيث أن الملف مساحته كبيرة يحتوي على بيانات كثيرة والحل السابق من الممكن أن يأخذ وقتا كثيرا في فصل العمود .
  21. وعليكم السلام ورحمة الله وبركاته . أعتقد أن الخطأ هو في عملية ال chach حيث يقوم nextjs بعمل caching عند إستدعاء ال api بإستخدام fetch . ولحل تلك المشكلة نضيف revalidate هكذا : async function fetchProperties() { try { const res = await fetch(`${process.env.NEXT_PUBLIC_API_DOMAIN}/properties`,{ next: { revalidate: 10 } }) if (!res.ok) { throw new Error('Failed to fetch data') } return res.json() } catch (error) { console.log(error) } } وهكذا نقوم بجعل next بحذف ال chache بعد 10 ثواني . ومن المفترض أن هذا يحل تلك المشكلة .
  22. وعليكم السلام ورحمة الله وبركاته . ال Token based authentication هو نهج شائع لحماية تطبيقات الويب حيث يعتمد على استخدام توكن (Token) لتأكيد هوية المستخدم بدلاً من الاعتماد المستمر على تحقق بيانات الدخول مع كل طلب. تساعد هذه التقنية في تحسين أداء التطبيق وتخفيف الحمل على الخادم بالاستفادة من معلومات الهوية الموجودة في التوكن المصادق عليه. الآلية التقليدية لل Token based authentication تعمل بالطريقة التالية: تسجيل الدخول: المستخدم يقوم بإدخال بيانات الاعتماد (اسم المستخدم وكلمة المرور). التحقق من الاعتماد: يتم التحقق من صحة بيانات الدخول. إذا كانت صحيحة، يتم إنشاء وإرجاع توكن (Token). إرسال ال token: token يتم إرساله إلى العميل (المتصفح أو التطبيق). استخدام ال token: العميل يقوم بإرفاق الtokenفي كل طلب يقوم به إلى الخادم. الآن نأتي لسؤالك الأساسى وهو الإكتفاء فقط بالتحقق الأولي بعدها ندع المستخدم يرسل الطلبات بدون التحقق منها مادام أنه لم يقم بتسجيل الخروج . هذا سؤال جيد ولكن يوجد سؤال لك كيف سنعرف أن هذا المستخدم هو من يقوم بإرسال الطلبات في كل مرة ؟؟ كيف سترسل المعلومات ؟ ستقول مثلا أنه يتم وضعها في ال session إذا أى شخص يستطيع وضعها في ال session فمن الممكن أنني أعرف أن الحساب بك هو test@test.com إذا سأقوم بوضعها في ال session وأنتحل شخصيتك ولن يفرق الخادم بيننا . حيث أنه في ال token يتم تشفيره برقم سرى في الخادم وحين يتم إرجاع ال token فك تشفيره بكلمة السر هذه ولو تم تشفير ال token بكلمة سر خاطئة فلن يتم إستكمال الطلب وهذا يجعل مستحيل إنتحال شخصية ال token إلا عن طريقة سرقة ال token نفسه من الشخص ولكن غير ذلك فمن المستحيل إنتحال شخصية شخص عن طريق ال token.
  23. هذا ملف StudentController.php : <?php namespace App\Http\Controllers; use App\Models\student; use Illuminate\Http\Request; class StudentController extends Controller { /** * Display a listing of the resource. */ public function index() { // $students = student::all(); return view('student', compact('students')); } /** * Show the form for creating a new resource. */ public function create() { // } /** * Store a newly created resource in storage. */ public function store(Request $request) { // } /** * Display the specified resource. */ public function show(student $student) { // } /** * Show the form for editing the specified resource. */ public function edit(student $student) { // } /** * Update the specified resource in storage. */ public function update(Request $request, student $student) { // } /** * Remove the specified resource from storage. */ public function destroy(student $student) { // } } وهذا ملف web.php : <?php use Illuminate\Support\Facades\Route; use App\Http\Controllers\StudentController; Route::get('/', function () { return view('welcome'); }); Route::get('/student',[StudentController::class, 'index']);
  24. لاحظ أن الخطأ من الأساس في ملف web.php . حيث أنك لم ترسل العنوان إلى StudentController . يجب أن يكون الكود كالتالي : use Illuminate\Support\Facades\Route; use App\Http\Controllers\StudentController; Route::get('/', function () { return view('welcome'); }); Route::get('/student',[StudentController::class, 'index']); وقم بحذف سطر dd الذى قمنا بكتابته في ملف StudentController
  25. إذا هناك مشكلة في ملف web.php حيث يتم توجيه العنوان إلى مكان أخر غير StudentController قم بتنفيذ الأمر التالي : php artisan optimize:clear والمحاولة مرة أخري و إذا ما زالت المشكلة موجودة فيجب إرفاق مجلد المشروع
×
×
  • أضف...