۴ نوید
خروجی در function
جامعه پی اچ پی ایجاد شده در ۲۸ بهمن ۱۴۰۰

سلام من یه کدی نوشتم که برای اهراز هویت از سشن استفاده میکنه و اگر مقدار ایمیل و پسورد در دیتابیس بود true بر میگردونه و آیدی اون جدول (یوزر) رو برابر میکنه با $_SESSION['login']

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

وقتی سشن ست میشه من میتونم با var_dump اطلاعاتشو مثل نام و فامیل و سرویس و .... رو چاپ کنم در هدر سایتم ولی ارور خیلی میگیرم یبار چاپ میکنه و یبار چاپ نمیکنه.

سوالم اینه آیا راهی هست که در فانکشن من 2 تا دیتا رو return کنم ؟

مثلا return true; و return $result;

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

نمونه کد من:

فانکشن لاگین اهراز هویت:

function login(&$email, $password)

{

    global $pdo;

    if (!isUserExists($email)) {

        return false;

    }else{

        $sql = "SELECT * FROM tblclients WHERE email = :email AND password = :password";

        $stmt = $pdo->prepare($sql);

        $stmt->execute([':email' => $email, ':password' => $password]);

        $result = $stmt->fetch(PDO::FETCH_OBJ);

        $_SESSION['login'] = &$result->id;

       

        return true;

       

    }

}

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

if(isset($_POST['submit'])){

     if(empty($_POST['email']) && empty($_POST['password'])){

        echo "ایمیل و رمز عبور را وارد کنید";

     }else{

        if(login($_POST['email'] ,($_POST['password'])) == true){

        $user=fech($_SESSION['login']);

        //var_dump($user);

        }else{

            echo "your not logined";

        }

     }

 }

خیلی وقتمو گرفته این یه مشکل و تقریبا 7 روزه دارم سر و کله میزنم باهاش و سوال دیگرم اینه آیا بجز سشن میشه از چیز دیگه ای استفاده کرد که اینقدر داستان نداشته باشه؟

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

یه ویدیو پیوست میکنم

نوید ۲۸ بهمن ۱۴۰۰، ۱۲:۱۸

سلام.

میتونید خروجی تابعو بصورت آرایه یا جیسون داشته باشید.

قبل از fetch کردن سشن، با تابع isset چک کنید وجود دارد یا خیر.

از توابع نوشته شده var_dump بگرید و خروجی رو ببینید و خط به خط برید جلو تا اشکال کارو متوجه شید.

نهایتا اگر نتونستید فیکس کنید، پروژه رو ضمیمه کنید تا فیکسش کنیم.

محسن موحد ۲۹ بهمن ۱۴۰۰، ۰۹:۳۳

مشکل رو پیدا کردم منتها یه سنگ جلوی پاشه

وقتی چند صفحه رو اینکلود میکنیم رو هر کدوم اگر سشن استارت فعال باشه ارور میگیره که فکر میکنم با if بشه اینو حل کرد و مجبور شدم در هدر و لیست منوهام مجددا مشخصات کانشکشن به دیتابیس رو بنویسم و جدا گانه اونو فراخانی کنم.

نوید ۳۰ بهمن ۱۴۰۰، ۱۴:۰۳

در یک صفحه و با if isset سشن رو فعال کنید. دیتابیس رو هم در همون صفحه کانکشنشو بسازید. مثلا قایلی بانام init.php و این فایلو به index.php اضافه کنید تا مجبور نباشید کد تکراری بنویسید. در کنار session_start علامت @ بگذارید تا اگر احیاناً خطایی رخ داد در حالت سایلنت قرار بگیره و خطایی نمایش نده. این مورد مشکلی نداره و میتونید استفاده کنید.

محسن موحد ۳۰ بهمن ۱۴۰۰، ۱۷:۳۸