آخرین فعالیت ٣۴ دقیقه پیش

@mehdio.o

پارس کلیکی از ۵ ماه پیش

تجربه

5400

  • ٢ هفته پیش @mehdio.o به بحث قابل دیدن نبودن بعضی صفحات سایت جواب داد.

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

  • ٢ هفته پیش @mehdio.o به بحث setInterval در PHP جواب داد.

    چرا از جاوااسکریپت استفاده نمی کنید ؟؟ میتونید یه اینتروال بزارید که بعد از 10 ثانیه در خواست بزنه به یه صفحه بک اند و ریسپانس بگیرید به نظر من منطقی تره

  • فکر کنم امکانش نیست که شما بتونید این کار رو بکنید ! بهترین راه همون validation از خود php هستش وقتی از طریق ajax باشه خیلی راحت تر هم میشه من یک کلاس میشناسم که احتمالا بتونه کمکتون کنه خیلی خوبه !

    https://github.com/davidecesarano/Validation فایل README رو بخونید توضیح داده فقط یه مشکل داره این کلاس که فانکشن required برای فایل کار نمیکنه یکی دیگه درست کنید به اسم required_file و اون تو بزارید اگر ارور $this->file برابر با 4 بود نمی تواند خالی باشد رو به ارایه ارور اضافه کنه

  • ٢ ماه پیش @mehdio.o یک بحث به اسم استفاده از مارک دان درست کرد.

    سلام به همه ی دوستان

    من در حال طراحی یک وبسایت هستم که برای ارسال پست ها نیاز به یک مارک دان دارم !

    حالا میخوام این کار رو انجام بدم از لینکی که پایین مارک دان همین وبسایت هست استفاده کردم و رفتم به صفحه ی گیت هاب اما اونجا لینکی برای دانلود یا آموزش تصب روی وبسایت پیدا نکردم !

    یعنی فقط داشت توضیح میداد که مثلا با این علامت ### یک تگ هدینگ ساخته میشه و اینا اما من برای نصب در وبسایت میخوامش باید چی کار کنم ؟؟

    دوستان اگر مارک دان دیگه ای به جز گیت هاب میشناسن که آموزش نصب داره هم ممنون میشم اگر بگید

    سوال اخر این که این مارک دان ها اطلاعات رو به چه صورت ذخیره میکنن یعنی اینایی که من الان دارم مینویسم وقتی مثلا ### این علامت رو میزارم چیزایی که بعدش میاد رو میزاره توی تگ h1 و بعد به صورت html ذخیره می کنه ؟؟ یا یه فایل با فرمت md میده ؟

  • ٢ ماه پیش @mehdio.o عضو بحث استفاده از مارک دان شد.
  • ٢ ماه پیش @mehdio.o یک بحث به اسم استاندارد ها در MVC درست کرد.

    سلام به همه ی دوستان من چند روز پیش در یکی از تاپیک های قبلی با MVC آشنا شدم و خیلی از طرز کارش خوشم اومد و پس از کلی سرچ و تغییر کد و اینا بالاخره یاد گرفتم ... حالا یه سوال از همه ی دوستان داشتم ! ببینید من الان یه کنترلر دارم به اسم article و یکی هم به اسم profile یک view به اسم خود view هم دارم و بقیش پارامتر های دریافتی من هستن حالا من خواستم که یک view رو بتونم برای همشون استفاده کنم پس در کلاس های کنترلر هام هر جفتشون فانکشن view رو گزاشتم و درست هم کار میکنه برای مثال لینک های زیر رو ببینید که هر جفتشون درست کار میکنند http://localhost/Projects/PHPPROMVC/profile/view/mehdi http://localhost/projects/PHPPROMVC/article/view/2/what-the-hell-is-going-on-here-too شاید براتون سوال باشه که چجوری توی یک view این کار رو کردم

    روشی که من استفاده کردم این بود که در فایل view خودم قسمت های url رو دریافت کردم و اولی رو گزاشتم توی متغیر کنترلر و گفتم اگر کنترلر article بود این جوری نشون بده اگر profile بود اینجوری نشون بده

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

  • ٢ ماه پیش @mehdio.o عضو بحث استاندارد ها در MVC شد.
  • @farahmand من تا حدودی جواب کلی رو گرفتم با سرچ ولی یه سوال رو هنوز نفهمیدم این که مثلا وقتی مطلب جدید یا پروژه جدید گزاشته میشه براش یه فایل جدید درست میشه از روش ساخت فایل دیگه ؟؟ @amin

  • @amin من الان در مورد معماری MVC مطالعه کردم اما جواب سوال ها نبود فکر کنم ! یکی این که در اون جایی که من خونم بخش view خودش یه پوشه بود ! حالا اگر این مثلا project باشه که بازم باید ایندکس فایل رو بیاره ! و این که باز هم من جوب سوال اول رو نگرفتم آیا برای هر کدوم مثلا پروژه ای که میزارن یک صفحه ی جدید با استفاده از روش ساخت فایل جدید استفاده میشه ؟ اگر اون کد پروژه رو بگیم که یه VIEW باشه چطوری وقتی میزنیم روش ریدایرکت میکنه به پروژه ی اصلی این از قابلیت شون هستش ؟ ولی پوشه ها که همچین قابلیتی ندارن !

    البته بازم دارم مطالعه می کنم شاید اون چیزی که میگم غلط باشه شما اگر منبعی میشناسید لطفا بگید ؟

  • دوستانی که با تجربه تر هستند لطفا یکی کمک کنه :(

  • @netwons @amir برای ویندوز به انگلیسی سرچ کنید خیلی براتون آموزش میاره در ویندوز شما از طریق cmd نمیتونید این کار رو انجام بدید روی فولدر رایت کلیک کنید properties بزنید و در بخش security یه سری تنظیمات هست که میتونید با سرچ به دست بیارید که چجوری باید درست کرد

  • @rubik متاسفانه آموزش ها در یودمی بودن و پولی بودن من هم دانلود شده دارم و به دلیل حجم زیاد نمیتونم براتون بفرستمش با سرچ میتونید به راحتی به دست بیارید :)

  • ٢ ماه پیش @mehdio.o یک بحث به اسم استفاده از / در ادرس صفحات جدید درست کرد.

    سلام به همه ی دوستان در موزد ساختن صفحات جدید اونجوری که در آموزش های php انجام میشه فقط از روش بدون / استفاده میشه من میخواستم بدونم برای این که هر مطلب جدید که مثلا اضافه می کنیم با استفاده از / باشه باید چی کار کنیم ؟ یه مورد دیگه بعضی موقع ها برای هر مطلب جدید یک فولدر درست میشه در php چطوری باید این کار رو کرد ؟؟

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

    وارد این لینک بشید و به ادرس بار توجه کنید

    همونطور که میبیند اول یک کد برای پروژه هستش و بعدش بعد از اسلش موضوع هستش و دوباره یک اسلش و نام پروژه البته دوتای اخر به دلیل فارسی بودن توی بعضی مرورگر ها برعکس نشون میده اما ادرس همونطر هست که گفتم حالا میخواستم بدونم یعنی برای این پروژه یک فولدر به عدد 82719 ساخته شده بعد داخل اون یه فولدر ساخته شده که نام دسته ی پروژه هستش و بعد داخل اون فایل php ساخته شده که حاوی اطلاعات هستش ؟؟؟ اخه اینجوری خیلی فولدر تو فولدر میشه یعنی مثلا نمیشد یه فولدر برای این موضوع میساختن بعد داخلش پروژه ها رو دونه دونه میزاشتن ؟؟؟؟ اینجوری خیلی از ساخت فولدر ها جلوگیری میشد ! چرا وقتی فقط کد پروژه رو میزنی خودش بقیه همرو میفهمه و میاره ؟؟؟؟؟؟؟ اسم فایل که index نیست !

    و سوال آخر این که چرا وقتی وارد لینک https://ponisha.ir/project میشیم در مرورگر یه ایندکس برامون نمیاره مگه این یه فولدر نیستش ؟؟ مثل موقعی که میزنی localhost میار index of local host و فایل های بعدی رو میاره تا جایی که بالاخره به یه html , css برسه ؟؟؟ یا میتونم همین پارس کلیک خودمون رو مثال بزنم ! parsclick.net/thread هم هست

    خواهش میکنم این سوال ها رو جواب بدید خیلی ذهنم رو مشغول کرده !!

  • میتونید در مورد google maps apis سرچ کنید من یه سری آموزش عالی در این رابطه دارم که با ساخت دو پروژه هست که یکی car sharing هست و اون یکی مسیر بین دو جایی که میزنید رو تشخیص میده کیلومتر و زمان رو حالا باز خودتون می دونید اگر خواستید همنیجا بگید

  • ۴ ماه پیش @mehdio.o جوابی زیر بحث مشکل گرفتن varriable از کلاس child را لایک کرد.
  • ۴ ماه پیش @mehdio.o به بحث مشکل گرفتن varriable از کلاس child جواب داد.

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

  • ۴ ماه پیش @mehdio.o یک بحث به اسم مشکل گرفتن varriable از کلاس child درست کرد.

    سلام به همه من طبق آموزش های خودتون دارم میرم جلو اما یه به یه مشکل بر خوردم من وقتی از قابلیت ارث بری استفاده می کنم کد های کلاس parent می افتن بالا و برای همین اون varriable هایی که توی کلاس child استفاده کردم میافته زیر اونا برای همین توی فانکشن های بالایی اون رو نمی شناسه و بعد از اون فانکشن ها تعریف می شن اول با متغیر table_name مشکل داشتم که اون رو رفتم بیرون کلاس child تعریف کردم و اینجوری درست شد حالا میخوام توی کلاس user که متغیر های id و username و password و first_name و last_name تعریف می شن هم یه کاری بکنم و اما باید بگم توی ویدیو های شما این کار روش کار می کنه وقتی که static کردمشون هم باز نشد.

    کلاس `datbase_object

    class DatabaseObject {
          protected static $table_name;
          protected static $db_fields;
    
          public static function find_all() {
              return static::find_by_sql("SELECT * FROM " . static::$table_name);
          }
    
          public static function find_by_id($id = 0) {
              $result_array = static::find_by_sql("SELECT * FROM " . static::$table_name . " WHERE id={$id} LIMIT 1");
              return !empty($result_array) ? array_shift($result_array) : false;
          }
    
          public static function find_by_sql($sql = "") {
              global $database;
              $result_set = $database->query($sql);
              $object_array = array();
              while ($row = $database->fetch_array($result_set)) {
                  $object_array[] = static::instantiate($row);
              }
              return $object_array;
          }
    
          private static function instantiate($record) {
              // Could check that $record exists and is an array
              $class_name = get_called_class();
              $object = new $class_name;
              // Simple, long-form approach:
              // $object->id                = $record['id'];
              // $object->username  = $record['username'];
              // $object->password  = $record['password'];
              // $object->first_name = $record['first_name'];
              // $object->last_name     = $record['last_name'];
              // More dynamic, short-form approach:
              foreach ($record as $attribute => $value) {
                  if ($object->has_attribute($attribute)) {
                      $object->$attribute = $value;
                  }
              }
              return $object;
          }
    
          private function has_attribute($attribute) {
              // We don't care about the value, we just want to know if the key exists
              // Will return true or false
              return array_key_exists($attribute, $this->attributes());
          }
    
          protected function attributes() {
              // return an array of attribute keys and their values
              $attributes = array();
              foreach (static::$db_fields as $field) {
                  if (property_exists($this, $field)) {
                      $attributes[$field] = $this->$field;
                  }
              }
              return $attributes;
          }
    
          protected function sanitized_attributes() {
              global $database;
              $clean_attributes = array();
              // sanitize the values before submitting
              // Note: does not alter the actual value of each attribute
              foreach ($this->attributes() as $key => $value) {
                  $clean_attributes[$key] = $database->escape_value($value);
              }
              return $clean_attributes;
          }
    
          public function save() {
              // A new record won't have an id yet.
              return isset($this->id) ? $this->update() : $this->create();
          }
    
          public function create() {
              global $database;
              // Don't forget your SQL syntax and good habits:
              // - INSERT INTO table (key, key) VALUES ('value', 'value')
              // - single-quotes around all values
              // - escape all values to prevent SQL injection
              $attributes = $this->sanitized_attributes();
              $sql = "INSERT INTO " . static::$table_name . " (";
              $sql .= join(", ", array_keys($attributes));
              $sql .= ") VALUES ('";
              $sql .= join("', '", array_values($attributes));
              $sql .= "')";
              if ($database->query($sql)) {
                  $this->id = $database->insert_id();
                  return true;
              } else {
                  return false;
              }
          }
    
          public function update() {
              global $database;
              // Don't forget your SQL syntax and good habits:
              // - UPDATE table SET key='value', key='value' WHERE condition
              // - single-quotes around all values
              // - escape all values to prevent SQL injection
              $attributes = $this->sanitized_attributes();
              $attribute_pairs = array();
              foreach ($attributes as $key => $value) {
                  $attribute_pairs[] = "{$key}='{$value}'";
              }
              $sql = "UPDATE " . static::$table_name . " SET ";
              $sql .= join(", ", $attribute_pairs);
              $sql .= " WHERE id=" . $this->id;
              $database->query($sql);
              return ($database->affected_rows() == 1) ? true : false;
          }
    
          public function delete() {
              global $database;
              // Don't forget your SQL syntax and good habits:
              // - DELETE FROM table WHERE condition LIMIT 1
              // - escape all values to prevent SQL injection
              // - use LIMIT 1
              $sql = "DELETE FROM " . static::$table_name;
              $sql .= " WHERE id=" . $this->id;
              $sql .= " LIMIT 1";
              $database->query($sql);
              return ($database->affected_rows() == 1) ? true : false;
    
              // NB: After deleting, the instance of User still
              // exists, even though the database entry does not.
              // This can be useful, as in:
              //   echo $user->first_name . " was deleted";
              // but, for example, we can't call $user->update()
              // after calling $user->delete().
          }
      }
    

    و کلاس User

    class User extends DatabaseObject {
          protected static $table_name = "users";
          public $id;
          public $username;
          public $password;
          public $first_name;
          public $last_name;
    
          public function full_name() {
              if (isset($this->first_name) && isset($this->last_name)) {
                  return $this->first_name . " " . $this->last_name;
              } else {
                  return "";
              }
          }
    
          public static function authenticate($username = "", $password = "") {
              global $database;
              $username = mysqli_real_escape_string($username);
              $password = mysqli_real_escape_string($password);
    
              $sql = "SELECT * FROM users ";
              $sql .= "WHERE username = '{$username}' ";
              $sql .= "AND password = '{$password}' ";
              $sql .= "LIMIT 1";
              $result_array = self::find_by_sql($sql);
              return !empty($result_array) ? array_shift($result_array) : false;
          }
      }

    و فایل test که توی اون دارم کار ها رو انجام میدم.

    <?php
    require_once ("../../includes/config.php");
    require_once ("../../includes/user.php");
    require_once ("../../includes/database.php");
    require_once ("../../includes/session.php");
    require_once ("../../includes/functions.php");
    require_once ("../../includes/logger.php");
    ?>
    <?php include_layout_template("../layouts/admin_header.php") ?>
    <?php
    $user = User::find_by_id(3);
    $user->password = "122";
    $user->update();
    
    ?>
    <?php include_layout_template("../layouts/admin_footer.php") ?>
    

    این مشکل قبل از این که من کد ها رو بیارم توی database_object وجود نداشت پس فکر می کنم که اشکال از همین باشه

    و اما ارور ها رو هم بگم که شاید از چیز دیگه ای بود بگید.

    Warning: Creating default object from empty value in E:\wamp64\www\photo_gallery\public\admin\test.php on line 12

    و

    Fatal error: Call to undefined method stdClass::update() in E:\wamp64\www\photo_gallery\public\admin\test.php on line 13

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

    خیلی ممنون می شم اگر کمک بکنید.

  • ۴ ماه پیش @mehdio.o به بحث جایگزین n\ در پی اچ پی 7 جواب داد.

    @farahmand اره میدونم اما وقتی توی اینترنت سرچ کردم توی استک اورفلو همه می گفتن که این توی پی اچ پی 7 کار نمیکنه من برای همین فک کردم deprecate شده

  • @amir توی بخش اعلانات گفتید که برای دیسلایک ده هزار تجربه لازمه و توی بخش رهبران اون کنار گفتید هزار تا و چیزی دیگه من الان می تونم دیسلایک کنم با ۱۰۰۰ تجربه نمیدونم توی کدوم ایراد داره ولی اگر بشه ده هزار به نظر من بهتره

  • @mohsenra2 به نظر من میتونید آموزش های پایتون رو ببینید اگر میخواید در حوزه ی وب هم موفق باشید در مورد پایتون برای اندروید تحقیق نکردم اما فک کنم بشه و همینطور میتونید اپ های ویندوز رو بنویسید و این که زبان پایتون برای شروع عالی هستش و طبق نظر خیلی از سایت های معروف پیشنهاد شده اگر میخواید برنامه نویسی رو شروع کنید برید سراغ پایتون چون علاوه بر این که اسونه بسیار مورد استفاده قرار می گیره ولی باید تلاش کنید اگر می خواید برای وب هم به کار ببریدش باید جنگو رو یاد بگیرید ولی به نظر من با این اطلاعاتی که شما دادید فک کنم پایتون بتونه بهترین گزینه برای شما باشه اما بازم حرف من جلوی دوستان با تجربه هیچه و اگر اشکالی داره لطفا بگن دوستان چون من خودم زمان شروع چند سال پیش خیلی تحقیق کردم

  • @farahmand من گفتم تو اپرا هم کار کرد !

  • @behzad خیلی ممنون و این که باید خدمتتون عرض کنم که این اکستنشن برای اپرا و کروم هم هست که من اپرا رو چک کردم کامل و درست کار میکردم اما کروم سرچ کردم بود اما تست نکردم.

  • ۴ ماه پیش @mehdio.o یک بحث به اسم آموزش های ساخت قالب وردپرس درست کرد.

    سلام به همه ی دوستان من یه سوال داشتم در مورد وردپرس با توجه به این که الان وردپرس خیلی در سایت های مختلف استفاده میشه و اغلب قالب های استفاده شده خریداری میشه میخواستم از اقای @amir و دوستانی که آموزش ساخت قالب وردپرس سایت رو دیدن بپرسم که با دیدن این آموزش میشه مثل قالب های حرفه ای که ترجمه میشن و به افزونه هایی مثل ویژوال کامپوزر وصلن ساخت ؟؟ اخه من اسم ویدیو ها رو دیدم بیشتر استایل دادن بود و در وردپرس این خیلی مد نظر نیست و برای کسی که قالب میخره انعطاف پذیری قالب مهمه برای مثال من خودم یه سایت با یک قالب وردپرس خریداری شده اوردم بالا که واقعا عجیب بود !! اگر یک بار از افزونه ی rev slider استفاده کنید این رو میفهمید ! الان برای مثال اسلایدر سایت iliya-media.ir رو ببینید میتونید عکس ها رو تغییر بدید z-indexرو تغییر بدید که کدوم عکس رو باشه کدوم عکس زیر و حتی این که انیمیشن های اومدن و رفتن خاص به عکس ها بدید یا حتی لوپ ها که مثلا بگید مدت زمانی که این اسلاید هستش این دور یه چیز دیگه ای بچرخه و در کل این افزونه واقعا فوق العادس ! یا افزونه ی ویژوال کامپوزر که میشه باهاش قالب رو زیر و رو کرد ! حالا میخواستم بدونم با این آموزش میشه یه همچین چیزی ساخت یا نه ! اگر نمیشه و کسی از دوستان آموزش دیگه ای برای این کار میشناسه لطفا معرفی کنه چه با زبان انگلیسی و چه فارسی.

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

  • ۴ ماه پیش @mehdio.o درسی به اسم ویو جی اس ورژن دوم را لایک کرد.
  • @amir خیلیییی ممنون همونطور که گفتید اول باید check_logged_in رو میزاشتم بعد اون یکی فانکشن رو استفاده میکردم خیلی خیلی ممنونم از توجهتون و صبرتون که این همه مشکل بود توی طرح سوال ولی کمکم کردید :))))

  • @amir اره اون تیکه اشتباه بود درستش کردم

  • @shahryarjb @bvk لطفا دوستان با تجربه کمک کنن مرسی

  • من $session رو توی کد ها ننوشتم که شلوع نشه اما توی توضیحات گفتم که این کار رو انجام دادم اما یه چیز دیگه این که من هیچ اروری نمیگیرن تنها اشکالی که دارم اینه که توی if نمیدونم چرا true و false رو اشتباه میگیره ! چون من توی یکی از کد ها فانکشن login($user) رو صدا کردم و توی این فانشکن هستش که logged_in رو با true مساوی قرار بده اما نمیدونم چرا فانشکن لاگین اون قسمتش کار نمیکنه چون دقیقا همون چیزی رو به من میده که من اون بالا به صورت پیشفرض نوشتم. یعنی وقتی public $logged_in; رو به صورت پیشفرض میزارم رو true که کار بکنه روی همون true میمونه و false نمیشه وقتی هم به صورت پیشفرض میزارم روی false مثلا public $logged_in = false; روی همون false می مونه و true نمیشه در صورتی که پس از صدا کردن فانکشن login این اتفاق باید بیفته و اون تبدیل بشه به true وقتی هم خالی میزارم و پیشفرض چیزی تعریف نمی کنم خودش میزاره روی false ! ببخشید دارم وقتتون رو میگیرم اما خیلی همچین ایرادی برام عجیبه ! @amir

  • @amir این کانستراکتور session هستش

    function __construct() {
            session_start();
            if ($this->logged_in) {
                // Actions To Do When Logged IN
            } else {
                // Actions When Not Logged IN
            }
        }

    user هم کانستراکتور نداره فقط یه سری attribute هستش.

        public $id;
        public $username;
        public $password;
        public $first_name;
        public $last_name;
  • @amir ادیت کردم کد ها رو گزاشتم بعد یه چیزی که میخواستم بگم این که فانکشن های authenticate و اینا رو گفتم که درست هستن فقط مشکل در همون if هست که بالای بالا گفتم چون وقتی علامت not رو بر میدارم درست میشه !

    ولی باز هم گزاشتمشون

    اگر کمک کنید واقعا ممنون میشم از صبح درگیر همین موردم

  • ۴ ماه پیش @mehdio.o یک بحث به اسم مشکل استفاده از بولین در پی اچ پی درست کرد.

    من در حال یادگیری پی اچ پی از آموزش های همین سایت هستم اما در یکی از این آموزش ها یه ایراد دارم که واقعا برام عجیبه و اینجا امیدوارم دوستان بتونن کمک کنن به ویژه اقای @amir که خودشون آموزش ها رو درست کردن من الان در آموزش ۱۴۱ هستم که یه کلاس یوزر رو تا وسطاش رفتیم یعنی فانکشن ها رو نوشتیم اما توی ساخت صفحه ی لاگین یه ایرادی هست یه چیز دیگه این هست که دارم index و login که توی پوشه ی ادمین بود توی آموزش ها میسازم

    <?php
    if (isset($_POST['submit'])) { // Form has been submitted.
        $username = $_POST['username'];
        $password = $_POST['password'];
        // Check database to see if username/password exist.
        $found_user = User::authenticate($username, $password);
    
        if ($found_user) {
            $session->login($found_user);
            redirect_to("index.php");
        } else {
            // username/password combo was not found in the database
            $message = "Username/password combination incorrect.";
            redirect_to("../index.php");
        }
    } else { // Form has not been submitted.
        $username = "";
        $password = "";
    }
    ?>

    این کد هایی هستش که بالای صفحه ی لاگین نوشتم ازمایش های مختلف روش انجام دادم مطمئن شدم کد ها درسته.

    و اما اشکال اصلی اینجاست که من برای index پوشه ی ادمین یه if نوشتم مثل زیر

    if (!$session->logged_in) {
        redirect_to("login.php");
    }

    برای این که اگر کسی لاگین نبود نتونه وارد شه !

    مشکلی که دارم اینه که وقتی لاگین میکنم و یوزر نیم پسوورد رو درست وارد می کنم (مطمئنم) چون یه session ساخته بودم که ایدی رو میگرفت و وقتی میگم اون رو بنویسه مینویسه پس مطمئنم لاگین شدم و دلیل دیگم هم که مشکلم هم هست این هست که وقتی اون علامت تعجب (نشان false بودن اون فانکشن) رو بر میدارم درست کار میکنه یعنی منظورش این هست که اون فانکشن true رو return میکنه دیگه !!

    اما کدهای داخل کلاس session رو که مرتبط با لاگین هست رو پایین ببینید

     public $logged_in;
    
    public function check_logged_in() {
            if (isset($_SESSION['user_id'])) {
                $this->user_id = $_SESSION['user_id'];
                $this->logged_in = true;
            } else {
                unset($this->user_id);
                $this->logged_in = false;
            }
        }
    
        public function login($user) {
            if ($user) {
                $this->user_id = $_SESSION['user_id'] = $user->id;
                $this->logged_in = true;
            }
        }
    
        public function logoout() {
            unset($_SESSION['user_id']);
            unset($this->user_id);
            $this->logged_in = false;
        }
    
        public function is_logged_in() {
            return $this->logged_in;
        }
    public static function authenticate($username = "", $password = "") {
            $sql = "SELECT * FROM users WHERE username = '{$username}' AND password = '{$password}' LIMIT 1";
            $result_array = self::find_by_sql($sql);
            return !empty($result_array) ? array_shift($result_array) : false;
        }

    ببخشید از عکس استفاده کردم چون کد ها زیاد بود و این که من public $logged_in و public $user_id رو بالا نوشته بودم جا نشده بود و همین طور این که پایین یه instance به عنوان $session هم از گرفته بودم

    اگر دقت کنید توی اون کد هایی که من بالای بالا نوشتم از فانشکن $session->login($found_user) استفاده کرده بودم و لاگین باید true رو برمیگردوند ! لطفا @amir و @shahryarjb یا @BVK که تجربه ی زیادی دارن اگر میتونن کمک کنن

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

    خیلی ممنون :)