Skip to content

baasankhuu-p/php-1234

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

55 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Сургалтын тухай :

PHP хэл нь 1995 онд бий болсноосоо эхлэн дэлхий нийтийг 25 жилийн турш байлдан дагуулсаар байгаа бөгөөд дэлхий дээр байгаа бүх вэбийн 79.2% нь PHP хэлээр бичигдсэн байдаг нь гайхалтай. 
  
  Тийм ч учраас та хаана ч ажилд орсон PHP дээр бичигдсэн вэбүүдтэй ажиллах, засах, цааш нь хөгжүүлэх үүрэг хүлээдэг бөгөөд энэхүү шалтгаанаар вэб хөгжүүлэгч хүний заавал сурсан байх ёстой нэг хэлэнд PHP хэл ордог билээ. 
  
  Таны яг одоо харж буй энэ сайт хүртэл PHP хэл дээр хийгдсэн юм.
Хэрэв та PHP хэлийг сурахаар шийдсэн бол энэхүү сургалтанд сууснаар та PHP хэлний ямар ч мэдлэггүй байж байгаад бүрэн эхнээс нь сурч эзэмших болно. 
  
  PHP хэлээр та Backend, Frontend, өгөгдлийн сантай ажиллах, ухаалаг төхөөрөмжүүдийн rest api талыг бүтээх, бусад вэб аппуудад хэрэглэгдэх онлайн сэрвис хийх, сэрвэр болон пс дээрх файлын системд төрөл бүрийн скрипт бичиж администраци хийх гээд бүх л төрлийн ажлыг хийж болдгоороо универсаль хэл юм. 
  
  Хэрэв танд ганц хэл сурах боломж байгаад орчин үеийн динамик вэбийг хийх шаардлага гарсан бол гагцхүү PHP ээс өөр хэл энэ шаардлагыг хангаж чадахгүй юм.
Орчин үеийн өндөр хурдтай стартапуудын эринд та ямар нэг санааг үнэхээр бизнес болж чадах уу үгүй юу гэдгийг эхлээд шалгах шаардлага байнга гардаг. 
  Хэрэв та санаагаа амжилт олохыг мэдэхгүй байж өндөр өртөгтэй технологиудыг ашиглан системээ бүтээвэл цаг хугацаа мөнгө их ордог ба бүтээгдэхүүн гараад зах зээл дээр амжилт олохгүй байх эрсдэл маш өндөр байдаг. 
  
  Тэгвэл энэ тохиолдолд стартапууд PHP хэрэглэн бизнес санааг хурдтай бүтээгдэхүүн болгож зах зээлд гаргаад хэр хүлээж авч байгааг хурдан шалгах боломжтой байдаг. 
  
  Ингэснээр та их хэмжээний мөнгийг хэмнэж олон санааг зах зээл дээр нэвтрүүлж турших боломж бүрддэг байна. 
  
  PHP хэл нь дэлхийд хамгийн амархан сурах боломжтой хэлүүдийн нэгэнд ордог нь мэдээж ийм бололцоо олгодог. 
  
  Дээрээс нь frontend, backend бүгдийг нэг хэлээр нэг хүн хийчих боломжтой тул зардал болон цаг хугацаа хамгийн бага ордог давуу тал байдаг. 
  
  Хэрэв PHP дээр хийсэн бүтээгдэхүүн амжилт олоод нэвтрээд эхэлбэл харин аажмаар орчин үеийн технологи руу хөрвүүлж улам сайжруулах тактикийг баримтлах нь стартапуудад ашигтай байх болно. 
  
  1234.mn сайт ийм стратегиар ажиллаж буй тул одоо хүртэл вэб нь анхны PHP хувилбараар байсаар байгаа бөгөөд саяхнаас л Next.js рүү хөрвүүлэгдэж эхэлсэн билээ.
Бид энэхүү сургалтаараа өөрсдийн гэсэн хялбар фрэймворк хийж түүгээрээ орлого зарлагыг бүртгэдэг систем бүтээх болно. 
  
  Өөрөөр хэлбэл PHP ашиглан хэрхэн систем бүтээх аргуудад нь суралцах болно. Мөн дээр нь та вэб сэрвэр болон өгөгдлийн сангийн сэрвэрийн тохиргоо, администрацын үндсэн чадварт суралцаж эцэст нь хийсэн вэбээ shared болон физик сэрвэрт байрлуулж үнэгүй SSL холбож сурах юм!

Сургалтын агуулга нь дараах бүлгүүдэд хуваагдаж байна :

Ажиллах орчноо тохируулах

- Apache, mysql, php суулгах тохируулах
- Аpache вэб сэрвэр дээр виртуал хост тохируулах
- VS Code ийг PHP хөгжүүлэлтэд зориулан тохируулах
- Mac гайхалтай шинэ терминал суулгах тохируулах
- Mysql gui tool суулгах
- Mysql workbench суулгах

PHP хэл

- Вэб сайт болон вэб сэрвэр хэрхэн ажилладаг тухай
- Хувьсагч, оператор, давталт, массив, дотоод функцүүд
- Тэмдэгт мөртэй ажиллах
- Функц, ламбда функц
- Файлтай ажиллах
- Формтой ажиллах, HTTP протокол
- SESSION, Cookie ашиглах
- PHP7, PHP8 юу нэмэгдсэн бэ
- Бусад хэлний элементүүд ...

MySQL өгөгдлийн сантай ажиллах

- Mysqli сан
- Phpmyadmin
- Mysql query browser програм ашиглах
- Mysql хэрэглэгч үүсгэх тохируулах
- Терминалаас mysql рүү хандах
- SQL, encoding, index
- Өгөгдлийн санг архивлах болон сэргээх
- Нууцлал хамгаалалт, sql injection

Өөрсдийн гэсэн хялбар фрэймворк бүтээх

- Фронт контроллер
- Өгөгдлийн сантай mysqli ашиглан хандах сан
- Бусад туслах функцүүдийн сан
- Нууцлал хамгаалалт, cross site scripting, injection
- Logging, monitoring

Хувийн санхүү хөтлөх систем

- Өөрсдийн фрэймворкоо ашиглана
- Худалдаж авсан темплэйтийг хэрхэн ашиглахыг сурна
- Бүртгүүлэх, нэвтрэх, хуудасны хамгаалалт
- Орлого зарлагаа бүртгэх
- Орлого зарлагын төрлийг бүртгэх
- Тухайн сарын байдлыг графикаар харах
- Сар бүрийг хооронд нь харьцуулж харах
- Юун дээр их зарлага гаргаж буйг олох
- Shared хост дээр байрлуулах
- Физик сэрвэр дээр суулгах, SSL тохируулах

PHP Сургалт

Lesson 1 - PHP сургалтанд тавтай морил, энэ сургалтаар та юу сурах вэ?

    1. Ажиллах орчноо тохируулах
    
        - VS Code PHP
        - Виртуал хост
        - Xampp тай танилцах тохируулах

    2. PHP Үндэс

        - Вэб сайт болон вэб сервэр хэрхэн ажилладаг тухай
        - Хувьсагч, оператор, давталт, массив, дотоод функцууд
        - Тэмдэгт мөртэй ажиллах
        - Функц, ламбда функц
        - Файлтай ажиллах
        - Формтой ажиллах, HTTP протокол
        - SESSION, Cookie ашиглах
        - Хуудаслагч
        - PHP7, PHP8 юу нэмэгдсэн

    3. DataBase - тэй ажиллах
        
        - Mysqll сан
        - Phpmyadmin
        - Mysql query browser программ ашиглах
        - Mysql хэрэглэгч үүсгэх тохируулах
        - Терминалаас Mysql рүү хандах
        - SQL, Encoding, Index
        - Өгөгдлийн санг архивлах болох сэргээх
        - Нууцлал хамгаалалт, SQL injection
    4. Өөрсдийн гэсэн хялбар фреймворк бүтээх
        
        - фронт контроллер
        - Өгөгдлийн сантай mysql ашиглан хандах сан
        - Бусад туслах функцүүдийн сан
        - Нууцлал хамгаалалт, cross site scripting, injection
        - Logging, monitoring

    5. Хувийн санхүү хөтлөх систем

        - Өөрсдийн фреймворкоо ашиглана
        - Худалдаж авсан темплейтийг хэрхэн ашиглахыг сурна
        - Бүртгүүлэх, нэвтрэх, хуудасны хамгаалалт
        - Орлого зарлагаа бүртгэх
        - Орлого зарлагын төрлийг бүртгэх
        - Юун дээр их зарлага гаргаж буйг олох
        - Shared хост дээр байрлуулах 
        - Физик сервэр дээр суулгах, SSL тохируулах

    6. PHP7 обьект хандлтат программчлал
        
        - Класс, абстракт класс, интерпейс
        - Удамшил, полиморфизм, Функцийн дахин тодорхойлолт
        - Static methods
        - Magic methods
        - Traits
        - Namespace, use statement, alias
        - Class autoloading
        - Regular expression
    7. Мэргэжлийн MVC фреймворкийг бүтээх
        - Model, View, Controller, Router хэрхэн бичих
        - Error handling
        - Rest api PHP дээр хийх
        - CORS тохиргоо
        - Twig ашиглан темплэйтээр View ээ хийх
        - URL - ийг стандарт болгох, htacces тохиргоо
        - PDO ашиглан mysql тэй ажиллах
        - Dependency management, гуравдагч сангуудтай танилцах, төсөлдөө оруулах 
        - Namespace, class autoloading, scalar types ..
        - internationalization
    8. Онлайн хувцасны худалдааны дэлгүүр
        - MVC фреймворкоо ашиглана
        - Бүтээгдэхүүний жагсаалт, хайлт
        - Бүтээгдэхүүний дэлгэрэнгүй хуудас
        - Худалдаачин бүртгүүлэх нэвтрэх
        - Бүтээгдэхүүнийг удирдах
        - Категорийг удирдах
        - Хэрэглэгчдийг удирдах
        - Сагсанд хийх худалдан авах
        - Имейл илгээх 
        - Сервэрт байрлуулах

Lesson 2 - [Ажиллах орчноо бэлтгэх] windows дээр xampp, mysql gui tool суулгах

    
    1. Xampp суулгах ` https://www.apachefriends.org/ `
    2. mysql gui tool суулгах ` https://downloads.mysql.com/archives/gui/ `
    3. Суулгасны дараа query browser - луу орж serverhost: 'localhost' username: 'root ' гэж бөглөнө

Lesson 3 - [Ажиллах орчноо бэлтгэх] windows дээр apache виртуал хост тохируулах шалгах

    
    1. C: disk -> xampp -> xampp-control.exe файлыг taskbar-луугаа оруулчна аа //Байнга ашиглах учир
    2. C: disk -> xampp -> htdocs /* defaulf sites */
    3. C: disk -> xampp -> apache -> conf -> extra -> httpd-vhosts.conf үүнийг VS code-ээрээ нээнэ. /*<virtaulhost > энэд байсан өгөгдлийг өөрчилнө бусдын устгах ж.нь: ## тэмдэгт устгах </virtaulhost >*/
    өөрийн вэбэд тохируулна
    4. xampp-аа нээж apache->conf->Apache(httpd.conf) FIND(htdocs)
    <Directory>....</Directory> хуулж аваад 
    /*<virtaulhost > Энэд хийж өгнө өө </virtaulhost >*/

    OR Example
    /*
    <VirtualHost *:80>
        ServerAdmin bsk68270@gmail.com
        DocumentRoot "D:\php-1234\php-learn\www"
        ServerName php-learn.com
        ServerAlias www.php-learn.com
        ErrorLog "D:\php-1234\php-learn\logs\error.log"
        CustomLog "D:\php-1234\php-learn\logs\access.log" common
        <Directory "D:\php-1234\php-learn\www">
            #
            # Possible values for the Options directive are "None", "All",
            # or any combination of:
            #   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
            #
            # Note that "MultiViews" must be named *explicitly* --- "Options All"
            # doesn't give it to you.
            #
            # The Options directive is both complicated and important.  Please see
            # http://httpd.apache.org/docs/2.4/mod/core.html#options
            # for more information.
            #
            Options Indexes FollowSymLinks Includes ExecCGI

            #
            # AllowOverride controls what directives may be placed in .htaccess files.
            # It can be "All", "None", or any combination of the keywords:
            #   AllowOverride FileInfo AuthConfig Limit
            #
            AllowOverride All

            #
            # Controls who can get stuff from this server.
            #
            Require all granted
        </Directory>

    </VirtualHost>
    */
    5. сервэрээ асаачаад /*php-learn.com*/ нэртэй сервэрээр хандахын тулд system-дээ бүртгүүлнэ C:\Windows\System32\drivers\etc энэ замаар ороод hosts гэсэн файлыг дэлгэцрүү хуулж аваад өөрчилнө. Дараа нь үндсэн folder- луу хуулна /*Учир нь System32 дотор өөрчлөлт хийж болохгүй*/
        Example:
                127.0.0.1       localhost
                ::1             localhost
                127.0.0.1       php-learn.com

Lesson 4 - [Ажиллах орчноо бэлтгэх] VS Code -ийг PHP-д зориулан тохируулах, нэмэлт extension-ууд суулгах

    1. ctrl+shipt+p find(open settings (JSON))
        {
            "editor.fontSize": 12,
            "editor.fontFamily": "'DEJAVU SANS MONO',   monospace",
            "editor.wordWrap": "on",
            "editor.lineHeight": 28,
            "editor.cursorBlinking": "smooth",
            "explorer.openEditors.visible": 0,
            "editor.suggestSelection": "first",
            "vsintellicode.modify.editor.suggestSelection": "automaticallyOverrodeDefaultValue",
            "workbench.colorCustomizations": {
                "statusBar.background": "#263238",
                "statusBar.debuggingBackground": "#263238",
                "statusBar.noFolderBackground": "#333"
            },
            "editor.minimap.enabled": false,
            "workbench.activityBar.visible": true,
            "explorer.sortOrder": "type",
            "files.trimFinalNewlines": true,
            "editor.renderIndentGuides": true,
            "workbench.editor.highlightModifiedTabs": false,
            // "files.autoSave": "onFocusChange",
            "[javascript]": {
                "editor.defaultFormatter": "esbenp.prettier-vscode"
            },
            "editor.suggestSelection": "first",
            "vsintellicode.modify.editor.suggestSelection": "automaticallyOverrodeDefaultValue",
            "git.ignoreMissingGitWarning": true,
            "liveServer.settings.donotShowInfoMsg": true,
            "explorer.confirmDelete": false,
            //"terminal.integrated.shell.windows": "C:\\Program Files\\Git\\bin\\bash.exe",
            "javascript.updateImportsOnFileMove.enabled": "always",
            "explorer.confirmDragAndDrop": false,
            "diffEditor.ignoreTrimWhitespace": true,
            "liveServer.settings.donotVerifyTags": true,
            "terminal.integrated.fontFamily": "MesloLGS NF",
            "terminal.external.osxExec": "hyper",
            "terminal.integrated.shell.osx": "/bin/zsh",
            "git.enableSmartCommit": true,
            "workbench.iconTheme": "Monokai Pro (Filter Machine) Icons",
            "workbench.startupEditor": "newUntitledFile",
            "[html]": {
                "editor.defaultFormatter": "vscode.html-language-features"
            },
            "workbench.colorTheme": "One Dark Pro Nord",
            "editor.formatOnSave": false,
            // Enable per-language
            "[php]": {
                "editor.formatOnSave": true,
                "editor.defaultFormatter": "kokororin.vscode-phpfmt"
            },
            "window.zoomLevel": 3
        }
    2. Extension
        - Atom One Dark
        - Auto Close Tag
        - Auto Rename Tag
        - Bracket Pair Colorizer
        - Color Info
        - Format HTML in PHP
        - MySQL
        - Path Intellisense
        - PHP Intelephense
        - PHP Debug
        - PHP Namespace Resolver
        - phpfmt - PHP formatter
            /*error гарна ийм үед Environment->Environmetn Variables->Path(System Variables)->new->(C:\xampp\php)*/

Lesson 5 - [Ажиллах орчноо бэлтгэх] Mac дээр xampp суулгах

    ...etc

Lesson 6 - [Ажиллах орчноо бэлтгэх] Mac дээр apache виртуал хост тохируулах

    ...etc

Lesson 7 - [Ажиллах орчноо бэлтгэх mac] Шинэ терминалыг суулгаж тохируулах

    ...etc

Lesson 8 - [php үндэс] PHP хэл үүссэн түүх, дэлхийгээр өргөн тархсаны цаад шалтгаануудтай танилцая

    PHP ==> PERSONAL HOME PAGE - (RASMUS LERDORF 1994 онд PHP хэлийг зохиосон) Гэхдээ сонирхолтой нь PHP эхлээд программчлалын хэл биш харин templateng system байжээ. 
        PHP=>presentation  C=>business logic

    Web Browser <==> HTTP Server <->CGI Programm <-> Database
    
    PHP төстэй PERL
    - PERL ==> Apache
        1. Request - ийн дурын hook-m холбогдох боломжтой. 
        2. Ж нь: URL translation hook (url==>virtual host)
            - Үүнийг shared host дээр ISP зөвшөөрөх боломжгүй. Бусдын request-ийг аваад эхэлбэл ...
        3. Тиймээс RERL зөвхөн нэг бүтэн физик сэрвэрт нэгл вебийг ажиллууллахад шаардлагатай болох тул үнэтэй байсан
    - PHP ==> Apache
        1. Content generation hook
        2. ISP ууд PHP - д дуртай байсны шалтгаан
            - shared host дээр ашиглахад бусад вебүүдтэй зөрчилдөөгүй тул хямд
            - Санах ой, cpu хязгаарлалтууд хийж болно
            - Виртуал хостын хязгаараас гарч чадахгүй
             - Нэг физик серверийг ашиглан хэдэн зуун хүнд сарын 5$ оор хост өгөх боломжтой
        3. Wordpress гарч ирэх бүр дэлгэрүүлсэн

Lesson 9 - [php үндэс] Вэб хэрхэн ажилладаг вэ? PHP ямар үүрэгтэй оролцдог вэ?

Компьютер бүр API хаягтай байна Ж.нь `127.0.0.1`
// hosts, DNS(domain name server), Apache, Mysql, Browser

Lesson 10 - [php үндэс] Эхнийхээ php скриптийг бичицгээе! header.php, footer.php файлуудыг ашиглах

    1. <?php ... энэд php үйлдлээ хийнэ ?>
    2. Header, Footer хэсгээ өөр газар хадгалчаад түүнийгээ -require ашиглаж холбоно
        - require "./header.php"
        - require "./footer.php"
    

Lesson 11 - [php үндэс] PHP бүхэл, бутархай, бүүл хувьсагчид, тайлбар хэрхэн бичих, loosely typed хэл

    1.  PHP тайлбар бичих 
        -/* Олон мөр */,
        -// нэг мөр,
        -# нэг мөр
        
    2. PHP is loosely typed language
    3. Хувьсагч дүрэм, case sensitive, бүхэл тоон хувьсагч, var_dump
        - Хувьсагч ($name)
        - case sensitive ($name, $Name хоёр өөр хувьсагч)
    4. бутархай тоон хувьсагч, var_dump
        - PHP өөрөө мэдэрдэг
        $a = 1.24 echo $a;//OUTPUT: 1.24
        - var_dump нь хувьсагчийн төрлийг харуулдаг
        $a = 1.24 var_dump($a);//output: float(1.24)
    5. boolean хувьсагч
        $isValid = false;
        var_dump($isValid)//output: bool(false)
    6. null утга
        - null утга
        var_dump(p)//output: null =>/*p хувьсагч байхгүй*/

Lesson 12 - [php үндэс] PHP дээр алдааг гаргадаг болгох, php хаах таг, short tag

    1. зарлагдаагүй хувьсагч, алдааг үзүүлэх тохиргоо
        - алдааг үзүүлэх тохиргоо (ini_set("display_errors",1))
        - алдааг нуух тохиргоо (ini_set("display_errors",0))
    2. print vs echo /*ижилхэн гэхдээ ялгаа нь echo олон хувьсагчийг хэвэлж болно*/
    3. PHP short tag
        - <?= "asdsd" ?>//output: asdsd;

Lesson 13 - [php үндэс] Тэмдэгт мөр зарлах, тэмдэгт мөр дотор хувьсагч оруулах

    1. '' ба "" тэмбэгт мөрүүд
        - $header = "hello1"; echo $header;//output:hello1;
        - $header = '<div style="width:50;height:20">header</div>';//output:header;
        - $txt="three o'clock"; echo $txt;//three o'clock
        - $txt='three o\'clock'; echo $txt;//three o'clock
    2. Тэмдэгт мөрийг залгах
        - $fname = "Boldoo";
        $lname = "Dorj";
        $fullname = $fname+$lname;
        echo $fulname;//output:BoldooDorj
        - $fname = "Boldoo";
        $lname = "Dorj";
        $fullname = $fname . " -ийн " . $lname;
        echo $fullname;//output:Boldoo-ийн Dorj
        
    3. Тэмдэгт мөр дотор хувьсагч оруулах
        - $fname = "Boldoo";
        $lname = "Dorj";
        $fullname = "$fname-ийн $ lname";
        echo $fullname;//Boldoo-ийн Dorj 
        - $fname = "Болд";
        $lname = "Дорж";
        $fullname = {$fname}ийн $lname//output:Болдийн Дорж

Lesson 14 - [php үндэс] Тэмдэгт мөрийг heredoc, nowdoc ашиглан үүсгэх, php дотроос html кодыг хэрхэн бичих тухай

    1. heredoc
        $lname = "1";
        $fname = "2";
        $fullname = {$lname}ийн $fname;

        - $rows = <<< MSG
        $fullname = $lname . "ийн" . $fname;
        echo $fullname;123456789
        //output 1ийн 2 = 1ийн 2; echo 1ийн 2;123456789
        MSG;
    2. nowdoc
        - $msg = <<< 'MSG'
        $fullname = $lname . "ийн" . $fname;
        echo $fullname;
        <div>123456</div>
        /*output $fullname = $lname . "ийн" . $fname; echo $fullname;
        123456*/
        MSG;

Lesson 15 - [php үндэс] Тогтмол зарлах, тогтмолыг хэрхэн хэрэглэх тухай

    1. inc хавтас(Folder) үүсгэх
        <?php
        require "./inc/header.php";

        require "./inc/footer.php"
        ?>
    2. define ашиглах
        - define('HOME','/Library/WebServer');
            echo HOME;/*output:/Library/WebServer
            HOME = 'asvasv';//error;
            */
    3. const ашиглах
        - const PI = 3.14; 
            echo PI;//output: 3.14;
    4. Predefined constants
        - PHP_INT_MAX, PHP_INT_MIN,PHP_VERSION ... гэх мэт;

Lesson 16 - [php үндэс] Magic constants ашиглах, require файл руу мэдээлэл дамжуулах

    1. Magic constants
        - echo __DIR__; гэх мэт// тухайн файлын замыг харуулдаг
    2. include файлаас хувьсагч тогтмол ашиглах
    3. require файлруу хувьсагч дамжуулах

Lesson 17 - [php үндэс] Php арифметик операторууд болон тэдгээрийн товч бичиглэлүүд

    1. Арифметик операторууд, эсрэг утга олгох
        - $a = 3; $b = 7; 
            echo $a+$b;//output: 10;
            echo $a-$b;//output: 4;
            echo $a*$b;//output: 21;
            echo $a/$b;//output: 0.4...;
        - $a = 3; $b = 2; 
            echo $b ** 10;//output: 2^10;
            echo $b ** $a;//output: 2^3;
            echo -$a//output: -3;

    2. Хаалт ашиглах, бодох дараалал
        - $a = 3; $b = 2; echo ($a + $b) - 2*2// output: (3+2)-2*2 = 1;
        - $a = 3; $b = 2; echo $a + $b*2 - 2*2// output: 3+2*2-2*2 = 3;
    3. Үлдэгдэл бодох
        - $a = 4; $b = 2; echo $a % $b; //output: 0
        - $a = 4; $b = 2; echo $a / $b; //output: 2
    4. Нэмэгдүүлэх, хорогдуулах
        - $a = 3; echo $a++;//output:3
        - $a = 3; echo ++$a;//output:4
        - $a = 3; echo $a--;//output:3
        - $a = 3; echo --$a;//output:2
    5. Logic эсрэг
        - $isValid = false; $isValid = !$isValid var_dump($isValid)//output:true;

Lesson 18 - [php үндэс] Reference буюу заалттай танилцая

    1. Тэмдэгт мөрийг залгах   
        - $name = "saraa"; $name = $name . " naraa" echo $name;//output: saraa naraa
    2. reference буюу заалт
        - $a = 23; $b = $a; echo "$a $b";//output:23 23;
        - $a = 28; echo "$a $b";//output:28 23;
        + $a = 23; $b = &$a; 
        $b = 15;
        echo "$a $b";//output:15 15;

Lesson 19 - [php үндэс] if else нөхцөл шалгалтыг ашиглах

    $a = 10;
    1. Логик операторууд ба if
        - if($a==10)
            {echo "Хэвийн"}
    2. else
        - if($a==10)
            {echo "Хэвийн"} 
        else 
            {echo "Хэвийн бус"}
    3. else if
        - 
        if($a==10)
            {echo "Хэвийн"} 
        else if($a>10) 
            {echo "Халуун"} 
        else
            {echo "Хүйтэн"}

Lesson 20 - [php үндэс] Массивтай танилцацгаая, тоон болон тэмдэгт индекст массив, стандарт бус индекс ашиглах

    1. Массив зарлах
        - $students = array("1","2","3","4","5","6","7","8");
        - $months = ["jun","feb","mar"];
    2. Массивын индекс
        - echo $months[1];//output:feb
    3. Тоон бус индекс ашиглах
        - $phones = ["naraa"=>"95622020","ganaa"=>"88452412"];
        echo $phones["naraa"];//output:95622020
        echo $phones["bataa"];//output:warning: undefined array key "bataa";
    4. Стандарт бус индекс
        - $fruits = [2=>"samar",7=>"guzeelzgene","toor"];
        echo $fruits[7]//output:guzeelzgene
    5. Тэмдэгт мөртэй индексээр хандах
        $name = "Саранцэцэг";
        echo $name[2]//output:? /*р үсэг монгол үсэг учир танихгүй байна*/
        $name = "Jordan";
        echo $name[3]//output:d
    6. Массивийн доторхыг хэвлэж харах
        print_f($phones)

Lesson 21 - [php үндэс] Массивыг хэвлэж үзүүлэх arr функцийг бичиж скриптүүддээ холбох нь

    $phone = ["9045","5432"];

    function arr($array){
        echo '<pre>';
        print_r($array);
        echo '</pre>';
    }
    arr($phone);

Lesson 22 - [php үндэс] Массивтай ажиллах үндсэн үйлдлүүд, массивтай ажилладаг функцүүд

    $data = [1,2,3,4,5];
    1. Массив эсэхийг шалгах, is_array
        echo is_array($data);//output: bool(true);
    2. Тоон хязгаараар массив үүсгэх, range
    
    $number = range(1,100);//1-100;
    3. Массивийн элементийг тоолох, count, sizeof
        echo sizeof($number);//output:100;
    4. Массивийн элементийг тэмдэгт мөр дотор хэвлэх
        $name = "Баяр";
        $students = ["neg","hoyor","Сүх","dorj"]
        echo "$name бол хүн харин $students[2] хүн мөн үү"//output: Баяр бол хүн харин Сүх хүн мөн үү
    5. Массивыг задлах extract,explode
        $data = ["one"=>001,"two"=>002,"three"=>003];
        extract($data);
        echo $one;//output: 001;
        
        $str = "one two three four";
        $strfull = explode(" ",$str);//strfull["one", "two", "three", "four"];

    6. Массивт элемент нэмэх
        $data = [01,02,05];
        $data[] = 04;//[01,02,05,04]

Lesson 23 - [php үндэс] Массивтай ажиллах функцүүд : range, sort, array_slice, array_values, array_merge, array_search

    1. Массивын төгсгөлийн элементийг авах, array_pop
        $data = [1,2,3,4,5,6];
        echo array_pop($data);//output:6
    2. Массиваас элемент хасах, индекс нь алга болно
        $data = [0=>"one",1=>"two",2=>"three",3=>"five",4=>"four"];
        unset($data[1]);//$data[0=>"one",2=>"three",3=>"five",4=>"four"]
    3. Массивыг дахин индексжлэх, array_values
        $data = array_values($data)//$data[0=>"one",1=>"three",2=>"five",3=>"four"]
    4. Массивыг эрэмблэх sort, rsort, ksort
        $months = ["jun","feb","mar"];
        sort($months);
        echo $monthsl;//output: Array( [0] => fed [1] => jun [2] => mar);

        ksort($months);
        echo $monthsl;//output: Array( [2] => fed [1] => jun [0] => mar);

        rsort($months);
        echo $monthsl;//output: Array( [0] => mar [1] => jun [2] => fed);

        krsort($months);
        echo $monthsl;//output: Array( [2] => mar [1] => jun [0] => fed);
    5. Массивийг холих (shuffle)
        $nums = range(1,6);
        shuffle($nums);//shuffle 5 4 2 1 3 6 e.x
    6. Массивын индексүүдийг эсвэл утгуудыг авах, array_keys, array_values
        $data = [0=>"one",1=>"two",2=>"three",3=>"five",4=>"four"];
        $ners = array_keys($data);
        echo $ners;//output: 0 1 2 3 4
        $ners = array_values($data);
        echo $ners;//"one","two","three","five","four"]
    7. Массивуудыг нийлүүлэх, array_merge
        $a = range(1,5);$b = range(8,15);
        $c = array_merge($a,$b);//1 2 3 4 5 8 9 10 11 12 13 14 15
    8. Массивын хэсгийг тасалж авах, array_slice
        $data = [0=>"one",1=>"two",2=>"three",3=>"five",4=>"four"];
        $newArr = array_slice($data,1,3);//two three five
    9. Массиваас хайх, array_search, in_array
        $data = [0=>"one",1=>"two",2=>"three",3=>"five",4=>"four"];
        echo array_search("five",$data);//output:3 
        in_array //boolean true false

Lesson 24 - [php үндэс] Глобал массив $_SERVER ийн тухай. Foreach давталыг ашиглаж сурцгаая!

    - foreach ($_SERVER as $key => $item) {
        echo '[' . $key . ' : ' . $item . ']<br><br>';
    }
    - foreach ($_SERVER as $item) {
        echo '[' . $item . ']<br><br>';
    }

Lesson 25 - [php үндэс] for давталтыг ашиглаж сурцгаая

    1. 1-100 хүртэлх бүх тоог хэвлэ
        for($i = 1; $i <= 100;$i++){
            echo $i . ' ';//output: 1 2 3 ... 100;
        }
    2. 100-1 хүртэлх бүх тоог хэвлэ
        for($i = 100; $i > 0;$i--){
            echo $i . ' ';// 100 99 98 ... 1;
        }
    3. 100-200 хүртэлх бүх сондгой тоог хэвлэ
        for($i = 101; $i <= 200;$i+=2){
            echo $i . ' '; //output: 101 102 103 ... 200;
        }

        for($i = 101; $i <= 200;$i++){
            if($i%2!=0){
                echo $i . ' ';//output: 101 102 103 ... 200;
            }
        }
    4. x тооны бүх хуваагчдыг ол
        $x = 15;
        for($i = 2; $i <= $x/2; $i++){
            if($x%$i==0){
                echo $i . ' ';// output: 3 5
            }
        }

Lesson 26 - [php үндэс] while, do while давталтуудыг сурцгаая

    1. while loop
        $i = 1;
        while($i<=100){
            echo $i++ . ' ';// output: 1 2 3 .. 100;
        }
    2. do while loop
    $i = 1;
    do{
        echo $i++ . ' ';// output: 1 2 3 .. 100;
    }
    while($i<=100);

Lesson 27 - [php үндэс] ternary оператор, ?? операторыг хэрэглэх нь

    - { ? }
            $shoo = 5;    $urdun = $shoo > 3 ? "hojloo" : "hojigdloo";
    - { ?? }
        $a = $b;//$b = null default uydee
        $a = $b ?? 15;
        echo $a;//output: 15; $b нь null учир 15 гэсэн утга авна

Lesson 28 - [php үндэс] switch оператортой танилцая

    $dun = 80;
    switch($dun){
        case $dun < 60: $unelgee = 'F';break;
        case $dun < 70: $unelgee = 'D';break;
        case $dun < 80: $unelgee = 'C';break;
        case $dun < 90: $unelgee = 'B';break;
        case $dun <= 100: $unelgee = 'A';break;
        default: $unelgee = 'Todorhoigui'
    }
    echo $unelgee;//output: B;

Lesson 29 - [php үндэс] Тэмдэгт мөртэй ажиллах, substr, str_replace, mb_ функцийн ач холбогдол

    $mn = "Php хэл "д
    $en = '<h1 style="color:green">PHP ==> Hypertext Processor</h1>'
    
    1. strlen
        echo strlen($mn);//output: 11 урт
    2. trim
        echo strlen(trim($mn));//output: 10 хоёр талд нь байсан хоосон зайг танан
    3. strtolower, strtoupper, mb_
        echo strtoupper($en);//output: PHP ==> HYPERTEXT PROCESSOR
        echo strtolower($en);//output: php ==> hypertext processor
    4. substr, mb_substr
        echo substr($mn,0,3);//output: Php
        echo mb_substr($mn,4,3);//output: xэл
        echo mb_substr($mn,-1,1);//output: л -1 гэвэл хойноос нь авна
    5. str_repeat
        $mn = str_repeat("java ",5);
        echo $mn//output:java java java java java 5 удаа давтан

Lesson 30 - [php үндэс] Тэмдэгт мөртэй ажиллах, strpos, strstar, htmlspecialchars, implode, explode функцүүд

    1. str_replace
        $mn = "Php хэл ";
        $en = '<h1 style="color:green">PHP ==> Hypertext Processor</h1>'
        $newEng = str_replace('h1','h4',$en);//'<h4 style="color:green">PHP ==> Hypertext Processor</h4>'
        
        $newEng = str_replace('h1','h4',$en);//'<h4 style="color:green"h1 h1 h1>PHP ==> Hypertext Processor</h4>'
        echo $count;//output: 5

    2. strpos, stripos, strstr
        $mn = "PХэлхэлhp хэл ";
        - echo mb_strpos($mn,"хэл");//output:4
        - echo mb_stripos($mn,"хэл");//output:1 учир нь том жижиг ялгаагүй
        - echo mb_strstr($mn,"хэл");//output: hp хэл 
        - echo mb_stristr($mn,"хэл");//output: хэлhp хэл 
        
    3. htmlspecialchars
        $en = '<h1 style="color:green">PHP ==> Hypertext Processor</h1>'
        echo $en;//output: PHP ==> Hypertext Processor
        echo htmlspecialchars($en);//output: <h1 style="color:green">PHP ==> Hypertext Processor</h1>
    4. implode, join, explode
        - explode(тэмдэгт мөрийг массив рүү)
        $str = "one two three";
        $arr = explode(" " , $str);["one" "two" "three"];
        - impode(массив-ыг тэмдэгт мөр болгоно)
        $newstr = implode('-', $arr);//one-two-three     

Lesson 31 - [mysql] Mysql Query browser дээр баз үүсгэж users, balance table-үүдийг үүсгэн гадаад түлхүүр тохируулах

    query browser нэвтрэх
    create new schema

Lesson 32 - [mysql] Mysql workbench ашиглан Mac дээр өгөгдлийн сангаа үүсгэцгээе

Lesson 33 - [mysql] VS Code Mysql extention ашиглаж өгөгдлийн сан руугаа хандацгаая

Lesson 34 - [mysql] Mysql үүссэн түүх, PHP хэлнээс өгөгдлийн сантай ажиллах үндсэн интерфэйсүүдийн тухай

Lesson 35 - [mysql] mysql өгөгдлийн сантай PHP ээс холбогдох, холбогдох үеийн алдаануудтай ажиллах

   phpinfo();
   $conn = mysqli_connect('127.0.0.1', 'root', '', 'php_learn');

Lesson 36 - [mysql] mysql ээс өгөгдөл унших, php-ийн STORE RESULTSET болон USE RESULTSET горимын ялгааг ойлгох

    $resultset = mysqli_query($conn, "select * from users");
    echo mysqli_num_rows($resultset);

Lesson 37 - [mysql] Өгөгдлийн сан руу бичих, устгах, өөрчлөлт хийх нь [insert, update, delete]

    mysqli_errno() - DB алдаа гарвал дугаарыг харуулна
    - insert()
        mysqli_query($conn, "insert into users values(null,'dorj','95959595','123456789','2020-05-01')");
    - update()
        mysqli_query($conn, "update users set name = 'bayarmaa', phone=95959494,create_date='2022/12/15' where idusers = 2");
    - delete()
        mysqli_query($conn, "delete from users where idusers=4");

Lesson 38 - [mysql] SQL Injection халдлага гэж юу вэ? Хялбар халдлагын жишээг хийж харцгаая

    Select * from users where pass='ascva' or 2=2; -- ascasc ascas
    
    //injection халдлага "" ''
    $password = "123asd4 'or 3=3 --'"; //Халдлагад өртлөө
    $query = "select * from users where pass = '$password'";
    echo $query . '<br>';
    $rs = mysqli_query($con, $query);
    $row = mysqli_fetch_row($rs);
    if ( /* $row */$row !== null) {arr($row);
        foreach ($row as $key => $item) {
            echo $key . '=>' . $item . '<br>';
        }} else {
        echo 'Нууц үг буруу байна';
    }

Lesson 39 - [mysql] Prepared statement гэж юу вэ, select дээр бүгдээрээ ашиглаж үзэцгээе!

    1. mysqli_prepare//query бэлтгэдэг функц
        $stmt = mysqli_prepare($con, "select * from users where idusers>?");
    2. mysqli_stmt_bind_param
        $filterId = 0;
        mysqli_stmt_bind_param($stmt, 'i', $filterId);
        /*
            i =>	corresponding variable has type integer
            d =>	corresponding variable has type double
            s =>	corresponding variable has type string
            b =>	corresponding variable is a blob and will be sent in packets
        */
    3. mysqli_stmt_execute
        mysqli_stmt_execute($stmt);
    4. mysqli_stmt_bind_result
        mysqli_stmt_bind_result($stmt, $id, $name, $phone, $pass, $date);
    5. mysqli_stmt_fetch
        while (mysqli_stmt_fetch($stmt)) {
            echo "<br>" . $name . ' => ' . $id . ' => ' . $pass . ' => ' . $date;
        }
        OR
            mysqli_stmt_fetch($stmt);
            echo "<br>" . $name . ' => ' . $id . ' => ' . $pass . ' => ' . $date;
    6. mysqli_stmt_close
        mysqli_stmt_close($stmt);
    7. mysqli_stmt_errno,mysqli_stmt_error//Prepared алдааг олох
    8. Prepared statement 2 давуу тал
        //Хамгаалагдаэна

Lesson 40 - [mysql] Mysqli unbuffered resultset ийг ашиглаж сурцгаая!

    1. mysqli unbuffered resultset
         //mysqli_query($con, "slect * from users", MYSQLI_USE_RESULT);-

Lesson 41 - [mysql] Prepared statement ашиглан олон өгөгдлийг insert хийх, update хийх

    1. $data бэлтгэх
        $data = [[30, 'bat', 9594, 12], [31, 'bdmaa', 959449, 'b2a0d1a8']];
    2. mysqli_prepare
        - insert();
            $stmt1 = mysqli_prepare($con, "insert into users values(?,?,?,?)");
        - update();
            $stmt1 = mysqli_prepare($con, "update users set pass = ? where idusers = ?");
    3. mysqli_stmt_bind_param
        - insert(); 
            mysqli_stmt_bind_param($stmt1, 'isis', $id, $name, $phone, $pass);
        - update();
            $updatepass = "123A";
            $if_Id = 31;
            mysqli_stmt_bind_param($stmt1, 'si', $updatepass,$if_Id);
    4. mysqli_stmt_execute
    - insert(); 
        foreach ($data as $user) {
            $id = $user[0];
            $name = $user[1];
            $phone = $user[2];
            $pass = $user[3];
            echo "<br>$id  $name  $phone $pass";
            mysqli_stmt_execute($stmt1);
        }
    - update();
        mysqli_stmt_execute($stmt1);
    5. mysqli_stmt_close
        mysqli_stmt_close($stmt1);

Lesson 42 - [framework] Шинээр виртуаль хостоо фрэймворкдоо зориулан тохируулцгаая

    - Төсөл өө эхлүүлнэ ээ

Lesson 43 - [framework] Front controller гэж юу вэ, түүний давуу тал. Үүсгэж туршицгаая!

    $page = $_GET['page'];
    echo $page;
    require '../pages/' . $page . '.php';//гэж URL үүсгэж php темплейтийг ажиллуулж болно

Lesson 44 - [framework] URL дээрээс index.php хэсгийг арилгаж цэвэрхэн URL-тэй болцгооё

    echo $_SERVER['REQUEST_URI'];

    echo '<pre>';
    print_r($_SERVER);

    echo $_SERVER['QUERY_STRING'];
    echo '<br>';

    echo $_GET['name'];
    /*.htaccess гэсэн файлд
    
    <IfModule mod_rewrite.c>
        RewriteEngine on
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteRule ^(.*)$ index.php [PT,L]
    </IfModule>
    
    тохиргоог хийж өгнө
    */

Lesson 45 - [framework] Фронт контроллероо бичиж ажиллуулж туршицгаая!

    define('ROOT', dirname(dirname(__FILE__)));
    //PATH: php-learn.com/users/home?id=123&type=машин&price=24&color=улаан

    //front controller бусад скриптийг URL хамааруулж дуудна
    //URL
    $script = $_SERVER['REDIRECT_URL'] . '.php';
    echo '<br>SCRIPT: ' . ROOT . '/pages' . $script;
    require ROOT . '/pages' . $script;
    function dd($arr)
    {
        echo '<pre>';
        print_r($arr);
        exit;
    }

Lesson 46 - [framework] Фронт контроллерийг сайжруулж байхгүй url дээр 404 хуудас үзүүлдэг болгох'

    $page = @$_SERVER['REDIRECT_URL'];
    if (empty($page)) {
        require ROOT . '/pages/home.php';
    } else {
        $script = ROOT . "/pages$page.php";
        echo $script . "<br>";
        if (file_exists($script)) {
            require $script;
        } else {
            require ROOT . '/pages/404.php';
        }
    }

Lesson 47 - [framework] Фрэймворк дотроо Prepared statement ашигласан _select, _fetch функцүүдийрг нэмэх

    1. conf.php
        <?php
        const DB_HOST = '127.0.0.1';
        const DB_NAME = 'php_learn';
        const DB_USER = 'root';
        const DB_PASSWORD = '';
    2. db.php
        <?php
            //Бичиглэл богино
            //DB ажиллаж буй үйлдэл бүрийг

            @$con = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
            if (mysqli_connect_errno() === 1049) {
                die("ийм нэртэй баз байхгүй");
            } elseif (mysqli_connect_errno() === 1045) {
                die('Хэрэглэгчийн мэдээлэл буруу байна');
            } elseif (mysqli_connect_errno()) {
                die('Алдаа гарлаа: ' . mysqli_connect_error());
            }

            function _select($sql, $types, $sqlParams, &...$bindParams)
            {
                global $con;
                $stmt = mysqli_prepare($con, $sql);

                mysqli_stmt_bind_param($stmt, $types, ...$sqlParams);
                mysqli_stmt_execute($stmt);
                mysqli_stmt_bind_result($stmt, ...$bindParams);
                return $stmt;
            }
            function _fetch($stmt)
            {
                return mysqli_stmt_fetch($stmt);
            }
    

Lesson 48 - [framework] Заалт ашиглан бичлэгийн тоог тодорхойлох, _close хаах функцийг нэмэх

    - db.php
        function _select(&$stmt, &$count, $sql, $types, $sqlParams, &...$bindParams)
        {
            global $con;
            $stmt = mysqli_prepare($con, $sql);

            mysqli_stmt_bind_param($stmt, $types, ...$sqlParams);
            mysqli_stmt_execute($stmt);
            mysqli_stmt_store_result($stmt);
            $count = mysqli_stmt_num_rows($stmt);
            mysqli_stmt_bind_result($stmt, ...$bindParams);
            return $stmt;
        }

        function _close_stmt($stmt)
        {
            mysqli_stmt_close($stmt);
        }

        function _close_con($stmt = null)
        {
            global $con;
            if (!is_null($stmt)) {
                _close_stmt($stmt);
            }
            mysqli_close($con);
        }
        function _fetch($stmt)
        {
            return mysqli_stmt_fetch($stmt);
        }
    - login.php
        $stmt = _select($stmt, $count, "select idusers,name,pass from users where idusers>?",
            'i',
            [2],
            $col1, $col2, $col3);
        echo "<br>Нийт: $count<br>";
        while (_fetch($stmt)) {
            echo "<br>$col1 ==> $col2 ==> $col3";
        }
        //_close,_close_stmt функц нэмэх
        //Stmt close hiisnii daraa connection - oo close hiine
        //_close_stmt($stmt);
        //_close_con();

        //Hoyulang ni close hiine
        _close_con($stmt);

Lesson 49 - [framework] Өгөгдлийн санд өгөгдөл бичих, өөрчлөх, устгах үүрэгтэй _exec функцийг бичицгээе!

    LOGIN PHP
        // $success = _exec(
        //     "update users set name = ?,pass = ? where idusers=?",
        //     'ssi',
        //     ['Баяраа', '1234', 3], $count
        // );

        // $success = _exec(
        //     "delete from users where idusers=?",
        //     'i',
        //     [30], $count
        // );
        // $success = _exec(
        //     "insert into users set name = ?,pass = ?",
        //     'ss',
        //     ['Бат', '1234'], $count
        // );
    DB PHP
        function _exec($sql, $type, $sqlParam, &$count)
        {
            global $con;
            $stmt = mysqli_prepare($con, $sql);
            mysqli_stmt_bind_param($stmt, $type, ...$sqlParam);
            $success = mysqli_stmt_execute($stmt);
            $count = mysqli_stmt_affected_rows($stmt);
            _close_stmt($stmt);
            return $success;
        }

Lesson 50 - [framework] Параметергүй query-г ажиллуулах _selectAll функцийг бичицгээе!

    DB PHP
        function _selectAll(&$stmt, &$count, $sql, &...$bindParams)
        {
            _select($stmt, $count, $sql, null, null, ...$bindParams);
        }
    LOGIN PHP
    _selectAll($stmt, $count, "select idusers,name,pass from users",
    $col1, $col2, $col3);

Lesson 51 - [web] Санхүүгийн вэбдээ ашиглах супер темплэйтийг framework дээрээ хуулж ажиллуулж танилцацгаая!

    https://1234.mn/upload/course/files/20210612_47template.zip

Lesson 52 - [web] Бүртгүүлэх хуудасны интерфэйсийг хийх, DOMAIN тогтмолыг фрэймворкдоо нэмэх нь

    Тогтмол хадгалах хэсэгтээ нэмж өгчөөд дуудаж ашиглана
    const DOMAIN = 'php-learn.com';
    Example: <?=DOMAIN?>,ucfirst(DOMAIN),strtoupper(DOMAIN) гэх мэт?>

Lesson 53 - [web] Нэг скриптээс нөгөө рүү өгөгдлийг POST, GET ашиглан дамжуулах тухай

    <form class="form-horizontal my-4" action="/sign-up-save" method="POST">//POST нь URL дээр харуулдаггүй GET нь URL дээрээс уншиж болдог
        <input type="text" class="form-control" value="Баасанхүү" id="username" name="username" placeholder="Нэрээ оруулна уу">
    </form>

Lesson 54 - [web] sign-up-save скриптээс өгөгдлийг mysql рүү бичих, өгөгдлийг ариутгах post функцийг фрэймворкд нэмж ашиглах

    - sign-up-save.php
        $username = _post('username', 50);
        $phone = _post('phone', 15);
        $email = _post('email', 150);
        $userpassword = _post('userpassword', 50);
        /*extract($_POST);//Postoor orj irsen key-iin huvisagchid hadgalna  */
        _exec(
            "insert into users set name=?, pass=?, phone=?, email=?",
            'ssss',
            [$username, $userpassword, $phone, $email],
            $count);
    -db.php
        function _post($data, $length)
        {
            $value = $_POST[$data];
            if (!is_null($length) && mb_strlen($value) > $length) {
                $value = mb_substr($data, 0, $length);
                echo "<script>alert('SECURITY ALERT: $data нэртэй индексийн урт нь $length ээс хэтэрсэн тул тухайн уртаар нь хэмжиж бүртгэв.')</script>";
            }
            return $value;
        }

Lesson 55 - [web] Бүртгэхийн өмнө төрөл бүрийн шалгалтуудыг гүйцэтгэх нь

    //Aldaag massiv-d hadgalna
    //Хэрэглэгчийн нэр шаардлага хангаж буй эсэх
    $errors = [];
    if (mb_strlen($username) < 4) {
        $errors[] = 'Нэр хэт богино байна';
    }
    //ийм утастай хэрэглэгч бүртгэлтэй эсэх
    _select($stmt, $count, 'select count(*) from users where phone = ?', 's', [$phone], $numberOfPhone);
    _fetch($stmt);
    if ($numberOfPhone > 0) {
        $errors[] = 'Дугаар бүртгэгдсэн байна';
    }
    //ийм имейлтэй хэрэглэгч бүртгэлтэй эсэх
    _select($stmt, $count, 'select count(*) from users where email = ?', 's', [$email], $numberOfemail);
    _fetch($stmt);
    if ($numberOfemail > 0) {
        $errors[] = 'Email бүртгэгдсэн байна';
    }
    //Нууц үг хоорондоо таарч буй эсэх
    if ($userpassword != $confirmpassword) {
        $errors[] = 'Нууц үг хоорондоо таарахгүй байна';
    }
    if (sizeof($errors) > 0) {
        dd($errors);
    } else {
        _exec(
            "insert into users set name=?, pass=?, phone=?, email=?",
            'ssss',
            [$username, $userpassword, $phone, $email],
            $count);
    }

Lesson 56 - [web] Бүртгэж дууссаны дараа home хуудас руу үсэрдэг болгоё

    INDEX PHP
        function redirect($url)
        {
            header("Location: $url"); //Хуудасрүү үсэрнэ
            exit;
        }
    SIGN UP SAVE PHP
        _exec(
            "insert into users set name=?, pass=?, phone=?, email=?",
            'ssss',
            [$username, $userpassword, $phone, $email],
            $count);
            redirect("/home");

Lesson 57 - [web] Session болон Cookie гэж юу вэ? Тэдгээрийн үүргийг HTTP протоколын үүргийн хамт ойлгоцгооё!

    Тайлбар хичээл
    PHP нь session_start() функцээр хийдэг үйлдлүүд  Анхаар ??? <?php>-ийн урд нь html болон хоосон зай байж болохгүй

Lesson 58 - [web] Session ашиглаж бүртгүүлсэн хүний мэдээллийг home хуудас дээр гаргах

    session_start();
    $_SESSION['username'] = $username;
    $_SESSION['phone'] = $phone;
    $_SESSION['email'] = $email;

Lesson 59 - [web] Бүртгүүлэхэд үүссэн алдааг session-р дамжуулж бүртгэлийн хуудсанд үзүүлэх

    
    SIGNUP SAVE PHP
        if (sizeof($errors) > 0) {
            $_SESSION['errors'] = $errors;
            redirect("/sign-up");
        }
    SIGNUP PHP
        <?php
        if (!empty($_SESSION['errors'])) {
            echo '<ul>';
            foreach ($_SESSION['errors'] as $error) {
                echo "<li style=\"color:red\">$error</li>";
            }
            echo '</ul>';
        }
        ?>

Lesson 60 - [web] html дотор php кодыг дизайнеруудад зориулж template байдлаар бичих нь (if, endif, foreach, endforeach)

    //if, while, foreach, and switch 
    //endif; endwhile, endforeach, and endswitch 
    <?php if (!empty($_SESSION['errors'])): ?>
        <ul>
            <?php foreach ($_SESSION['errors'] as $error): ?>
            <li style="color:red"><?=$error?></li>
            <?php endforeach;?>
        </ul>
    <?php
    unset($_SESSION['errors']);//Улаан алдааг HTML ээс цэвэрлэх
    endif;?>

Lesson 61 - [web] Хэрэглэгч бүртгэх үед үйлчилгээний нөхцлийг нэмж шалгах нь

    $terms = _post('terms');
    if (empty($terms)) {
        $errors[] = 'Та үйлчилгээний нөхцөлийг заавал уншиж бөглөх шаардлагатай';
    }

Lesson 62 - [web] Логин хуудсыг бэлтгэж sign-in-do.php хуудас руу мэдээлэл дамжуулах

    <form class="form-horizontal my-4" method="POST" action="/sign-in-do">
        input>name,value,POST,... өөрчлөлт мөн html ээ өөрчилнө
    </form>

Lesson 63 - [web] Логин хуудас дээр хэрэглэгчийн мэдээллийг шалгаж зөв бол нэвтрүүлэх нь

    SIGN-IN-DO.PHP
        <?php
        session_start();
        // phone, userpassword хүлээж авна
        $phone = _post('phone', 15);
        $userpassword = _post('userpassword', 50);
        //Алдааг хадгалах массив үүсгэнэ
        $errors = [];
        //Хэрэв phone password алдаатай бол алдааг session-д бичээд login хуудасруу үсэргэнэ
        // if (mb_strlen($phone) < 8) {
        //     $errors[] = 'Утасны дугаар буруу байна';
        // }
        // if (mb_strlen($userpassword) < 4) {
        //     $errors[] = 'Нууц үгээ зөв оруулна уу';
        // }
        // if (sizeof($errors) > 0) {
        //     $_SESSION['errors'] = $errors;
        //     redirect('/sign-in');
        // }
        _selectRow($stmt, $count, "select name, pass, phone from users where phone=? and pass=?", 'ss', [$phone, $userpassword], $username, $password, $phone);

        /**
        * 1) session эхлүүлнэ
        * 2) session-д хэрэглэгчийн мэдээллийг бичнэ
        * 3) home хуудас руу буцаж үсэргэнэ
        */

        if (!empty($username)) {
            $_SESSION['username'] = $username;
            $_SESSION['password'] = $password;
            $_SESSION['phone'] = $phone;
            redirect("/user/home");
        }
        //Хэрэв мэдээлэл байхгүй бол
        //Алдааны мэдээллийг session-д бичнэ
        else {
            $_SESSION['errors'] = ['Таны нууц үг эсвэл дугаар буруу байна'];
            //Логин хуудас руу буцааж үсэргэнэ
            redirect('/sign-in');
        }
    SIGN-IN.PHP
        <?php if (!empty($_SESSION['errors'])): ?>
            <ul>
                <?php foreach ($_SESSION['errors'] as $error): ?>
                <li style="color:red"><?=$error?></li>
                <?php endforeach;?>
            </ul>
        <?php unset($_SESSION['errors']);endif;?>

Lesson 64 - [web] Home хуудас дээр темплэйтээс загвар оруулах, header, footer файлуудыг бичих

    <?php
        require 'header.php';
    ?>

    <?php
        require 'footer.php';

Lesson 65 - [web] Header, footer файлуудаас хэрэггүйг нь хасч монгол болгоё

    Үүнийг github ruu push hiitsgeey

Lesson 66 - [web] Logout хийх скриптийг бичиж турших, navbar хэсгийг тусд нь файлд гаргах нь

    USER PAGE -> LOG OUT PAGE үсэрнэ{
        session_unset();
        session_destroy();
        $_SESSION = array();
        
        redirect('/sign-in'); эсвэл header("Location: /sign-in");
    }

Lesson 67 - [web] Логин хийгээгүй хүмүүс home хуудас болон бусад хамгаалалттай хуудсыг үзэхээс хамгаалах нь

    - sign-in-do.php
        //ene orond bazad hadgalsan type orj irj bolno jsheelbel admin,user geh met
        $_SESSION['type'] = 'user';
    - header.php - д хийж өгсөн өөр хэсэгт хийж болно
    if ($_SESSION['type'] !== 'user') {
        $_SESSION['errors'] = ['Та өөрийн эрхээр заавал нэвтэрнэ үү'];
        redirect('/sign-in');
    }

68 - [web] Гэр бүлийн санхүүг хэрхэн хамгийн хялбараар бүртгэх тухай санхүүгийн хичээлийг тухлан сонирхоно уу!

69 - [web] Гэр бүлийн санхүүд эхний үлдэгдлийг тусгаж өгөх нь

70 - [web] Гүйлгээнүүдийг үзүүлэх html table ийг home дэлгэц дээр угсарцгаая!

71 - [web] Шинээр гүйлгээ нэмэх интерфэйсийг table дотор оруулж дэлгэцүүдэд тааруулан оптимизаци хийцгээе!

72 - [web] Шинэ бичлэгийг мэдээллийг дамжуулах форм үүсгэж ажиллуулах

    * PHP-LEARN.COM -- руу ороход sign-in хуудасруу үсэрдэг болгох
     - index.php дээ тохиргоо хийж өгнө
    * Form үүсгэнэ
    * input type дээрээ name өгнө
    * Transaction table үүсгэнэ
    * Form save  хийхэд бичлэгийг table-д хадгалах

73 - [web] Санхүүгийн бичилтийг хадгалах transaction table-ийг үүсгэцгээе

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published