رایموند
5 سال پیش توسط رایموند مطرح شد
19 پاسخ

خطای SQLSTATE 42000 برای احزار هویت Auth

درود دوستان...
می خوام برخی قابلیت ها از دید کاربران مهمان مخفی کنم...
مثلا کاربر شماره ۱ می توانند نوشته های خود را در نمایه خود ویرایش و حذف کند, ولی کاربر شماره ۲ نمی تواند نوشته های کاربر شماره ۱ ویرایش و حذف کند, این مشکل در نمایه حل شده ولی در ادامه نوشته ها (show.blade.php) این قابلیت ها نشون میده.
کد زیر را به کار بردم و خطا میده:

@if(Auth::user()->id == $endWorld->user_id)
@else
    <div class="float-left" style="display:flex;">
        <a href="{{ route('endWorld.edit', $endWorld->id) }}" class="btn btn-warning btn-sm">ویرایش</a>   
        <form action="{{ route('endWorld.destroy', $endWorld->id) }}" method="post">
            @csrf
            @method('DELETE')
            <input type="submit" value="حذف" class="btn btn-danger btn-sm">
        </form>
    </div>
@endif

...

public function show($slug, User $user)
{
    $endWorld= EndWorld::where('id', $slug, 'user_id', $user->id)->orWhere('slug', $slug)->firstOrFail()->get();
    return view('endWorld.show', compact('endWorld', 'user'));
}

خطای زیر:

Illuminate\Database\QueryException 
SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; 
check the manual that corresponds to your MariaDB server version for the right syntax to use near '`slug` = ? limit 1' at line 1 (SQL: select * from `endWorldes` where  `id` = tst-1 `slug` = tst-1 limit 1)

ثبت پرسش جدید
mahdi khanzadi
تخصص : backend developer at Snapp mar...
@khanzadimahdi 5 سال پیش مطرح شد
1

بهتره از قابلیت policy و دستور can استفاده کنید.

داخل policy اینکه چه کسی به چی دسترسی داره رو تعریف کنید و بعدش درون blade اون رو با can مدیریت کنید.

http://laravel-school.com/posts/an-introduction-to-laravel-policy-15


حسام موسوی
تخصص : طراح و برنامه نویس
@hesammousavi 5 سال پیش مطرح شد
0

سلام اینو دقیقا از کجا اوردید ؟

EndWorld::where('id', $slug, 'user_id', $user->id)

رایموند
تخصص : مختصص وردپرس - برنامه نویس لار...
@Raymond 5 سال پیش آپدیت شد
0

@hesammousavi
این در در نمایه استفاده شده و کار کرده .. می خوام در خود نوشته ها استفاده کنم کار نمی کنه:
کد زیر:

class ProfileController extends Controller
{
    public function index(User $user)
    {
        $endWorld= EndWorld::where('user_id', $user->id)->get();
        return view('profile.index', compact('user', 'endWorld'));
    }
}

کد زیر که گفتی برای EndworldController هستش..

EndWorld::where('id', $slug, 'user_id', $user->id)

TEFO
تخصص : لاراول
@tefo.ha27 5 سال پیش آپدیت شد
1

متد where سه حالت داره
یا سه تا متغییر میگیره که یکیش اخیاریه
یا ارایه میگیره(که باید از این روش استفاده کنین)
یا کلوژز همون تابع بدون نام
یعنی کد شما باید به صورت زیر در بیاد

EndWorld::where([['id', $slug], ['user_id', $user->id]])

ویا

EndWorld::where('id', $slug)->where('user_id', $user->id)

رایموند
تخصص : مختصص وردپرس - برنامه نویس لار...
@Raymond 5 سال پیش مطرح شد
0

@tefo.ha27
روش اول و دوم متد where تست کردم, کار نکرد.
خطای زیر:

Property [title] does not exist on this collection instance. 

TEFO
تخصص : لاراول
@tefo.ha27 5 سال پیش مطرح شد
0

@endworld یک dd از مدل EndWorld::get بگیرین ببینیم چی توش هست یا از مایگریشن مربوطه رو نشونم بدین


رایموند
تخصص : مختصص وردپرس - برنامه نویس لار...
@Raymond 5 سال پیش مطرح شد
0

@tefo.ha27

Schema::create('endWorldes', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('title');
            $table->integer('user_id');
            $table->string('slug');
            $table->text('description');
            $table->string('image')->nullable();
            $table->timestamps();
        });

TEFO
تخصص : لاراول
@tefo.ha27 5 سال پیش مطرح شد
0

@endworld
EndWorld::get اینو با dd دامپ کنین


رایموند
تخصص : مختصص وردپرس - برنامه نویس لار...
@Raymond 5 سال پیش مطرح شد
0

@tefo.ha27

Collection {#558 ▼
  #items: array:3 [▼
    0 => EndWorld{#554 ▼
      #connection: "mysql"
      #table: "endWorldes"
      #primaryKey: "id"
      #keyType: "int"
      +incrementing: true
      #with: []
      #withCount: []
      #perPage: 15
      +exists: true
      +wasRecentlyCreated: false
      #attributes: array:8 [▶]
      #original: array:8 [▶]
      #changes: []
      #casts: []
      #dates: []
      #dateFormat: null
      #appends: []
      #dispatchesEvents: []
      #observables: []
      #relations: []
      #touches: []
      +timestamps: true
      #hidden: []
      #visible: []
      #fillable: []
      #guarded: array:1 [▼
        0 => "*"
      ]
    }
    1 => EndWorld {#555 ▼
      #connection: "mysql"
      #table: "endWorldes"
      #primaryKey: "id"
      #keyType: "int"
      +incrementing: true
      #with: []
      #withCount: []
      #perPage: 15
      +exists: true
      +wasRecentlyCreated: false
      #attributes: array:8 [▶]
      #original: array:8 [▶]
      #changes: []
      #casts: []
      #dates: []
      #dateFormat: null
      #appends: []
      #dispatchesEvents: []
      #observables: []
      #relations: []
      #touches: []
      +timestamps: true
      #hidden: []
      #visible: []
      #fillable: []
      #guarded: array:1 [▼
        0 => "*"
      ]
    }
    2 => EndWorld {#556 ▼
      #connection: "mysql"
      #table: "endWorldes"
      #primaryKey: "id"
      #keyType: "int"
      +incrementing: true
      #with: []
      #withCount: []
      #perPage: 15
      +exists: true
      +wasRecentlyCreated: false
      #attributes: array:8 [▶]
      #original: array:8 [▶]
      #changes: []
      #casts: []
      #dates: []
      #dateFormat: null
      #appends: []
      #dispatchesEvents: []
      #observables: []
      #relations: []
      #touches: []
      +timestamps: true
      #hidden: []
      #visible: []
      #fillable: []
      #guarded: array:1 [▼
        0 => "*"
      ]
    }
  ]
}

TEFO
تخصص : لاراول
@tefo.ha27 5 سال پیش مطرح شد
0

خب احتمالا درست باشه خودتون چک کنین attributes توش title وجود داره؟
ولی الان سوالم اینه title رو چجوری نوشتین که اررور میده


رایموند
تخصص : مختصص وردپرس - برنامه نویس لار...
@Raymond 5 سال پیش مطرح شد
0

@tefo.ha27

#attributes: array:8 [▼
        "id" => 1
        "title" => "تست ۱"
        "user_id" => 1
        "slug" => "tst-1"
        "description" => "تست ۲"
        "image" => "1565636317.jpg"
        "created_at" => "2019-08-12 18:58:37"
        "updated_at" => "2019-08-12 18:58:37"
      ]

...

{{ $endWorld->title }}

TEFO
تخصص : لاراول
@tefo.ha27 5 سال پیش مطرح شد
0

@endworld
این $endWorld توی یک حلقه نیست؟


رایموند
تخصص : مختصص وردپرس - برنامه نویس لار...
@Raymond 5 سال پیش مطرح شد
0

@tefo.ha27
نه داخل حلقه نیست,چون در فایل show.blade.php هستش نیازی به حلقه نمی باشد..


TEFO
تخصص : لاراول
@tefo.ha27 5 سال پیش مطرح شد
0

خب نیاز دارین که حلقه بزنین چون این endWorld یک کالکشنی از ارایه هاست


رایموند
تخصص : مختصص وردپرس - برنامه نویس لار...
@Raymond 5 سال پیش مطرح شد
0

@tefo.ha27
حلقه رو گذاشتم, کل نوشته رو توی ادامه نوشته نشون داد...
اصلا نباید توی ادامه نوشته حلقه گذاشت...


mahdi khanzadi
تخصص : backend developer at Snapp mar...
@khanzadimahdi 5 سال پیش مطرح شد
0

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

۱− نام مایگرشن ها و کلاس های مدل شما مفهومی نیست کلمه endWorldes یعنی چی؟ و به چه منظوری استفاده میشه؟‌
۲− دقیقا میخواید چیکار کنید؟ به سوال شما جواب داده شد و درست هم بود! اما یک سوال دیگه مطرح کردین در ادامه ی سوال قبلی! بهتر بود این سوال رو کلا مستقل ایجاد میکردید.
۳− قطعه کدی که میخواید تصحیح بشه به صورت کامل چیه؟ همشو باید کامل ارسال کنید. شاید مشکل کلا از یه قسمت دیگه ای باشه که شما در تشخیص اون اشتباه کردین.

@hesammousavi بهتر بود اقای موسوی برای تمام سوال هایی که قراره پرسیده بشه همون اول مثل گیت هاب یه template میذاشتن که کاربران با پر کردن اون سوال رو مطرح کنن. مثلا اینکه ورژن نرم افزاریشون چیه + سیستم عاملشون چیه (یه چیزی مثل تمپلیت issue توی گیت هاب)
خیلی از سوال هایی که مطرح میشه صرفا فقط مطرح شده و ارزش نداره بخواد ادم حتی نگاه کنه بهشون چه برسه بخواد پاسخ بده! طرف بدون هیچ جستجو و تحقیق و اصلا اطلاعات علمی کامپیوتر رو روشن کرده میخواد کدنویسی کنه و هر سوالی که براش پیش میاد یهو میاد میپرسه و وقت ده ها نفر دیگه رو میگیره اخرشم به نتیجه نمیرسه و دلیلش اینه که خودش نمیدونه داره چیکار میکنه و حتی بار فنی کافی نداره.

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


رایموند
تخصص : مختصص وردپرس - برنامه نویس لار...
@Raymond 5 سال پیش مطرح شد
0

@khanzadimahdi
در مورد آخر بگم ... من کم و بیش به لاراول آشنایی دارم و ویدیو های لاراول تماشا می کنم ...
مشکلی که داره بخوام چیزی رو پیاده کنم که خود ویدیو آموزش نداده...
کدهایی که نوشتم سالمه , ولی اون بخشی که بخوام پیاده کنم در بخش های دیگر تداخل ایجاد می کنه و خطاهای که جستجو می کنم اصلا جوابی وجود نداره...

۱. اسم پایگاه داده است(اسم پایگاه داده discusses هستش ولی به دلخواه موقع ارسال پست نام کاربری خودم قرار دادم)
۲. می خوام قابلیتی برای کاربران مهمان و عضو شده مخفی کنم, یعنی کاربر اول عضو شده در نمایه خود قابلیت مثلا ویرایش و حذف پست خود دارد, ولی کاربر دوم نمی تواند در نمایه کاربر اول قابلیت ویرایش و حذف پست داشته باشد و برعکس ...این مورد توی نمایه حل شده...
حالا می خوام توی ادامه نوشته کاربران این قابلیت اجرا کنم دقیقا مثل قابلیت نمایه باشه..
۳.کدی که ارسال کردم کامله...


mahdi khanzadi
تخصص : backend developer at Snapp mar...
@khanzadimahdi 5 سال پیش مطرح شد
1

بهتره از قابلیت policy و دستور can استفاده کنید.

داخل policy اینکه چه کسی به چی دسترسی داره رو تعریف کنید و بعدش درون blade اون رو با can مدیریت کنید.

http://laravel-school.com/posts/an-introduction-to-laravel-policy-15


mahdi khanzadi
تخصص : backend developer at Snapp mar...
@khanzadimahdi 5 سال پیش مطرح شد
1

خط زیر رو به policy انتقال بدید و به جای if از can استفاده کنید. کد تمیز تر و کمتر میشه.

Auth::user()->id == $discuss->user_id

و اینکه درون کنترلر ها هم policy رو بنویسید. چک کردن سطوح دسترسی سمت فرانت صرفا باعث امنیت نمیشه! سمت فرانت طرف میتونه کلیک راست کنه دکمه ادیت اظافه کنه و بعد ادیت بزنه.
سمت سرور هم باید چک بشه که من توی کدهای شما ندیدم. در کل از policy توی این موارد استفاده کنید.

من توی موردی که مطرح کردم جسارت نکردم به سطح دانش شما. منظورم با اقای موسوی بود تا سایت بهتر بتونه فعالیت کنه.
@hesammousavi


رایموند
تخصص : مختصص وردپرس - برنامه نویس لار...
@Raymond 5 سال پیش مطرح شد
0

@khanzadimahdi
ممنو از جوابت ... تست می کنم.


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام