۶ Matin
مشکل در نمایش عکس پروفایل از طریق آپلود
جامعه پی اچ پی ایجاد شده در ۱۰ خرداد ۱۴۰۱

سلام وقت بخیر

من دارم سعی میکنم به پروژه 7todo تا جایی که میتونم امکانات جدید اضافه کنم که یکی از این موارد اینه که کاربر بتونه عکس مورد نظرش رو برای تصویر پروفایلش آپلود کنه.

من یک ستون به اسم image به جدول users دیتابیس اضافه کردم که مقدار پیش فرضش برای هر کاربر جدید که رجیستر میکنه لینک یک تصویر از اینترنت هست و اون تصویر بصورت پیش فرض برای کاربر نمایش داده میشه و مقدارش رو هم به کمک تابع getLoggedInUser که توی آموزش نوشته شد دریافت میکنم و توی src تگ img میذارم. این تگ img رو درون تگ a قرار دادم که کاربر رو به صفحه مدیریت پروفایلش هدایت میکنه و توی این صفحه هم فرمی برای آپلود عکس قرار داده شده.

عکس با موفقیت آپلود میشه و به پوشه ای که برای محل آپلود در نظر گرفتم هم منتقل میشه و با این تابع ستون image جدول users رو آپدیت میکنم تا به جای اون آدرس پیش فرض اسم تصویر آپلود شده توی این ستون قرار بگیره:

function upImage($imgName)
{
    global $pdo;
    $current_user_id = getCurrentUserId();
    $sql = "UPDATE users
            SET image = :image
            WHERE id = $current_user_id";
    $stmt = $pdo->prepare($sql);
    $stmt->execute([':image'=>$imgName]);
}

مشکل من از اینجا شروع میشه که تصویر جدید نمایش داده نمیشه. عکس با همون تابع getLoggedInUser گرفته میشه و حتی آدرس دهی src تگ img رو هم تغییر میدم ولی با اینکه مقدار فیلد image توی دیتایس آپدیت شده و تغییر کرده مقدار src تگ img رو که از بخش inspect چک میکنم و حتی var_dump میکنم میبینم که مقدار اون آدرسی که پیش فرض ست کرده بودم نمایش داده میشه و اصلا آدرس تصویر جدید رو نمیشناسه.

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

کل فایل‌ها رو اپلود کردم اون بخشی که متغیرش کار نمیده خط 39 فایل tpl-user.php موجود در پوشه tpl هست.

با تشکر

سلام دوست عزیز

بررسی میکنم بهتون اطلاع میدم

محمد گازری ۱۰ خرداد ۱۴۰۱، ۱۸:۱۰

سلام مجدد

۱. لطفا پایگاه داده تون رو زیپ و پیوست کند

۲. چرا autoload رو در فایل init قرار دادید؟

محمد گازری ۱۱ خرداد ۱۴۰۱، ۰۵:۱۴

درود

آپلودش کردم.

فایل autoload رو استاد توی فیلم سوم جلسه اینکلودش کردن.

Matin ۱۱ خرداد ۱۴۰۱، ۰۶:۰۶

ممنون بابت ارسال پایگاه داده، اولین فرصت پروژتون رو بررسی میکنم!

محمد گازری ۱۱ خرداد ۱۴۰۱، ۰۸:۱۴

سلام مجدد

۲ تا ایراد داشتید

۱. زمانی که کاربر لاگین میکنه سشن اطلاعات براش ایجاد میشه و وقتی عکس پروفایل ست میکنه چون این سشن آپدیت نمیشه اطلاعات عکس داخل سشنش نیست بنابر این باید مجدد لاگین کنه (میتونید بعد از بروزرسانی تصویر پروفایل، آدرس عکس رو توی سشن بذارید)

۲. src تصویر در فایل index-tpl باید بشکل زیر باشه

 BASE_URL ?>upload/ $c_user->image ?>


بهترین پاسخ
محمد گازری ۱۱ خرداد ۱۴۰۱، ۱۰:۴۹

درود

متوجه شدم دستتون درد نکنه.

مشکل حل شد متشکرم :)

Matin ۱۱ خرداد ۱۴۰۱، ۱۱:۲۳