Аппараттық және бағдарламалық қамтамасыз етуді орнату

Тұрақты тіркестердегі сараң және жалқау кванторлар. Қарапайым AJAX түсініктеме жүйесі

PHP тіліндегі түсініктемелер HTML тілінде қолданылатын түсініктемелерге ұқсас. PHP синтаксисінде түсініктемелер әрқашан таңбалардың ерекше тізбегінен басталады және осы арнайы таңбалар арасында пайда болатын кез келген мәтінді аудармашы елемейді.

HTML тілінде түсініктеменің негізгі мақсаты көре алатын әзірлеушілерге ескерту ретінде қызмет ету болып табылады көзісіздің сайтыңыз. PHP түсініктемелері келушілерге көрсетілмейтіндігімен ерекшеленеді. PHP түсініктемелерін қараудың жалғыз жолы - өңдеу үшін файлды ашу. Бұл PHP түсініктемелерін тек PHP бағдарламашыларына пайдалы етеді.

Егер сіз HTML тілінде түсініктемелер қалай жасалатынын ұмытып қалсаңыз немесе білмесеңіз, төмендегі мысалды қараңыз.

php түсініктеме синтаксисі: бір жолды түсініктеме

html-де бір ғана түсініктеме түрі болса, PHP-де екі түрі бар. Біз талқылайтын бірінші түрі - бір жолды түсініктеме. Яғни, аудармашыға түсініктемелердің оң жағындағы жолда не болып жатқанын елемеу керектігін айтатын түсініктеме. Бұл түсініктемені пайдалану үшін «//» немесе «#» таңбаларын пайдаланыңыз және оң жақтағы барлық мәтінді PHP аудармашысы елемейді.

Psst...Сіз менің PHP түсініктемелерімді көре алмайсыз!"; // жаңғырық «ештеңе»; // echo «Менің атым Хампердинкл!»; # echo "Мен де ештеңе істемеймін"; ?>

Нәтиже:

Сәлем Әлем! Psst...Сіз менің PHP пікірлерімді көре алмайсыз!

Кейбір жаңғырық пәрмендері өңделмегенін ескеріңіз, себебі біз оларға арнайы түсініктеме таңбаларымен түсініктеме бердік. Түсініктеменің бұл түрі жиі күрделі және түсініксіз код туралы жылдам жазу немесе PHP кодының жолын уақытша жою үшін (отладтау мақсатында) пайдаланылады.

php түсініктеме синтаксисі: көп жолды түсініктеме

HTML түсініктемелері сияқты, PHP тіліндегі көп жолды түсініктемелер кодтың үлкен блоктарына түсініктеме беру үшін немесе бірнеше жолға түсініктеме жазу үшін пайдаланылуы мүмкін. PHP тіліндегі көп жолды түсініктемелер «/*» әрпінен басталып, «*/» әрпімен аяқталады. Бұл таңбалар арасындағы кез келген нәрсе еленбейді.

Нәтиже.

1-қадам – XHTML

Алдымен, түсініктеме белгісін қарастырайық. Берілген кодклассы бар PHP арқылы жасалған Түсініктеме .

demo.php

Қолданушының аты
2010 жылғы 30 маусым

Түсініктеме мәтіні

див аватар сілтеме (егер пайдаланушы түсініктеме жариялаған кезде URL мекенжайын дұрыс енгізсе) және gravatar.com сайтынан алатын аватар кескінін қамтиды. Біз PHP қадамында белгілеуді құруға ораламыз. Соңында орындаңыз див аты див уақыт және түсініктеме мәтіні.

XHTML-дегі тағы бір маңызды элемент - түсініктеме пішіні. бірге жібереді POST. URL мекенжайынан басқа барлық өрістер толтырылуы керек.

demo.php

пікір қалдыру

Пішін AJAX арқылы жіберіледі. Тексеру орындалады фонжылы submit.php. Әрбір өрісте сәйкес элемент бар заттаңба, төлсипат жинағымен үшін .

2-қадам – PHP

РНР мәліметтер қорымен байланысты өңдейді MySQL деректеріжәне түсініктеме үшін белгілеуді жасайды. Ол сондай-ақ AJAX сұрауының соңын алады және түсініктеме деректерін кестеге кірістіреді пікірлер.

demo.php

/* / Барлық түсініктемелерді таңдап, $comments массивін нысандармен толтырыңыз */ $comments = array(); $нәтиже = mysql_query("ТАҢДАУ * Пікірлерден ТАПСЫРЫС идентификаторы ASC"); while($жол = mysql_fetch_assoc($нәтиже)) ( $пікірлер = жаңа түсініктеме($жол); )

MySQL сұрауы кестеден және толтыру массивінен барлық жазбаларды таңдайды $пікірлерсынып объектілері түсініктеме. Берілген массивсценарий орындалғанда одан әрі шығады.

demo.php

/* / Түсініктемелерді бір-бірлеп басып шығару: */ foreach($пікірлер $c)( echo $c->markup(); )

Әрбір түсініктемеде әдіс бар белгілеу(), ол бетте көрсетуге дайын дұрыс HTML кодын жасайды. Төменде класс және әдіс анықтамалары берілген.

Класс дерекқордан жолды алады (қолдану арқылы алынған mysql_fetch_assoc()) және оны айнымалыда сақтаңыз $деректер. Ол тек класс әдісі үшін қол жетімді.

comment.class.php - 1 бөлім

сынып Түсініктеме ( private $data = array(); public function __construct($row) ( /* / Constructor */ $this->data = $row; ) public function markup() ( /* / Бұл әдістүсініктеме үшін XHTML белгілеуін шығарады */ // $this->data: $d = &$this->data; $link_open = ""; $link_close = ""; if($d["url"])( // Түсініктеме қосу кезінде URL мекенжайы енгізілген болса, // ашу және жабу сілтеме тегтерін анықтаңыз $link_open = ""; $link_close = ""; ) // Уақытты түрлендіру UNIX пішіміне: $d["dt"] = strtotime($d["dt"]); // Әдепкі кескінді орнату үшін қажет: $url = "http://".dirname($_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"])."/img/default_avatar.gif"; қайтару»
".$link_open." ".$link_close."
".$link_open.$d["name"].$link_close."
".date("d M Y",$d["dt"])."

".$d["дене"]."

"; }

Сценарий аватарды түсініктемелерде көрсету үшін граватарды пайдаланады. Gravatar — электрондық пошта мекенжайы бар аватарға сәйкес келетін өте пайдалы қызмет. Аватар кескінін кодталған функцияны өту арқылы оңай алуға болады md5() gravatar.com сайтындағы электрондық пошта мекенжайыңыз.

Сценарий орындалатын URL мекенжайын анықтайды және кескіннің нақты мекенжайын анықтайды default_avatar.gif. Бұл сурет md5 хэшімен бірге беріледі және егер берілген электрондық пошта мекенжайы үшін аватар табылмаса, баламалы сурет көрсетіледі.

comment.class.php - 2 бөлім

public static function validate(&$arr) ( /* / Бұл әдіс AJAX арқылы жіберілген деректерді тексеру үшін пайдаланылады. / / Ол деректердің жарамдылығына байланысты ақиқат/жалған мәнін қайтарады және толтырылған $arr массивін толтырады. деректермен немесе */ $errors = array(); $data = array(); // PHP 5.2.0-де енгізілген filter_input функциясын пайдаланыңыз if(!($data["email"] = filter_input(INPUT_POST) ,"email ",FILTER_VALIDATE_EMAIL))) ( $errors["email"] = "Жарамды электрондық поштаны енгізіңіз."; ) if(!($data["url"] = filter_input(INPUT_POST,"url",FILTER_VALIDATE_URL) )) ( // URL өрісіне жарамсыз URL мекенжайы енгізілген болса, // URL мекенжайы енгізілмегендей әрекет етіңіз: $url = ""; ) // Кері шақыру функциясы бар сүзгіні пайдаланыңыз: if(!($data[ "body"] = filter_input(INPUT_POST,"body",FILTER_CALLBACK,array("options"=>"Comment::validate_text")))) ( $errors["body"] = "Пікір мәтінін енгізіңіз."; ) if(!( $data["name"] = filter_input(INPUT_POST,"name e",FILTER_CALLBACK,array("options"=>"Comment::validate_text")))) ( $errors["name"] = "Атын енгізіңіз."; ) if(!empty($errors))( // Қателер болса, $errors массивін $arr параметріне көшіріңіз: $arr = $errors; return false; ) // Егер енгізу дұрыс болса, деректерді тазалаңыз және оны $arr : foreach($data as $k=>$v)( $arr[$k] = mysql_real_escape_string($v); ) ішіне көшіріңіз // электрондық пошта кіші әріппен жазылуы керек: $arr["email"] = strtolower( trim($ arr["электрондық пошта"])); шындықты қайтару; )

Әдіс validate()(сонымен қатар сыныптың бөлігі) ретінде анықталады статикалық. Бұл оны конструкциямен тікелей шақыруға болатынын білдіреді түсініктеме ::validate(), сынып нысанын жасамай. Бұл әдіс AJAX арқылы жіберілген деректерді тексереді.

Әдіс пайдаланады жаңа мүмкіндіксүзгі, ол қол жетімді болды PHP 5.2.0. Осылайша біз сценарийге жіберілген деректерді оңай тексеріп, сүзе аламыз. Мысалға, filter_input(INPUT_POST,'url',FILTER_VALIDATE_URL)тексереміз дегенді білдіреді $_POST["url"]дұрыс URL. Олай болса, функция айнымалының мәнін қайтарады, әйтпесе мәнді қайтарады жалған.

Мұндай функцияны қолданбас бұрын деректерді тексеру үшін тұрақты өрнектерді пайдалану қажет болды (конструкциялар сериясын пайдалану арқылы егер). Қосымша артықшылығы - біз кез келген нақты түрлендірулерді жасамас бұрын деректерді аламыз.

Сондай-ақ, қосымша деректер модификацияларын орындайтын функцияны анықтауға болады.

comment.class.php - 3-бөлім

жеке статикалық функция validate_text($str) ( /* / Бұл әдіс FILTER_CALLBACK */ if(mb_strlen($str,"utf8") ретінде пайдаланылады.<1) return false; // Кодируем все специальные символы html (<, >, ", & .. т.б.) және // жаңа жол таңбасын тегке түрлендіру
: $str = nl2br(htmlspecialchars($str)); // Қалған жаңа жолдарды алып тастаңыз $str = str_replace(array(chr(10),chr(13)),"",$str); $str қайтару; )

Соңғы әдіс мәтінді растауекі шақыруда қайтару функциясы ретінде берілді сүзгі_енгізу. Ол XSS шабуылдарын тиімді блоктайтын барлық арнайы HTML таңбаларын түрлендіреді. Сондай-ақ ол жаңа жолдарды тегтермен ауыстырады
.

submit.php

/* / Бұл массив сценарийге жіберілетін деректермен / немесе қате туралы хабарлармен толтырылады. /*/ $arr = массив(); $validates = Түсініктеме::validate($arr); if($validates) ( /* Жарайды, дерекқорға деректерді енгізіңіз: */ mysql_query(" INSERT INTO comments(name,url,email,body) VALUES ("".$arr["name"]."), "".$arr["url"]."", "".$arr["email"]."", "".$arr["body"]."")"); $arr["dt "] = date("r",time()); $arr["id"] = mysql_insert_id(); /* / $arr деректері MySQL сұрауы үшін дайындалған, / бірақ біз оны көрсетуіміз керек, сондықтан / біз массивтің барлық элементтерін дайындап жатырмыз: /*/ $arr = array_map("stripslashes",$arr); $insertedComment = new Comment($arr); /* Жаңа ғана енгізілген түсініктеменің белгілеуін басып шығарыңыз: */ echo json_encode (array("status "=>1,"html"=>$insertedComment->markup())); ) else ( /* Қате туралы хабарларды көрсету */ echo "("status":0,"errors":". json_encode($arr ).")"; )

submit.php AJAX сұрауы арқылы деректерден түсініктеме алады. Оны тексереді және кірістірілген түсініктемесі немесе қателер тізімі бар XHTML белгілеуін қамтитын JSON нысанын шығарады. jQuery сипатын пайдалану күйне көрсету керектігін анықтау үшін - қате туралы хабар немесе бетке түсініктеме белгілеуін қосу.

Төменде екі мысал келтірілген.

Сәтті жауап

(«күй»: 1, «html»: «Пікірдің HTML коды осында келеді...» )

Меншік htmlтүсініктеме кодын қамтиды.

Қате жауап

( "күй": 0, "қателер": ( "электрондық пошта": "Жарамды электрондық поштаны енгізіңіз.", "дене": "Пікір мәтінін енгізіңіз.", "аты": "Атын енгізіңіз." ) )

Қате болған кезде, jQuery қателер нысаны арқылы айналым жасайды және қателері бар өрістердің жанында хабарларды көрсетеді.

3-қадам - ​​CSS

Енді белгілеу дұрыс жасалған және бетте көрсетілген, біз сәндеуге көшеміз.

styles.css - 1 бөлім

.comment, #addCommentContainer( /* Түсініктемелерге арналған стиль */ толтыру: 12px; ені: 400px; орын: салыстырмалы; фон-түсі:#fcfcfc; жиек: 1px тұтас ақ; түс:#888; жиек-төменгі:25px; / * CSS3 дөңгелектелген бұрыштар мен көлеңкелер */ -moz-border-radius:10px; -webkit-border-radius:10px; border-radius:10px; -moz-box-shadow:2px 2px 0 #c2c2c2; -webkit-box- shadow:2px 2px 0 #c2c2c2; box-shadow:2px 2px 0 #c2c2c2; ) .comment .avatar( /* / Аватар толығымен орналастырылған. / Түсініктеме үшін сыртқы ығысу div /*/ height:50px; сол жақта:- 70px; позиция: абсолют; ені: 50 пиксель; фон: url("img/default_avatar.gif") қайталанбайды #fcfcfc; /* тік ортасына: */ margin-top:-25px; top:50%; -moz- жәшік-көлеңке:1px 1px 0 #c2c2c2;-webkit-box-shadow:1px 1px 0 #c2c2c2; қорап-көлеңке:1px 1px 0 #c2c2c2; )

див .comment және #addCommentContainer бірдей стильге ие. Бұрыштарды дөңгелектеу және көлеңкелерді көрсету үшін бірнеше CSS3 ережелері қолданылады.

styles.css - 2 бөлім

.comment .avatar img( display:block; ) .comment .name( font-size:20px; padding-bottom:10px; color:#ccc; ) .comment .date( font-size:10px; padding:6px 0; позиция: абсолюттік; оң жақта: 15 пиксель; жоғарғы: 10 пиксель; түс: #bbb; ) .comment p, #addCommentContainer p( font-size:18px; line-height:1,5; overflow-x:hidden; ) #addCommentContainer кірісі, # addCommentContainer textarea( /* Енгізу стилі */ дисплей:блок; жиек:1px қатты #ccc; жиек:5px 0 5px; толтыру:3px; шрифт өлшемі:12px; түсі:#555; шрифт-отбасы:Arial, Helvetica, sans -serif; ) #addCommentContainer textarea( ені:300px; ) label( font-size:10px; ) label span.error( color:red; position:relative; right:-10px; ) #submit( /* "Жіберу" түймесі " */ background-color:#58B9EB; жиек: 1px тұтас #40A2D4; түс:#FFFFFF; курсор: көрсеткіш; font-family:"Myriad Pro",Arial,Helvetica,sans-serif; font-size:14px; шрифт -салмақ: қалың; толтыру: 4 пиксель; жиек-жоғарғы: 5 пиксель; -moz-шек радиусы: 4px; -webkit-шек радиусы: 4px; шекара радиусы: 4px; ) #s жіберу: меңзерді жылжыту (фон түсі:#80cdf5; жиек түсі:#52b1e2; )

Екінші бөлімде біз түсініктемелер мен пішін элементтері үшін стильдерді орнатамыз. Селекторды атап өтейік енгізу,атрибутқа байланысты элементтерді бөлектейді түрі.

4-қадам – jQuery

Енді jQuery-ге көшейік.

script.js

$(document).ready(function()( /* Келесі код DOM жүктелгеннен кейін ғана орындалады */ /* Бұл жалауша бірнеше түсініктемелердің жіберілуіне жол бермейді: */ var working = false; /* Жіберілген пішінді ұстау оқиға: */ $(" #addCommentForm").submit(функция(e)( e.preventDefault(); егер(жұмыс істейтін) қатені қайтарады; жұмыс = шын; $("#submit").val("Жұмыс.. "); $("span .error").remove(); /* Пішін өрістерін submit.php файлына жіберіңіз: */ $.post("submit.php",$(this).serialize(),function(msg). )( working = false; $ ("#submit").val("Submit"); if(msg.status)( /* / Егер кірістіру сәтті болса, бетте соңғысының астына түсініктеме қосыңыз. slideDown әсері /*/ $(msg.html).hide ().insertBefore("#addCommentContainer").slideDown(); $("#body").val(""); ) else ( /* / Егер бар болса қателер болып табылады, объект / msg.errors арқылы цикл және оларды /*/ $.each(msg.errors,function(k,v)( $("label").apppend(" бетіне шығарыңыз "+v+""); ))) ))) "json"); ))) )))

Біз функция шақыруын қолданамыз $(құжат).дайын()Оқиғаға функцияны байланыстыратын A. Айнымалы жұмыс істейді AJAX сұрауының орындалып жатқанын көрсететін жалауша ретінде әрекет етеді (осылайша бір түсініктеменің қайталануын болдырмайды).

POST AJAX сұрауы үшін қайтару функциясында біз сипатты тексереміз күйтүсініктеме сәтті енгізілгенін анықтау үшін. Иә болса, нәтиже белгісін анимациямен соңғы түсініктемеден кейін бетке қосамыз төмен сырғыту.

Мәселелер болса, қате туралы хабарларды қосу арқылы көрсетеміз аралығы қате сәйкес элементке заттаңба(элемент төлсипаты заттаңбақамтиды idқатесі бар енгізу).

Дайын!

Қорытынды

Сценарийді серверде іске қосу үшін кесте жасау керек пікірлер MySQL дерекқорында. Сіз оны файлдағы SQL кодымен жасай аласыз table.sql, ол phpMyAdmin ішіндегі SQL қойындысына енгізілуі керек. Содан кейін файлдағы MySQL дерекқорының қосылым параметрлерін орнату керек connect.php .

25.04.2017


Бәріңе сәлем!
Біз нөлден бастап PHP негіздерін үйренуді жалғастырамыз!
Бұл сабақта мен PHP тілінде түсініктеменің не екенін айтамын және іс жүзінде біз сіздің пікіріңізді кодқа жазуға тырысамыз. Бірақ бұл бәрі емес. Мен сондай-ақ кодты қалай түсіндіруге болатынын және оны не үшін жасау керектігін айтқым келеді.

Пікір дегеніміз неPHP
Пікір қалдырыңызPHPбұл кодта жылдам бағдарлауға, сондай-ақ өңдеуге арналған php-әзірлеуші ​​кеңесі.

PHP тіліндегі түсініктеме веб-бетті қарау үшін ашқан пайдаланушыға көрінбейді. Пайдаланушы беттің бастапқы кодын қарауды шешсе де, түсініктеме әлі де көрінбейді, өйткені барлық php.

PHP кодының түсініктемесі

PHP коды үшін түсініктемелердің 2 түрі бар:

→ бір лайнер
→ көп жолды

⇒ PHP үшін бір жолды түсініктеме
Бір жолды түсініктеме үшін «//» немесе «#» таңбаларын пайдаланыңыз.

Осы таңбалардан кейін бір жолда жазылғанның бәрі еленбейді және түсініктеме ретінде қарастырылады.

Жаңартуға жазылу"; # жазылу (бұл түсініктеме) ?>


Жаңартуға жазылыңыз

⇒ PHP үшін көп жолды түсініктеме
PHP үшін көп жолды түсініктеме «/*» әрпінен басталып, «*/» белгісімен аяқталады.
Бұл таңбалар арасындағы кез келген нәрсе еленбейді және түсініктеме ретінде қарастырылады.
Жазбада бірнеше жол болса, көп жолды түсініктеме қолданылады.

Экранда сіз тек келесі мәтінді көресіз:

Сәлем блог сайтының оқырмандары !!!

P.S.:Әрқашан кодыңызға түсініктеме беріңіз. Егер сіз 1-2 жылдан кейін кодта жасағандарыңыздың барлығын есте сақтаймын деп ойласаңыз, қателесесіз, мүмкіндік өте аз. Есіңізде болса да, сізге көп уақытты оқуға жұмсауға тура келеді - нені, қайда және неге ...
Болашақты өзіңізге жағымды етіңіз - кодты түсіндіріңіз, содан кейін сіз өзіңізге "РАХМЕТ!!!" дейсіз.
Кодқа түсініктеме қалдырыңыз, бұл сіздің уақытыңыздың 1 минутын алады, бірақ ол болашақта бір күнді үнемдейді.

PHP кодын түсіндіріңіз

Сіз PHP кодын жаздыңыз делік, бірақ қандай да бір себептермен кодтан 2 жолды алып тастау керек.
Мен кодтан бірдеңені алып тастауға асықпаймын, әсіресе бұл PHP коды болса, мен оны түсіндіргім келеді. Және кенеттен кодты қайтару қажет болады. Кодты жаңа жолмен жазудан гөрі түсініктемеден бас тарту оңайырақ.

Кодты қалай түсіндіруге боладыPHP
Бір жолдық түсініктемесі бар мысал:

Жаңартуға жазылыңыз"; ?>

Көп жолды түсініктемесі бар мысал.

Мен бір кездері туралы жазғанмын. Сондықтан біз тек сонда ғана қарастырдық» ашкөз«өкілдер. Дегенмен, әрқашан олардың « ашкөздік«Бұл бізге көмектеседі, өте жиі ауырады. Мен олардың кейде не істейтінін анық көруге болатын мысалды көрсетемін, сондай-ақ олардың жалындылығын қалай азайтуға және жасауға болатынын көрсетемін. қайталау кванторлары «жалқау».

Қарапайым және қазірдің өзінде классикалық мысалды қарастырайық:

$str = "Кіші түзув батылтаңдау.»;
.*<\/b>
echo $result_str;
?>

Мүмкін сіз келесідей нәрсені күтетін шығарсыз: Мұнда кішкентай қалың_ерекшелеу және мұнда қалың_ерекшелеу". Яғни, тек тегтің ішіндегі мазмұнды ауыстыру<б> біз тегтің өзімен бірге көрсеткен жолға. Дегенмен, бұл мүлдем дұрыс емес, өйткені бұл жерде « кванторлардың ашкөздігі". Нәтижесінде, ауыстыру әрбір тегтің ішінде болмады<б>, бірақ бірінші ашылу тегінен соңғы жабу тегіне дейін. Ашкөздік деген осы.

Бұл кодты қалай жазу керек, осылайша ауыстыру біз қалағандай болады:

$str = "Кіші түзув батылтаңдау.»;
$result_str = preg_replace("/ .*?<\/b>/i», «қалың_ерекшелеу_мұнда», $str);
echo $result_str;
?>

Біз тек қайталау кванфикаторынан кейінгі регексті өзгерттік. .* «сұрақ белгісі, бұл жай кванторды «жалқау» етеді. Енді нәтиже: « Мұнда кішкентай қалың_ерекшелеу және мұнда қалың_ерекшелеу.бұл біз қол жеткізуге тырыстық.

Сіз мәселені шынымен түсінесіз деп үміттенемін. «ашкөздік» кванторларыжәне олардың қалай жұмыс істейтінін түсіну. Мұны қарапайым белгімен қалай түзетуге болатынын түсіндім » ? «. Бұл тақырып шын мәнінде маңызды және тұрақты тіркестерге жаңадан келгендердің үлкен саны байланысты бірдей қателіктер жібереді қайталану кванторларының «ашкөздігі»., сондықтан сіз әлі толық мағынасын соңына дейін түсінбесеңіз, мақаланы қайта оқып шығыңыз.

Мақала ұнады ма? Достарыңызбен бөлісіңіз!
Бұл мақала пайдалы болды ма?
Иә
Жоқ
Пікіріңізге рахмет!
Бірдеңе дұрыс болмады және сіздің дауысыңыз есептелмеді.
Рақмет сізге. Сіздің хабарламаңыз жіберілді
Мәтіннен қате таптыңыз ба?
Оны таңдаңыз, басыңыз Ctrl+Enterжәне біз оны түзетеміз!