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

محمد صقر3

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

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

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

أجوبة بواسطة محمد صقر3

  1. يمكن تغير قمية المتغير NODE_ENV من ملف package.json كالتالي

    لو نظام التشغيل ويندوز 

    
      "scripts": {
        "start-prod": "SET NODE_ENV=production & node index.js",
        "start-dev": "SET NODE_ENV=development & node index.js"
      },

    لو نظام التشغيل لينكس

    
      "scripts": {
        "start-prod": "NODE_ENV=production & node index.js",
        "start-dev": "NODE_ENV=development & node index.js"
      },

    ثم لتشغيل في ال production

    npm run start-prod

    او في development mode 

    npm run start-dev

     

    • أعجبني 1
  2. لأستخدم environment variables تحتاج لتسطيب dotenv package

    npm install dotenv --save

    ثم تقوم بالوصل إلي المتغيرات داخل ملف .env كالتالي

    // تقوم بإستدعاء dotenv package
    require('dotenv').config();
    
    // ثم للحصول قيمة ال port
    const PORT = process.env.PORT // 3000

    بفرض ان ملف .env يحتوي علي PORT 

    // .env file conten
    
    PORT=3000

     

    • أعجبني 1
  3. لأنه دائما قيمة ال modal تاخد اول قيمه تحتاج عند الضغط علي زر المزيد تقوم بتمرير بيانات الصف اللي تم الضغط عليه مع هذا الرابط وباستخدام الجافا سكربيت او JQuery تقوم بالحصول علي القيم الخاصه بهذا الصف وتحديث قيم ال modal 

    هل تستخدم ملفات جافاسكربت للقيم بهذه الوظيفه يمكنك إضافتها مع الكود لمعرفة الخطاء وإذا ما بتستخدم تحتاج تضيف هذا الشيء

    هنا تقوم بتمرير الداتا الخاصه بكل صف مع زرار المزيد

    //الجدول
    
    echo'
      <tr class="table-light" align="center">
          <th scope="row">' . $row['id'] . '</th>
          <td >' . $row['facory'] . '</td>
          <td>' . $supplying_data . '</td>
    	     <td align="center">
               // هنا تقوم بتمرير factory, id, supllying_data مع هذا الرابط
    		 <button class="btn btn-outline-primary m-auto mt-2 more" 
                     data-factory="<?php echo $row['facory']; ?>"
                     data-id="<?php echo $row['id']; ?>"
                     data-supllying="<?php echo $supplying_data; ?>"
                     data-toggle="modal" data-target="#more">عرض المزيد</button>
               
    		 <!-- زر التعديل -->
    		 <a href="edit_supplier.php?id=' . $row['id'] . '" target="_blank"></a>
    		 <button  type="button" class="btn btn-primary">تعديل</button>
    		 <!-- زر الحذف -->
    		 <button type="button" class="btn btn-danger">حذف</button>
    		 
    		 </td>
        </tr>';
    }
    ?>

    ثم تقوم باستخدام JQuery لتحديث قيم العناصر في ال modal بعد اعطاء id للعناصر ال modal

     <th class="text-center" id="factory"> <?php echo $factory; ?> </th>

    supplying data

    <div class="dropdown" id="suplying-data"> <?php echo $supplying_data; ?> </div>

     

    $(document).on("click", ".more", function (e) {
    
    	e.preventDefault();
    
    	var that = $(this);
    
    	const factory = that.data('factory');
    	const suplying = that.data('suplying');
    	$("#factory").val(factory);
    	$("#suplying-data").val(suplying);
    	
    
    	$(that.attr('href')).modal('show');
    });

     

  4. العدد الزوجي هو العدد باقي قيسمته علي 2 يساوي صفر 

    6 % 2 باقي القسمه يساوي 0 وهي 6 / 2 = 3 وباقي القسمه صفر

    7 % 2 باقي القسمه يساوي 1 وهي 7 / 2 = 3 وباقي القسمه 1 لان 2 * 3 = 6 مش 7

    #include <iostream>
    
    using namespace std;
    
    // تعريف طول وعرض المصفوفات كثوابت
    #define WIDTH 3 
    #define HEIGHT 3 
    
    int main()
    {
        // تعريف مصفوفه بقيم مختلفه
        int SweetArray[WIDTH][HEIGHT] = {
                            {1,2,3},
                            {4,5,6},
                            {7,8,9}
        };
        // طباعة الاعداد الزوجيه
        cout<<"Even Numbers:\n";
        for(int i = 0; i < WIDTH; i++)
            for(int j = 0; j < HEIGHT; j++)
                // العدد زوجي إذا كان باقي قيسمته علي 2 يساوي صفر
                // 6 % 2 = 0 زوجي
                // 7 % 2 = 1 فردي
                if(SweetArray[i][j] % 2 ==0)
                    cout<<SweetArray[i][j]<< " ";
    
        cout<<"\n";
        return 0;
    }

     

    • أعجبني 1
  5. بتاريخ 11 دقائق مضت قال Kawther Wathiq:

    ما المشكلة ؟

     

    بدون عنوان.png

    اعتقد ماعملت استخدام ل namespace وفي هذه الحاله بتستخدمي std::cout مش cout علي طول او تستخدمي std namespace

    #include <iostream>
    using namespace std;

    لو ممكن صوره كامله للكود

  6. لجمع اكتر من martix وحسب المتوسط لابد أن يكون لهم جميعا نفس الطول و العرض

    هذا مثلا لجمع 5 مصفوفات 2 * 2 وحساب المتوسط في مصفوفه جديده 2 * 2 

    #include <iostream>
    
    using namespace std;
    
    // تعريف طول وعرض المصفوفات كثوابت
    #define WIDTH 2 
    #define HEIGHT 2 
    
    
    int main()
    {
      	// تعريف خمس مصفوفات بقيم مختلفه
        int arr1[WIDTH][HEIGHT] = {{1,2}, {3,4}};
        int arr2[WIDTH][HEIGHT] = {{6,3}, {4,5}};
        int arr3[WIDTH][HEIGHT] = {{4,2}, {8,4}};
        int arr4[WIDTH][HEIGHT] = {{10,12}, {13,14}};
        int arr5[WIDTH][HEIGHT] = {{2,5}, {22,20}};
        int result[WIDTH][HEIGHT] = {};
    
      	// حساب المتوسط مجموع كل عنصر علي ما يقابله في المصفوفات الاخري مقسوم بعدد المصفوفات
      	// (arr1[0][0] + arr2[0][0] + arr3[0][0] + arr4[0][0] + arr5[0][0]) / 5 => 4 
        for(int i = 0; i < WIDTH; i++)
            for(int j = 0; j < HEIGHT; j++) 
                result[i][j] = (arr1[i][j] + arr2[i][j] + arr3[i][j] + arr4[i][j] + arr5[i][j]) / 5;
        
      	// طباعة مصفوفة النتيجه
        cout<<"Result: \n";      
        for(int i = 0; i < WIDTH; i++){
            for(int j = 0; j < HEIGHT; j++) {
                cout<<result[i][j]<<" ";
            }
            cout<<"\n";
        }
        
        return 0;
    }

    الناتج:

    Result: 
    4 4 
    10 9 

     

    • أعجبني 1
  7. ممكن تراجعي العدد علي طول نعد عدد ال rows اللي بتحتوي الكود المعين

    إذا ما بنحتاج نستخدم ال codes في حاجه تانيه

    // نستخدم دالة ال count 
    $query="SELECT count(code) FROM types WHERE code =:$code ";
    
    $query_res=$conn->query($query);
    // نستخدم دالة fetchColumn 
    // بترجع string -> cast to int
    $count= (int) $query_res->fetchColumn();

     

  8. #include <iostream>
    
    using namespace std;
    
    // نقوم بتعريف ثوابط بطول وعرض المصفوفه
    #define WIDTH 5
    #define HIGHT 3
    
    int main()
    {
      //  2D Matrix نعرف المصفوفه ونعطيها ارقام عشوائيه 
        float  SweetClass[WIDTH][HIGHT] = { 
            {1, 2, 3.0},
            {6, 7, 8.20},
            {11, 12, 13},
            {10.2, 5, 3.2},
            {12, 1.2, 5.6}
        };
        
      	// 1D matrix نعرف مصفوفه  بقيمه فارغه
        float MTRX[WIDTH * HIGHT] = {};
        
      	// نقوم بدوران حول المصفوفه طول وعرض ووضع القيمه في مصفوفة النتيجه
        for(int i = 0; i < WIDTH; i++)
            for(int j = 0; j < HIGHT; j++)
      			// نقوم بحساب مكان العنصر في مصفوفة النتيجه كالاتي i * HIGHT + j
      			// 0 * 3 + 0 = 0; 0 * 3 + 1 = 1; 0 * 3 + 2 = 2
      			// 1 * 3 + 0 = 3; 1 * 3 + 1 = 4; 1 * 3 + 2 = 5
                MTRX[i * HIGHT + j] = SweetClass[i][j];
        
      // نقوم بطباعة مصفوفة النتيجه
        for(int i = 0; i < WIDTH * HIGHT; i++)
            cout<<MTRX[i]<<" ";
        
        cout<<"\n";
        return 0;
    }

     

    • أعجبني 2
  9. يمكن أن تستخدم Laravel API Resource

    لإنشاء resource ويتم إنشاء ملف ExampleResource داخل مجلد app\Http\Resources

    php artisan make:resource ExampleResource

    افتح الملف وقم بعمل التعديل المطلوب

    <?php
    
    namespace App\Http\Resources;
    
    use Illuminate\Http\Resources\Json\JsonResource;
    
    class ExampleResource extends JsonResource
    {
        /**
         * Transform the resource into an array.
         *
         * @param  \Illuminate\Http\Request  $request
         * @return array
         */
        public function toArray($request)
        {
            return [
    			"id": $this->id,
                "name": $this->name,
                "age": $this->age,
                "type": ($this->type == 0) ? "admin" : "user"
            ];
        }
    }

    ثم تقوم بتمرير ال object or collection ل resource

    // في حالة عنصر واحد
    return new ExampleResource(Example::findOrFail($id));
    
    // في حالة اكتر من عنصر
    return ExampleResource::collection(Example::all();

     

    • أعجبني 1
  10. ما عندي علم إذا متوفر بالعربي أو لا

    بس كل الفكره أن الكتب تستغرق وقت طويل لكي يتم نشر كتاب جديد وترجمته للعربي تستغرق وقت ومع تطوير السريع للتكنولوجيا وجود كتاب بأحدث الاصدرات سيتغرق وقت

    يمكنك مشاهدة الدورة ثم بعد ذلك الإطلاع علي المزيد من المصادر التابعه دائما ما تحدث قبل أي أصدار جديد هنا

    هذا لا يغني عن قراء الكتب والتي تكون مفصله اكتر وتزيد فهمك للموضوع المراد سواء كانت كتب لارفال أو غيرها

    • أعجبني 1
  11. يحتوي الكود علي مجموعة أخطاء سأوضح لك وسأضع الكود الصحيح كامل بعد توضيح الأخطاء

    • نوع الداتا اللي بترجعها الداله هو string وليس int والثاني هو لكي تسطيع الكتابه في مصفوفة ال outputArray لا يجب أن تكون const ماتحتاج ل const
    int arrayConvert(int inputArray[], const char outputArray[], int size)
    • تعمل check علي عنصر في المصفوفه inputArray[i] ما علي المصفوفه ككل 
    if ((inputArray >= 0) && (inputArray < 128))
    • ماتحتاج إلي for loop إذا القيمه ما صحيح ضع علامة ال . داخل ال outputArray مباشرة 
    for (int i = 0; i< size; i++)
        outputArray[i] = '.';
        break;
    • هنا جملة ال return "valid" او return "invalid بتنهي الدالة ما هيوصل في تنفيذ الكود إلي جملة ال return outputArray التي تليها 
    • الأمر الثاني ماتحتاج تعمل return outputArray لأنها array وبتكون في الدالة ب passed by refrence وبالتالي عند أستدعاء الداله وإعطاءها outputArray ستقوم c++ بوضع الناتج داخل المصفوفه التي قمت بإعطاءه للداله 
        if (validity)
            return "Valid";
            return outputArray[];
        else
            return "Invalid";
            return outputArray[];
    • الكود بعد تعديل مجموعة الأخطاء
    #include <iostream>
    
    using namespace std;
    
    #define SIZE 5
    
    string arrayConvert(int inputArray[], char outputArray[], int size)
    {
        bool validity = true;
    
        for (int i = 0; i< size; i++){
            if ((inputArray[i] >= 0) && (inputArray[i] < 128))
                outputArray[i] = (char)inputArray[i];
            else{
                validity = false;
                outputArray[i] = '.';
            }
        }
        if (validity)
            return "Valid";
        else
            return "Invalid";
    }
    
    int main()
    {
        int inputArray[SIZE] = {109,110,200,118,230};
        char outputArray[SIZE];
    
        string result = arrayConvert(inputArray, outputArray, SIZE);
        cout<<"outputArray: ";
        for(int i = 0; i < SIZE; i++)
            cout<<outputArray[i]<<" ";
            
        cout<<"\nResult is " << result <<"\n";
        return 0;
    }

     

  12.  

    #include <iostream>
    
    using namespace std;
    
    // نعرف ثابت من 50عنصر
    #define SIZE 50
    
    
    int main()
    {
      // نعرف مصفوفه للعناصر بمقدار الثابت أي 50 عنصر
        int arr[SIZE];
      // نعرف متغيرين بقيمه افتراضيه صفر لعد عدد العناصر الأكبر من الصفر والأصغر
        int negativeNumbers=0, positiveNumbers = 0;
        
      	// نقوم بإدخال العناصر في المصفوفه بإستخدم ال for loop
        for(int i = 0; i < SIZE; i++) {
            cin>>arr[i];
        }
      
      	// نقوم بالدوارن علي عناصر المصفوفه وحساب ما إذا كان العدد أكبر من الصفر أو أصغر  
        for(int i = 0; i< SIZE; i++) {
            // الاعداد السالبه الأقل من الصفر
            // negativeNumbers = negativeNumbers + (arr[i] < 0) 
      		// إذا كان العدد أقل من الصفر تكون قيمة هذا الجزء 1 ويضيف قيمته إلي negativeNumbers
      		// وإذا كانت صفر لن توثر علي قيمة المتغر عند جمعه
      		// مثلا إذا قيمة arr[i] = 5
      		// negativeNumbers = negativeNumbers + (5 < 0) = 0 // negativeNumbers = negativeNumbers + 0
            // positiveNumbers = positiveNumbers + (5 > 0) = 1 // positiveNumbers = positiveNumbers + 1
            negativeNumbers += (arr[i] < 0);
            positiveNumbers += (arr[i] > 0);
        }
        
      	// نطبع عدد الاعداد الموجبه والسالبه
        cout<<"negativeNumbers count: " << negativeNumbers <<"\n";
        cout<<"positiveNumbers count: " << positiveNumbers <<"\n";
        
        return 0;
    }

    ويمكن تنفيذ الجزء الخاص بمعرفة عدد الأعداد الأكبر والأصغر من الصفر بأستخدم if condtions

    for(int i = 0; i< SIZE; i++) {
            // إذا قمية العنصر أكبر من الصفر نزيد قمية positiveNumbers بمقدار واحد
            if(arr[i] > 0) positiveNumbers++;
      		// وإذا كان قمية العنصر أقل من الصفر نزيد قمية ال negativeNumbers بمقدار واحد
    		else if(arr[i] < 0) negativeNumbers++;
    }

     

  13. للحصول علي أكبر الأعضاء يمكنك ترتيب الأعضاء من الأكبر إلي الأصغر والحصول علي أول عضو

    للحصول علي أصغر الأعضاء يمكنك ترتيب الأعضاء من الأصغر إلي الأكبر والحصول علي أول عضو

    // أكبر الأعضاء
    SELECT column_name_1, column_name_2, ..., column_name_n
    FROM
    table_name
    WHERE condition_expression
    ORDER BY birth DESC;
    LIMIT 1
    
    // أصغر الأعضاء
    SELECT column_name_1, column_name_2, ..., column_name_n
    FROM
    table_name
    WHERE condition_expression
    ORDER BY birth ASC;
    LIMIT 1

     

    • أعجبني 1
  14. ربما المشكله في حقل البيانات الذي تقوم بتخزين البيانات فيه إذا كان من نوع char وعدد معين من الحروف سيقوم بتخزين اقصي قيمه له وإهمال باقي الحروف يمكن استخدم Text, LongText نوع الحقل الذي تقوم بتخزين البيانات فيه علي حسب قاعدة البيانات المستخدمه

    إذا بتستخدم لارفال ممكن تستعمل longtext

    Schema::table('table_name ', function (Blueprint $table) {
    	$table->longText('column_name');
    });

     

  15. يمكنك أستخدم بعض البرامج مثل ngrok ويقوم بتشغيل جهازك المحلي كسيرفر

    1. قم بتنزيل البرنامج النسخه المناسبه لنظم التشيغل ويندوز و لينكس وماك
    2. فك الضغط عن البرنامج ثم الذهاب إلي مكان البرنامج وفتح command line, or teminal
    3. قم بتشغيل مشروعك علي بورت 3000 ثم قوم بتشغيل ngrok on port 300
    // يظهر الأوامر التي يمكن أستخدمها في ngrok
    ./ngrok help
    // لتشغيل ngrok on port 300
    ./ngrok http 3000

    بعد تنفيذ الامر أستخدم اللينك الذي يقوم البرنامج بإنشاءه بدل من http://localhost:3000 

  16. الوقت نسبي بمعني يعتمد علي الوقت اللي مخصص للدراسه وكمان علي الشخص وطريقة تفكيره وإذا كان لديه سابق معرفه عن مجال الدراسه وهكذا ما في وقت محدد لكل الناس تختلف من شخص لأخر

    • أعجبني 1
  17. لأن هذا السطر يقوم بإرجاع اوبجكت من نوع Query Builder وليس Array or Collection

    $emails = $user->emails()->where(['verified' => true]);

    ولكي يكون الناتج array or collection تحتاج إلي استخدام ال get() function وممكن إذا كنت تريد أعمده معينه يمكن أن تعطيها لل get function as array of columns

    // تقوم بإرجاع كل الداتا الخاصه باالإيميلات
    $emails = $user->emails()->where(['verified' => true])->get();
    
    // لكي تقوم بإرجاع أعمده معينه وليس كل الداتا 
    // مثلا id, email فقط
    $emails = $user->emails()->where(['verified' => true])->get(['id', 'email']);

     

    • أعجبني 2
  18. بتاريخ 31 دقائق مضت قال معتز المشكلي:

    لكن لدي استفسار هل يتم استخدام إصدارات لا رافيل مختلفة لتعويد المتدرب على مختلف بيئات لا رافيل أرجوا التوضيح ؟

    ملاحظة

    من الجلي جدا أن المدرب يستخدم إصدارا اقدم من إصداري مما تسبب في إرباكي وقد قمت بمعالجة العديد من المشاكل منذ بدأ المسار دون أن أسأل فأنا لا أسأل إلا للضرورة لكي أتقدم في المسار وأكتسب المهارات بسرعة أرجو إن كان الإصدار من لا رافيل الذي يستخدمه المدرب قديما أن يتم تحديث كافة مسار إنستقرام حاسوب لأني كمتخرج سأعمل على ما عودتني عليه الأكادمية ولن أهتم للقديم وكذا سأتابع من حيث تركتني الأكادمية أي من الإصدار 8 وما بعده مشكله كهذه ربما حللتها بنفسي في المسار السابق ولكنها استعصت علي في هذا المسار (رغم تصحيح الأخطاء الإملائية التي نبهتوني عليها مشكورين) 

    ملاحظة أخيرة 

    كل مدرب (مع إحترامي لجمعيكم) ينصحنا بكتابة الكود بطريقة أفضل من المدرب الأساسي لماذا لا يتم إلزام المدرب الأساسي بكتابة الكود وفق أفضل النهج المطروحة 

    وشكرا 

    instagramwebapp.rar

    قمت بتحميل الكود وفحصه تبين وجود خطاء في اسم ال controller

    // هنا يوجد خطاء في اسم UserConroller
    Route::group(['middleware' => ['auth']], function() {
      
    	Route::get('user/profile', [UserConroller::class, 'edit']);
    	
    });
    
    // فقط قم بتعديل اسم ال controller => UserConroller
    Route::group(['middleware' => ['auth']], function() {
    
    	Route::get('user/profile', [UserConroller::class , 'edit']);
    
    });
    

    وبعد تصليح هذا الخطاء هناك خطاء اخر في ملف profile.blade.php وهي أن دالة asser غير موجوده والمفترض أن تكون asset وتاخذ ب paramater من نوع string

    <img src="{{asset('images/avatar' . $user->avatar)}}" class="w3-cercle" style="size: 255px">

     

  19. يمكنك تشفير ال id في دالة  ال edit ويكون مشفر وتضع قيمته المشفره ك hidden input

    و عندما تقوم بعمل form submit قم بفك التشفير عن ال id واستخدامه

    <?php
    
    namespace App\Http\Controllers;
    
    use App\Http\Controllers\Controller;
    use App\Models\User;
    use Illuminate\Http\Request;
    use Illuminate\Support\Facades\Crypt;
    
    class UserController extends Controller
    {
    
        public function edit(Request $request, $id)
        {
            $encryptedId = Crypt::encryptString($id);
    		....
        }
    
    	// يكون ال id مشفر
        public function update(Request $request, $id)
        {
            $userId = Crypt::decryptString($id);
    		....
        }
    
    }

     

    • أعجبني 1
  20. بتاريخ 9 دقائق مضت قال معتز المشكلي:

    الكود من صفحة المتحكم

    
    public function edit()
        {
            //عرض الصفحة الشخصية الخاصة بتعديل البيانات
            $user = User::find(auth()->user()->id);
            return view('auth.profile',compact('user'));
        }

    الكود من صفحة الويب 

    
    oute::get('/', function () {
    	if (Auth::check()) {
    		return redirect('/home');
    	}else{
    		return view('Auth/login');
    	}
    });
    
    Route::group(['middleware' => ['auth']], function() {
      
    	Route::get('user/profile', [UserConroller::class, 'edit']);
    	
      });
    
    Auth::routes();

    صورة الملف المقصود أدناه

    مع ذلك لا تظهر صفحة الملف الشخصي لي لماذا؟

    152.JPG

    • ما تحتاج إلي أستخدم دالة ال find يمكن الحصول علي المستخدم من دالة user()
    $user = auth()->user();
    • هذا الرابط محمي بال auth middleware أي لابد أن يقوم المستخدم بتسجيل الدخول لكي يستطيع الوصول إلي هذا الرابط
    // الرابط محمي بال auth middleware
    Route::group(['middleware' => ['auth']], function() {
      
    	Route::get('user/profile', [UserConroller::class, 'edit']);
    	
      });

     

    • تقوم بإنشاء حساب في الجيت هب
    • ثم تقوم بإنشاء مشروع جديد علي حساب الجيت هب
    • تقوم فتح cmd نافذة الأوامر في الويندوز او terminal في لينكس في مكان ملفات المشروع الذي تريد رفعه علي الجيت  هب
    • قم بإنشاء مشروع جيت عن طريق الأمر
    git init
    • ثم تقوم بإضافة الملفات إلي مشروع الجيت بالأمر التالي
    git add .
    • ثم تضيف رسالة عن التغير أو التعديل أو الإضافة التي قمت بيها في المشروع بالأمر التالي
    git commit -m "commit message"
    • ثم تقوم بإنشاء branch جديد
    git branch -M main
    • ثم تقوم بربط المشروع علي جاهزك المحلي بالمشروع الذي قمت بإنشاءه علي الجيت هب بالأمر التالي
    git remote add origin https://github.com/github-username/repo-name.git
    • ثم تقوم برفع مشروعك من الجهاز المحلي إلي الجيت هب 
    git push -u origin main
    • ويمكنك أستخدام برنامج مثل Github Desktop بدل من أستخدم ال cmd
×
×
  • أضف...