نمایش نتایج 1 تا 5 از 5

نام تاپیک: مشکل خطای PHP MVC

  1. #1

    Unhappy مشکل خطای PHP MVC

    دوستان من دارم یک سایت مثل دیجیکالا برنامه نویسی میکنم الان به مشکل برخوردم
    ببینین این کدهای MODEL اصلی منه
    <?php


    class Model
    {

    public static $db='';

    function __construct()
    {
    $servername='localhost';
    $username='myd';
    $password='123';
    $dbname='test1';
    $farsi = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8');
    self::$db=new PDO('mysql:Host='.$servername.';dbname='.$dbname,$ username,$password,$farsi);

    }



    public static function getoption(){


    $select='SELECT * FROM tbl-settings';
    $query=self::$db->prepare($select);
    $query->execute();
    $akhar=$query->fetchAll();
    $new_option=[];

    foreach ($akhar as $save){

    $mysetting=$save['setting'];
    $value=$save['value'];
    $new_option[$mysetting]=$value;


    }



    return $new_option;




    }


    }



    ?>


    داخل فایل index اصلی هم فراخوانی کردم اونو ببینین
    <?php


    require_once 'core/App.php';
    require_once 'core/controller.php';
    require_once 'core/config.php';
    require_once 'core/model.php';

    new App;



    ?>



    متود داخل model اصلی رو از نوع استاتیک درست کردم بعدش میرم داخل صفحه مربوط به footer و کلاس Model رو فراخوانی میکنم خوب؟
    ببینین اینجوری
    <?php

    $option=Model:: getoption();



    ?>

    و حالا گفتم به جای شماره تلفن اون شماره تلفنی که داخل دیتابیس هست باید جایگزینش بشه و اینو نوشتم براش
    <?= $option['tel']; ?>

    ولی وقتی اجرا میگیرم شماره تلفن جایگزین نمیشه و این خطا رو میده

    Notice: Undefined index: tel in C:\xampp\htdocs\dddd\footer.php on line 18


    اسم تمام متغیر و کلاس هامم درسته و اسم جدول و ستون های دیتابیس هم درست نوشتم
    اینم بگم وقتی خود صفحه footer.php رو به تنهایی توی مرور گر اجرا میکنم میگه کلاس Model پیدا نشد

  2. #2

    نقل قول: مشکل خطای PHP MVC

    سلام

    وقتی با مشکل مواجه می شوید مرحله به مرحله دیباگ کنید تا مشکل را پیدا کنید. همانطور که ملاحظه می کنید متغییر $option حاوی اندیس tel نمی باشد.

    از printr_r و var_dump برای مشاهده محتوای متغییرها استفاده کنید تا مشکل را پیدا کنید.

    با توجه به کدهای برنامه شما باید حداقل یک آبجکت از مدل بسازید تا constructor اجرا شود و $db مقدار دهی شود. وقتی شما از تابع استاتیک استفاده می کنید constructor اجرا نمی شود. اگر کد خود را بصورت زیر بنویسید نباید مشکلی پیش بیاید.

    $model = new Model();
    $option=Model::getoption();


    هر چند بهتر است برای این کار از توابع استاتیک استفاده نکنید.

    اگر همچنان مشکل داشتید کوئری خود را مستقیم روی دیتابیس ران کنید مثلا با استفاده از phpmyadmin و خروجی آن را بررسی کنید تا مطمئن شوید مشکل از کوئری نمی باشد.

    جهت جلوگیری از ایجاد چند اتصال به دیتابیس باید دقت کنید که new PDO تنها یکبار اجرا می شود:

    function __construct()
    {
    if(self::$db){
    return;
    }
    $servername='localhost';
    $username='myd';
    $password='123';
    $dbname='test1';
    $farsi = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8');
    self::$db=new PDO('mysql:Host='.$servername.';dbname='.$dbname,$ username,$password,$farsi);

    }


    با توجه به اینکه تنها یک نمونه از کلاس Model کافیست، میتوانید کلاس Model را بصورت singleton طراحی کنید. در مورد php singleton مطالعه کنید.

  3. #3

    نقل قول: مشکل خطای PHP MVC

    سلام
    من print _r کردم ولی آرایه رو خالی نشون میده
    ببین مستقیم صفحه footer.php اجرا میکنم میگه کلاس Model پیداا نشد

  4. #4

    نقل قول: مشکل خطای PHP MVC

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


    $select='SELECT * FROM `tbl-settings`';

  5. #5
    کاربر دائمی آواتار plague
    تاریخ عضویت
    آبان 1388
    محل زندگی
    اهواز
    پست
    2,360

    نقل قول: مشکل خطای PHP MVC

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

برچسب های این تاپیک

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •