آموزش php (وبلاگ یک پی اچ پی کار)

آموزش زبان برنامه نویسی php , html , css , تجربیات یک برنامه نویس

۶۰ مطلب با موضوع «آموزش های عمومی و نکته های طراحی سایت» ثبت شده است

دریافت اطلاعات رندوم از دیتابیس در لاراول 5.7

متد زیر یکی از کاربردی ترین متدهای لاراول هستش که میتونید ازش لذت ببرید. این تابع در لراول برای گرفتن اطلاعات تصادفی استفاده میشود و می توانید با تابع کمکی دیگه بنام take تعداد مورد نظر رو مشخص کنید.

 

inRandomOrder()->

نمونه کد کامل :

$randomProducts = DB::table('products')->inRandomOrder()->take(5)->get();
۲۰ شهریور ۹۷ ، ۱۲:۴۴ ۱ نظر موافقین ۰ مخالفین ۰
مهندس مهدی حسامی

سفارشی سازی پیام های اعتبارسنجی در لاراول 5.7

برای تغییر پیغام های پیشفرض اعتبارسنجی لاراول 5.7 روش آسونی وجود داره که میتونید رشته های متنی دلخواه به زبان فارسی و حتی به هر زبان دیگه ای رو اضافه کنید.

روش کار :

وارد فایل موجود د ر مسیر زیر شوید

resources\lang\en\validation.php

 

در قسمت پائین به شما پیشنهادی رو داده که یتونید براحتی پیغامهای سفارشی اضافه کنید

/*
|--------------------------------------------------------------------------
| Custom Validation Language Lines
|--------------------------------------------------------------------------
|
| Here you may specify custom validation messages for attributes using the
| convention "attribute.rule" to name the lines. This makes it quick to
| specify a specific custom language line for a given attribute rule.
|
*/

 

'custom' => [

 

'name' =>['required' => 'الزامی میباشد'],
'email' =>['required' => 'الزامی میباشد'],
'password' =>['required' => 'الزامی میباشد'],
'email' => ['unique'=>':attribute قبلا ثبت شده'],


 

],

 

/*
|--------------------------------------------------------------------------
| Custom Validation Attributes
|--------------------------------------------------------------------------
|
| The following language lines are used to swap attribute place-holders
| with something more reader friendly such as E-Mail Address instead
| of "email". This simply helps us make messages a little cleaner.
|
*/

 

'attributes' => [

 

'name' => 'نام',
'email' => 'پست الکترونیک',
'password' => 'رمز عبور',

 

],

 

۲۰ شهریور ۹۷ ، ۰۰:۳۱ ۰ نظر موافقین ۰ مخالفین ۰
مهندس مهدی حسامی

سفارشی سازی آدرس روت های احراز هویت پیشفرض لاراول

برای این کار روت های زیر را به وب روت لاراول خود اضافه کنید . (نسخه 5.7 لاراول)

 

 

// Authentication Routes...
Route::get('login', 'Auth\LoginController@showLoginForm')->name('login');
Route::post('login', 'Auth\LoginController@login');
Route::post('logout', 'Auth\LoginController@logout')->name('logout');

 

// Registration Routes...
Route::get('register', 'Auth\RegisterController@showRegistrationForm')->name('register');
Route::post('register', 'Auth\RegisterController@register');

 

// Password Reset Routes...
Route::get('password/reset', 'Auth\ForgotPasswordController@showLinkRequestForm')->name('password.request');
Route::post('password/email', 'Auth\ForgotPasswordController@sendResetLinkEmail')->name('password.email');
Route::get('password/reset/{token}', 'Auth\ResetPasswordController@showResetForm')->name('password.reset');
Route::post('password/reset', 'Auth\ResetPasswordController@reset')->name('password.update');

 

// Email Verification Routes...
Route::get('email/verify', 'Auth\VerificationController@show')->name('verification.notice');
Route::get('email/verify/{id}', 'Auth\VerificationController@verify')->name('verification.verify');
Route::get('email/resend', 'Auth\VerificationController@resend')->name('verification.resend');

 
۱۹ شهریور ۹۷ ، ۲۱:۳۲ ۰ نظر موافقین ۱ مخالفین ۰
مهندس مهدی حسامی

دستور سوئیچ بین کامیت ها در گیت

جهت سوئیچ بین کامیت ها یا به قولی رفتن به یک کامیت خاص دو دستور مورد نیاز هست :

دستور اول : گرفتن شناسه کامیت ها

git  reflog

دستور دوم : رفتن به کامیت مورد نظر

git reset hard --  commitId

 

۱۹ شهریور ۹۷ ، ۱۶:۲۰ ۰ نظر موافقین ۰ مخالفین ۰
مهندس مهدی حسامی

جایگزین کردن بک اسلش با فروارد اسلش در url با زبان php

ضمن سلام و عرض خسته نباشید خدمت شما دوست عزیز

اگر قصد دارید بک اسلش یا همان "\" را از url حذف کنید و بجای آن از فوروارد اسلش یعنی "/" استفاده کنید ، با دستورات زیر اینکار رو انجام بدید :

 

کد تبدیل بک اسلش به فوروارد اسلش در زبان php
$str = "http://www.domain.com/data/images\flags/en.gif";
$escaped = str_replace("\\","/",addcslashes($str,"\f\r\n\t"));
echo $escaped; // result is 'http://www.domain.com/data/images/flags/en.gif
۰۷ ارديبهشت ۹۷ ، ۱۰:۳۵ ۱ نظر موافقین ۰ مخالفین ۰
مهندس مهدی حسامی

مشکل عدم اجرای دستور php artisan migrate در لاراول

مایگریشن در لاراول

شاید شما هم مثل من وقتی یه پروژه لاراولی رو دارید راه اندازی میکنید با مشکل عدم اجرای مایگریت ها مواجه بشید . منظورم اینه که وقتی میخواهید دستور زیر رو اجرا کنید ، کامپوزر به مشکل بر میخوره و یکسری خطاهایی رو به شما بده که من نمونه هایی رو در زیر آوردم :

 

دستوری که صحبت ازش داریم اینه :

php artisan migrate
 

برای رفع خطای زیر در لاراول هنگام اجرای دستور فوق راهکاری رو در پائین همین پست نوشتم که می تونید امتحان کنید :

 

خطا : 

 Illuminate\Database\QueryException  : SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long;

max key length is 1000 bytes (SQL: alter table `users` add unique `users_email_unique`(`email`))

  at C:\wamp64\www\MyProjects\siblearn\vendor\laravel\framework\src\

Illuminate\Database\Connection.php: 664
    660|         // If an exception occurs when attempting to run a query, we'll format the error
    661|         // message to include the bindings with SQL, which will make this exception a
    662|         // lot more helpful to the developer instead of just the database's errors.
    663|         catch (Exception $e) {
  > 664|             throw new QueryException(
    665|                 $query, $this->prepareBindings($bindings), $e
    666|             );
    667|         }
    668|

  Exception trace:

  1   PDOException::("SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 1000 bytes")
      C:\wamp64\www\MyProjects\siblearn\vendor\laravel\framework\src\

Illuminate\Database\Connection.php : 458

  2   PDOStatement::execute()
      C:\wamp64\www\MyProjects\siblearn\vendor\laravel\framework\src\Illuminate\

Database\Connection.php : 458

  Please use the argument -v to see more details.

 

-----------------------------------

 

راهکار حل مشکل :

در پروژه لاراولی خودتون وارد فایل زیر شوید :

config/database.php

 

عبارت زیر رو پیدا کنید :

 

'engine' => null',
 
حال آنرا پاک کنید و بجای آن عبارت زیر را جایگزین کنید :
 
'engine' => 'InnoDB ROW_FORMAT=DYNAMIC',
 
حالا مجددا به محیط کامند لاین کامپوزر برگردید و دستور اجرای migration ها رو اجرا کنید که بصورت زیر میباشد :
 
php artisan migrate
 
 
۲۰ اسفند ۹۶ ، ۲۱:۰۴ ۴ نظر موافقین ۰ مخالفین ۰
مهندس مهدی حسامی

احراز هویت مبتنی بر توکن در برنامه های تحت وب و وبسرویس ها

سشن و توکن و کوکی

سلام و عرض احترام دارم خدمت دوستان عزیز

در این مقاله قصد دارم در خصوص روشهای احراز هویت توضیحاتی را در حد مقدماتی خدمتتان عرض کنم

احراز هویت کاربران
احراز هویت در نرم افزارهای کامپیوتری به فرایندی جهت شناسایی کاربران برای دسترسی به بخش های مختلف نرم افزار گفته می شود. 
طی این فرایند در صورت تصدیق و تطبیق اطلاعات کاربر با اطلاعات قبلی موجود در سیستم، مجوز دسترسی به بخش های مختلف نرم افزار که برای عموم مخفی است صادر می گردد و کاربر احراز شده از آن پس می تواند برای مدت زمان مشخصی یا بصورت مادام العمر به سیستم دسترسی داشته باشد.
مدت زمان دسترسی کاربر بعد از عملیات احراز هویت و همچنین سطح دسترسی کاربر احراز شده بستگی به سیاست های تنظیمی مدیر سیستم دارد . لازم به ذکر است که وسیله شناسایی و احراز هویت در سیستم های مختلف کامپیوتری ، متفاوت بوده ولی اغلب به شکل  رمز عبور ،  ترکیب نام کاربری و رمز عبور ، کارت مغناطیسی ، شناسه توکن و ... در اختیار کاربران قرار داده می شود تا کاربر بتواند با استفاده از آن به سیستم دسترسی داشته باشد.
- احراز هویت بطور کلی در 2 مرحله اصلی انجام می شود :
 Authentication  : به مجموعه از فرایندهایی گفته می شود که بوسیله آن کاربر شناسایی می شود که چه کسی هست .
Authorization   :  به مجموعه ای از فرایندها گفته می شود که بعد از مرحله شناسایی انجام می گیرد و سطوح دسترسی کاربر مشخص می شود.
 
همانطور که در تعاریف این  2 مرحله مشخص هست ، سیستم قبل از هر کاری ، برای احراز هویت کاربر ابتدا باید شخص را تشخیص دهد و بفهمد که این شخص چه کسی میباشد که برای اینکار ما معمولا فرمهای لاگین را در سیستم طراحی می کنیم . در مرحله دوم که سیستم کاربر را تشخیص داد ، بایستی مشخص کند که این کاربر به چه بخش هایی حق دسترسی دارد.
 
اجازه دهید تا با یک مثال ساده موضوع را بیشتر شرح دهیم ، فرض کنید شما در مرورگر اینترنتی خودتان وارد یک وبسایت شده اید و فرم ورود کاربران را باز کرده اید ، در این فرم اطلاعات کاربری خودتان را وارد نموده و دکمه ورود را کلیک می کنید ، بعد از کلیک کردن روی دکمه ورود ، سیستم وارد عملیات احراز هویت خواهد شد.
به این صورت که ابتدا اطلاعات وارد شده شما با اطلاعات موجود در دیتابیس سیستم تطبیق داده می شود تا در صورت تصدیق و تطابق اطلاعات به شما اجازه ورود به سیستم داده شود .
با فرض اینکه اطلاعات وارده با اطلاعات موجود در سیستم منطبق بود ، شما بر اساس سطح دسترسی خود  وارد بخش های مخفی نرم افزار که قبل از احراز هویت قادر به مشاهده آنها نبودید خواهید شد.
 
حال که با کلیات این فرایند آشنا شدیم بیایید کمی هم وارد جزئیات و روش های فنی پیاده سازی شویم . تا اینجای کار ما صرفا بصورت اجمالی به شرح عملیات احراز هویت پرداختیم ولی نگفتیم که سیستم برای انجام این فرایند چطور عمل می کند.
برای اینکه توضیحات برای شما ملموس تر واقع شود ، ما فرض را همان وبسایت در نظر میگیریم که یک نرم افزار تحت وب محسوب می شود و به لحاظ تعدد کاربران ، احراز هویت یکی از مهم ترین بخش های این نوع نرم افزارها بشمار میرورد . 
ادامه مطلب...
۱۱ آذر ۹۶ ، ۱۳:۳۶ ۲ نظر موافقین ۰ مخالفین ۰
مهندس مهدی حسامی

گرفتن تاریخ فعلی سیستم در سی شارپ

کار با تقویم ها در سی شارپ

برای گرفتن تاریخ فعلی در سی شارپ خیلی راحت می توانیم با استفاده از تکه کد زیر زمان فعلی را بدست بیاریم.

DateTime dt = DateTime.Now;

با اجرای کد بالا زمان فعلی از ویندوز درخواست میشه و مقدار آن درون متغییری بنام dt ریخته می شود.

ولی مسئله که وجود داره اینه که شاید شما در تنظیمات تاریخ ویندوز ، تقویم پیشفرض را به دلخواه تغییر دادید ، یعنی شما رفتید به کنترل پنل ویندوز و اونجا وارد قسمت Region شدید و تقویم پیشفرض را به عنوان مثال گذاشتید روی تقویم قمری ، بنابراین دستور بالا زمان فعلی را بر اساس تقویم پیشفرض سیستم شما بر میگرداند ، یعنی اگر تقویم شما هم اکنون قمری باشد این دستور نیز تاریخ فعلی را به قمری بر میگرداند و اگر تقویم پیشفرض ویندوز شما روی شمسی تنظیم شده باشد تاریخ فعلی را به شمسی بر میگرداند.

حال با این اوصاف ممکنه شما بخواهید بدون تغییر تقویم پیشفرض سیستم خود تاریخ فعلی را در یکی از تقویم ها بدست بیارید

خوشبختانه سی شارپ برای این کار هم دستوری دارد که می توانید استفاده کنید. برای اینکار شما بعد از بدست آوردن زمان فعلی سیستم ، بایستی یک تقویم هم ایجاد کنید که این تقویم می تواند یکی از انواع تقویم ها باشد (شمسی ، میلادی ، قمری):

 

ساخت تقویم میلادی در سی شارپ :

System.Globalization.GregorianCalendar  miladi = new System.Globalization.GregorianCalendar();

 

ساخت تقویم شمسی در سی شارپ :

System.Globalization.PersianCalendar  shamsi = new System.Globalization.PersianCalendar();

 

ساخت تقویم قمری در سی شارپ :

System.Globalization.HijriCalendar    ghamari = new System.Globalization.HijriCalendar();

 

ساخت تقویم کره ای در سی شارپ :

System.Globalization.KoreanCalendar    korean = new System.Globalization.KoreanCalendar();

 

و تقویم های مختلف که در این فضای نام موجود هست.

حالا براحتی از تقویمی که ساختید بخواهید تا زمان رو به شما اعلام کنه که به تفکیک می تونید سال ، ماه ، روز ، ساعت ، دقیقه ، ثانیه ، میلی ثانیه را بگیرید :

 

String     Year        =       miladi.GetYear(dt);

String     Mounth    =       miladi.GetMonth(dt);

String     Day         =       miladi.GetDayOfMonth(dt);

String     Hours      =       miladi.GetHour(dt);

String     Minute     =       miladi.GetMinute(dt);

String     Secound   =       miladi.GetSecond(dt);

 

در دستورات بالا دقت کنید که متغییر dt را بایستی به تقویم بدید تا تاریخ فعلی را بر گرداند که حتی می توانید برای تبدیل تاریخ ها در سی شارپ نیز از این دو دستور ساده استفاده کنید و بجای dt  تاریخ مورد نظر را بدید تا در تقویم مورد نظر تبدیل شود . 

 

امیدوارم براتون مفید بوده باشه

ارادتمند شما مهدی حسامی

 

۱۲ شهریور ۹۶ ، ۱۱:۴۰ ۲ نظر موافقین ۰ مخالفین ۰
مهندس مهدی حسامی