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

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

۱۲۰ مطلب با موضوع «php» ثبت شده است

بروزرسانی کامپوزر توسط دستورات خودش

جهت بروزرسانی کامپوزر روی سیستم تان در ویندوز 10 وارد CMD شوید و دستور زیر را وارد نمائید:

composer self-update
توجه کنید که یک نسخه از کامپوزر از قبل روی سیستم تان نصب شده باشد.
۲۲ ارديبهشت ۹۸ ، ۱۴:۰۸ ۰ نظر موافقین ۰ مخالفین ۰
مهندس مهدی حسامی

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

احتمالا قصد راه اندازی یک شبکه اجتماعی دارید که در بخش روابط بین جداول کاربران و جدول میانجی فالورها مشکل دارید بنابراین با من همراه باشید تا با نحوه ایجاد جداول مربوط به بخش فالوو کاربران آشنا بشیم.

اگر خیلی خلاصه اش کنیم ، شما ابتدا یک جدول بنام کاربران ایجاد خواهید کرد که اطلاعات مایگریشن اون با فرض فیلدهایی که من در نظر گرفتم به شرح زیر خواهد بود :

 

Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('email');
$table->string('first_name');
$table->string('last_name');
$table->string('password');
$table->string('gender');
$table->rememberToken();
$table->timestamps();
});

 

شما بایستی یک جدول دیگر با اسم Followers ایجاد کنید که مایگریشن اون به شرح زیر باشه :

 

Schema::create('followers', function (Blueprint $table) {

 

$table->increments('id');
$table->integer('follower_id')->unsigned();
$table->integer('following_id')->unsigned();
$table->timestamps();
});

 

جدول followers متعلق به جدول users هست و دو تا کلید خارجی داریم داخلش داریم که هر دو به جدول users ارجاع داده شدن ، بنابراین کافیست شما وارد مدل User خودتون بشید که لاراول براتون در مسیر App\User ساخته و دو تا فانکشن زیر رو به آن اضافه کنید :

 

// users that are followed by this user
public function following() {
return $this->belongsToMany(User::class, 'followers', 'follower_id', 'following_id');
}

 

// users that follow this user
public function followers() {
return $this->belongsToMany(User::class, 'followers', 'following_id', 'follower_id');
}

 

کار تمامه و شما خیلی راحت می تونید در هر جایی از برنامه خودتون برای فالو کردن یک یوزر از دستور زیر استفاده کنید :

$userA_object->following()->attach($userB_id);

که کاربر A قصد فالوو کاربر B رو داره و برای برداشتن فالوو هم از دستور زیر استفاده کنید :

$userA_object->following()->detach($userB_id);

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

$a_followers = $a->followers()->get();

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

$a_followers = $a->following()->get();

 

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

 

 

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

خطای Connection could not be established with host smtp.gmail.com [Connection timed out #110]

در صورتی که خطای زیر رو در لاراول موقع ارسال ایمیل دریافت میکنید : 

Connection could not be established with host smtp.gmail.com [Connection timed out #110]

 

میتونید با یه تغییر کوچک در فایل .env مشکل رو حل کنید و حتی سرعت ارسال ایمیل رو هم بالا ببرید:

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

MAIL_DRIVER=smtp

به مقدار زیر تغییر دهید :

MAIL_DRIVER=sendmail
۲۲ آذر ۹۷ ، ۱۲:۳۳ ۲ نظر موافقین ۰ مخالفین ۰
مهندس مهدی حسامی

دریافت مقدار قبلی و جدید یک ستون خاص در تریگر مای اس کیو ال

در زمان استفاده از تریگرها در صورتیکه که بخواهید به مقدار یک ستون دسترسی پیدا کنید کلمه کلیدی OLD بکار می رود طوریکه که بعد از این کمله نقطه قرار داده و اسم ستونی که میخواهید مقدار آن را بخوانید نوشته می شود.

 

مثال :

OLD.Name

NEW.Name

 

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

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

 

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

کپی داده های یک جدول درون جدولی دیگر در mysql

برای کپی کردن داده های درون ستونهای یک جدول به درون جدولی دیگر از کوئری زیر در مای اس کیو ال استفاده کنید:

UPDATE centers
INNER JOIN centers2 ON (centers.record_id = centers2.ID)
SET centers.name = centers2.Name

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

روشن کردن دائمی event_scheduler مای اس کیو ال

روشن کردن دائمی event_scheduler مای اس کیو ال وارد فایل my.ini مربوط به مای اس کیو ال شوید و دستور زیر رو در پائین  [mysqld] اضافه کنید.

event_scheduler=ON
۱۹ آذر ۹۷ ، ۲۲:۲۸ ۰ نظر موافقین ۰ مخالفین ۰
مهندس مهدی حسامی

زمانبند Event Scheduler در مای اس کیو ال (MYSQL )

با استفاده از این خاصیت در MYSQL شما میتونید یک کار خاص رو به MYSQL بسپارید تا در مقاطع زمانی مشخص شده به صورت اتوماتیک انجام بده.
مثلا فرض کنید ما میخواهیم هر روز اطلاعاتی رو که بیش از 10 روز پیش ایجاد شده اند رو پاک کنیم و نمیخوایم این کار رو به PHP یا ASP و... بسپاریم.با استفاده از زمانبند رویداد ما میتونیم به MYSQL بگیم خودش این عمل رو هر روز انجام بده.
مثال زیر فکر میکنم گویای مسئله باشه:

ابتدای کار لازمه که ما زمانبند رو در MYSQL فعال کنیم برای این کار در PHPMYADMIN در قسمت SQL کد زیر را وارد کنید تا زمانبند فعال بشه:

1
SET GLOBAL event_scheduler = ON;

برای روشن کردن دائمی رویدادها هم میتونید وارد فایل my.ini مای اس کیو ال شوید و دستور زیر رو در آن وارد کنید و سرویس رو ریستارت کنید :

event_scheduler=ON


یا

1
SET GLOBAL event_scheduler = 1;


که در صورت درست انجام شدن با پیغام 
Your SQL query has been executed successfully
روبرو خواهید شد
خوب بعد از این کار نوبت به ساخت جدول مثال ما میرسه
برای این مثال ما جدولی به نام cart رو با مشخصات زیر ایجاد میکنیم

1
2
3
4
5
6
7
8
CREATE TABLE cart
(
cart_id INT  AUTO_INCREMENT,
user_id INT,
product_id INT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (cart_id)
) ;


بعد از ایجاد جدول فوق وارد اون میشیم و در قسمت کد SQL کد زیر رو وارد میکنیم

 

1
2
3
4
CREATE EVENT newEvent
ON SCHEDULE EVERY 1 DAY
DO
DELETE FROM cart WHERE created_at <= DATE_SUB(NOW(), INTERVAL 10 DAY) ;


و اما توضیح کد بالا
خط اول که دستور ایجاد یک رویداد جدید به نام newEvent رو صادر میکنه ما به جای newEvent میتونیم نام دلخواه خودمون رو بذاریم
خط دوم مشخص میکنه که این رویداد باید هر روز کاری که گفته میشه رو انجام بده که میتونید به جای EVERY 1 DAY از هر مقدار دیگه استفاده کنید مثلا EVERY 1 SECOND که هر ثانیه عملیات گفته شده رو انجام بده
در خط سوم کلمه کلیدی DO اومده که معرف عملیاتی هست که باید انجام بشه و در خط چهارم دستوری که باید انجام بشه رو ذکر میکنیم که در اینجا رکوردهایی که بیش از 10 روز از ایجادشون میگذره رو حذف میکنیم.
اما یه سری نکات لازم هست که دوستان بدونن.
اگه ما یک زمانبند رو میخوایم از مثلا فردا شروع به کار کنه و یک سال هم کار کنه لازم هست از دستور زیر استفاده کنیم
این دستورات قبل از کلمه کلیدی Do نوشته میشن:

 

1
2
STARTS CURRENT_TIMESTAMP + INTERVAL 1 DAY
    ENDS CURRENT_TIMESTAMP + INTERVAL 1 YEAR


این دستور در خط اول زمان شرع شدن زمانبند رو مشخص میکنه که از 24 ساعت دیگه شروع بشه و در خط دوم مشخص میکنه که یک سال دیگه( از امروز نه از شروع) پایان پیدا کنه
البته ما میتونیم به استارت و پایان تاریخ هم بدیم مثل مثال زیر

1
STARTS '2012-10-30 13:00:00'

البته هنوز تاریخ فارسی ساپورت نمیکنه

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

1
SHOW EVENTS;


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

1
2
3
4
Alter newEvent
ON SCHEDULE EVERY 1 Month
DO
DELETE FROM cart WHERE created_at <= DATE_SUB(NOW(), INTERVAL 10 DAY) ;



همونطور که میدونید کلمه کلیدی Alter مشخص کننده این هست که زمانبند وجود داره و میخواهیم جایگزینی انجام بشه مثل Alter Table
lمثلا دستور زیر نام زمانبندی که وجود داره رو تغییر میده:

1
2
ALTER EVENT newEvent
    RENAME TO myEvent;


خوب و اما از بین بردن زمانبند
دستور زیر زمانبند موجود رو از بین میبره

1
DROP EVENT newEvent;

که به جای newEvent نام زمانبندی که میخوایم از بین بره رو وارد میکنیم
 

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

فعال کردن FEDERATED Engine در مای اس کیو ال (mysql)

بهترین روش برای فعال کردن موتور FEDERATED در مای اس کیو ال روش زیر میباشد :

فایل my.ini مربوط به مای اس کیو ال خود را باز کنید و دنبال [mysqld] بگردید که تقریبا در انتهای فایل قرار دارد و در زیر آن کلمه زیر رو اضافه کنید :

federated

 

یعنی به این شکل باید باشد :

[mysqld]
federated

 

حال فایل رو ذخیره کنید و مای اس کیو ال خودتونو ریستارت کنید تا تغییرات اعمال شود .

تبریک میگم! موتور  federated   برای شما فعال شد و شما میتونید از این امکان جذاب مای اس کیو ال استفاده کنید.

 

آرزوی موفقیت براتون دارم

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

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