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 суулгах
- Вэб сайт болон вэб сэрвэр хэрхэн ажилладаг тухай
- Хувьсагч, оператор, давталт, массив, дотоод функцүүд
- Тэмдэгт мөртэй ажиллах
- Функц, ламбда функц
- Файлтай ажиллах
- Формтой ажиллах, HTTP протокол
- SESSION, Cookie ашиглах
- PHP7, PHP8 юу нэмэгдсэн бэ
- Бусад хэлний элементүүд ...
- Mysqli сан
- Phpmyadmin
- Mysql query browser програм ашиглах
- Mysql хэрэглэгч үүсгэх тохируулах
- Терминалаас mysql рүү хандах
- SQL, encoding, index
- Өгөгдлийн санг архивлах болон сэргээх
- Нууцлал хамгаалалт, sql injection
- Фронт контроллер
- Өгөгдлийн сантай mysqli ашиглан хандах сан
- Бусад туслах функцүүдийн сан
- Нууцлал хамгаалалт, cross site scripting, injection
- Logging, monitoring
- Өөрсдийн фрэймворкоо ашиглана
- Худалдаж авсан темплэйтийг хэрхэн ашиглахыг сурна
- Бүртгүүлэх, нэвтрэх, хуудасны хамгаалалт
- Орлого зарлагаа бүртгэх
- Орлого зарлагын төрлийг бүртгэх
- Тухайн сарын байдлыг графикаар харах
- Сар бүрийг хооронд нь харьцуулж харах
- Юун дээр их зарлага гаргаж буйг олох
- Shared хост дээр байрлуулах
- Физик сэрвэр дээр суулгах, SSL тохируулах
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 фреймворкоо ашиглана
- Бүтээгдэхүүний жагсаалт, хайлт
- Бүтээгдэхүүний дэлгэрэнгүй хуудас
- Худалдаачин бүртгүүлэх нэвтрэх
- Бүтээгдэхүүнийг удирдах
- Категорийг удирдах
- Хэрэглэгчдийг удирдах
- Сагсанд хийх худалдан авах
- Имейл илгээх
- Сервэрт байрлуулах
1. Xampp суулгах ` https://www.apachefriends.org/ `
2. mysql gui tool суулгах ` https://downloads.mysql.com/archives/gui/ `
3. Суулгасны дараа query browser - луу орж serverhost: 'localhost' username: 'root ' гэж бөглөнө
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)*/
...etc
...etc
...etc
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 гарч ирэх бүр дэлгэрүүлсэн
Компьютер бүр API хаягтай байна Ж.нь `127.0.0.1`
// hosts, DNS(domain name server), Apache, Mysql, Browser
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 хувьсагч байхгүй*/
1. зарлагдаагүй хувьсагч, алдааг үзүүлэх тохиргоо
- алдааг үзүүлэх тохиргоо (ini_set("display_errors",1))
- алдааг нуух тохиргоо (ini_set("display_errors",0))
2. print vs echo /*ижилхэн гэхдээ ялгаа нь echo олон хувьсагчийг хэвэлж болно*/
3. PHP short tag
- <?= "asdsd" ?>//output: asdsd;
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;
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 ... гэх мэт;
1. Magic constants
- echo __DIR__; гэх мэт// тухайн файлын замыг харуулдаг
2. include файлаас хувьсагч тогтмол ашиглах
3. require файлруу хувьсагч дамжуулах
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;
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;
$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)
$phone = ["9045","5432"];
function arr($array){
echo '<pre>';
print_r($array);
echo '</pre>';
}
arr($phone);
$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
- foreach ($_SERVER as $key => $item) {
echo '[' . $key . ' : ' . $item . ']<br><br>';
}
- foreach ($_SERVER as $item) {
echo '[' . $item . ']<br><br>';
}
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
}
}
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);
- { ? }
$shoo = 5; $urdun = $shoo > 3 ? "hojloo" : "hojigdloo";
- { ?? }
$a = $b;//$b = null default uydee
$a = $b ?? 15;
echo $a;//output: 15; $b нь null учир 15 гэсэн утга авна
$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;
$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 34 - [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);
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");
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 'Нууц үг буруу байна';
}
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 давуу тал
//Хамгаалагдаэна
1. mysqli unbuffered resultset
//mysqli_query($con, "slect * from users", MYSQLI_USE_RESULT);-
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);
- Төсөл өө эхлүүлнэ ээ
$page = $_GET['page'];
echo $page;
require '../pages/' . $page . '.php';//гэж URL үүсгэж php темплейтийг ажиллуулж болно
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>
тохиргоог хийж өгнө
*/
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;
}
$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);
}
- 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;
}
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
Тогтмол хадгалах хэсэгтээ нэмж өгчөөд дуудаж ашиглана
const DOMAIN = 'php-learn.com';
Example: <?=DOMAIN?>,ucfirst(DOMAIN),strtoupper(DOMAIN) гэх мэт?>
<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;
}
//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);
}
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 болон хоосон зай байж болохгүй
session_start();
$_SESSION['username'] = $username;
$_SESSION['phone'] = $phone;
$_SESSION['email'] = $email;
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;?>
$terms = _post('terms');
if (empty($terms)) {
$errors[] = 'Та үйлчилгээний нөхцөлийг заавал уншиж бөглөх шаардлагатай';
}
<form class="form-horizontal my-4" method="POST" action="/sign-in-do">
input>name,value,POST,... өөрчлөлт мөн html ээ өөрчилнө
</form>
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;?>
<?php
require 'header.php';
?>
<?php
require 'footer.php';
Үүнийг github ruu push hiitsgeey
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] Гэр бүлийн санхүүг хэрхэн хамгийн хялбараар бүртгэх тухай санхүүгийн хичээлийг тухлан сонирхоно уу!
71 - [web] Шинээр гүйлгээ нэмэх интерфэйсийг table дотор оруулж дэлгэцүүдэд тааруулан оптимизаци хийцгээе!
* PHP-LEARN.COM -- руу ороход sign-in хуудасруу үсэрдэг болгох
- index.php дээ тохиргоо хийж өгнө
* Form үүсгэнэ
* input type дээрээ name өгнө
* Transaction table үүсгэнэ
* Form save хийхэд бичлэгийг table-д хадгалах