Безстрашний comments php. Проста система коментування за допомогою AJAX. Синтаксис php коментарів: однорядковий коментар

Я колись писав про . Так ось, ми з Вами там розглянули лише " жадібних" Представників. Проте, який завжди їх " жадібністьнам допомагає, дуже часто вона і шкодить. Трохи нижче я покажу приклад, де чітко видно те, що вони іноді роблять, а також покажу як зменшити їх запал і зробити квантифікатори повторень "лінивими".

Давайте розберемо простий приклад, що вже став класичним:

$str = "Невелика рядок c жирнимвиділенням.";
.*<\/b>
echo $result_str;
?>

Можливо, Ви очікуєте щось на кшталт цього: " Невелика тут_жирний_виділення з тут_жирний_виділення виділеннямТобто просто заміна вмісту всередині тега<b> на заданий нами рядок із самим тегом. Однак це не зовсім так, оскільки тут вступає в гру. жадібність квантифікаторів". І в результаті заміна була не всередині кожного тега<b>, а від першого відкриває тега до самого останнього закриває. У цьому полягає жадібність.

Ось як треба писати цей код, щоб заміна відбувалася так, як ми хочемо:

$str = "Невелика рядок c жирнимвиділенням.";
$result_str = preg_replace("/ .*?<\/b>/i", "тут_жирний_виділення", $str);
echo $result_str;
?>

Все, що ми змінили цей регулярний вираз, поставивши після квантифікатора повторень. .* знак питання, який якраз і робить квантифікатор "лінивим". Тепер результатом буде: " Невелика тут_жирний_виділення c тут_жирний_виділення виділенням.", Чого ми і намагалися добитися.

Я дуже сподіваюся, що Ви усвідомили проблему "жадібності" квантифікаторівта зрозуміли, як вони працюють. А також усвідомили, як це можна виправити простим знаком. ? Ця тема дійсно важлива, і величезна кількість новачків у регулярних висловлюваннях роблять одні й ті ж помилки, пов'язані з "жадібністю" квантифікаторів повтореньтому, якщо Ви ще не усвідомили весь сенс до кінця, то перечитайте статтю ще раз.

25.04.2017


Всім привіт!
Продовжуємо вивчати основи PHP з нуля!
У цьому уроці я розповім, що таке коментар у PHP і на практиці спробуємо прописати у коді свій коментар. Але це ще не все. Ще хочу розповісти, як закоментувати код, і для чого це взагалі потрібно робити.

Що таке коментар уPHP
Коментар уPHP- це підказка php-розробника для швидкого орієнтування в коді, а також для редагування.

Коментар у PHP небачений для користувача, який відкрив веб-сторінку для перегляду. Навіть якщо користувач надумається подивитися вихідний кодсторінки, коментар все одно видно не буде, оскільки весь код php.

PHP коментар коді

Існує 2 види коментарів для коду PHP:

→ однорядковий
→ багаторядковий

⇒ Однорядковий коментар для PHP
Для однорядкового коментаря слід застосовувати символи "//" або "#"

Після цих символів все, що записано в один рядок, буде ігноруватися і вважатися як коментар.

Підпишись на оновлення"; # передплата (це коментар) ?>


Підпишись на оновлення

⇒ Багаторядковий коментар для PHP
Багаторядковий коментар для PHP починається з символу "/*" і закінчується символом "*/".
Все, що знаходиться між цими символами, ігноруватиметься і рахуватиметься як коментар.
Багаторядковий коментар використовується, якщо у записі кілька рядків.

На екрані ви тільки побачите такий текст:

Привіт читачам блогу – сайт!!!

PS:Завжди коментуйте свій код. Якщо ви вважаєте, що згадаєте все, що робили в коді через 1-2 роки, ви помиляєтесь, шанс дуже маленький. Навіть якщо і згадаєте, доведеться витратити купу часу на вивчення - що, куди і навіщо ...
Зробіть приємне для себе майбутнього – закоментуй код і ти сам собі потім скажеш «СПАСИБО!».
Залиш коментар у коді, це займе 1 хвилину часу, але заощадить тобі в майбутньому цілий день.

Закоментувати PHP код

Припустимо, ви написали php код, але з якихось причин вам потрібно видалити з коду 2 рядки.
Я не поспішаю видаляти щось із коду, особливо, якщо це php-код, я краще закоментую його. А раптом треба буде повернути код. Легше розкоментувати, ніж по-новому писати код.

Як закоментувати код уPHP
Приклад з однорядковим коментарем:

Підпишись на оновлення"; ?>

Приклад із багаторядковим коментарем.

Крок 1 - XHTML

Спершу подивимося на розмітку коментаря. Цей кодгенерується PHP із класом Comment .

demo.php

Ім'я користувача
30 червня 2010

Текст коментаря

div avatar містить посилання (якщо користувач ввів правильну URL-адресу при розміщенні коментаря) та зображення аватара, яке ми отримуємо з gravatar.com . Ми повернемось до формування розмітки на кроці PHP. На завершення слідують div name div time та текст коментаря.

Іншим важливим елементому XHTML є форма коментаря. Вона відправляється за допомогою POST. Усі поля, крім URL, мають бути заповнені.

demo.php

Додати коментар

Форма надсилається за допомогою AJAX. Перевірка виконується у фоновому режимі submit.php. Кожне поле має відповідний елемент label, із встановленим атрибутом for .

Крок 2 - PHP

PHP обробляє комунікацію з базою даних MySQLта генерує розмітку для коментаря. Він також отримує закінчення запиту AJAX і вставляє дані коментаря до таблиці comments.

demo.php

/* / Вибираємо всі коментарі та наповнюємо масив $comments об'єктами */ $comments = array(); $result = mysql_query("SELECT * FROM comments ORDER BY id ASC"); while($row = mysql_fetch_assoc($result)) ( $comments = new Comment($row); )

Запит MySQL вибирає всі записи з таблиці та заповнює масив $commentsоб'єктами класу comment. Цей масив виводиться далі під час виконання скрипта.

demo.php

/* / Висновок коментарів один за одним: */ foreach($comments as $c)( echo $c->markup(); )

Кожен коментар має метод markup(), який генерує правильний HTML-код, готовий для виведення на сторінку. Нижче наведено визначення класу та методу.

Клас отримує рядок з бази даних (одержуваний за допомогою mysql_fetch_assoc()) і зберігає її у змінній $data. Вона доступна лише за методом класу.

comment.class.php - Частина 1

class Comment ( private $data = array(); public function __construct($row) ( /* / Конструктор */ $this->data = $row; ) public function markup() ( /* / Даний метод виводить розмітку XHTML для коментаря */ // Встановлюємо псевдонім, щоб не писати щоразу $this->data: $d = &$this->data; $link_open = ""; $link_close = ""; )( // Якщо був введений URL при додаванні коментаря, // визначаємо теги посилання, що відкриває і закриває $link_open = ""; $link_close = ""; ) // Перетворимо час у формат UNIX: $d["dt"] = strtotime ($d["dt"]); // Потрібно для встановлення зображення за замовчуванням: $url = "http://".dirname($_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"])."/ img/default_avatar.gif"; return "
".$link_open." ".$link_close."
".$link_open.$d["name"].$link_close."
".date("d MY",$d["dt"])."

".$d["body"]."

"; }

Скрипт використовує gravatar для представлення аватара у коментарях. Gravatar - це дуже корисний сервіс, який встановлює відповідність аватара з адресою email. Зображення аватара може бути легко отримано за допомогою передачі функцією кодованого md5()вашої адреси електронної пошти на gravatar.com.

Скрипт визначає адресу URL, на якій виконується, та визначає точну адресу зображення default_avatar.gif. Дане зображення передається паралельно з хеш md5, і якщо ніякого аватара не було знайдено для переданої email адреси, то буде виведено альтернативне зображення.

comment.class.php - Частина 2

public static function validate(&$arr) ( /* / Даний метод використовується для перевірки даних, що відправляються через AJAX. / / Він повертає true/false залежно від правильності даних, і наповнює / масив $arr, який передається як параметр або даними або повідомленням про помилку.*/ $errors = array(); $data = array(); ",FILTER_VALIDATE_EMAIL))) ( $errors["email"] = "Будь ласка, введіть правильний 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",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); ) // email повинен бути в нижньому регістрі: $arr["email"] = strtolower(trim($ arr["email"])); return true; )

Метод validate()(також частина класу) визначено як static. Це означає, що його можна викликати безпосередньо за допомогою конструкції Comment::validate()без створення об'єкта класу. Цей метод перевіряє дані, що передаються через AJAX.

Метод використовує нову функціюфільтра, яка стала доступна в PHP 5.2.0. Таким чином ми можемо легко перевірити та відфільтрувати дані, які передаються скрипту. Наприклад, filter_input(INPUT_POST,'url',FILTER_VALIDATE_URL)означає, що ми перевіряємо, чи є $_POST["url"]правильною адресою URL. Якщо це так, то функція повертає значення змінної, інакше вона повертає значення false.

До використання такої функції потрібно було використовувати регулярні вирази для перевірки даних (із залученням серії конструкцій if). Додатковою перевагою є те, що ми отримуємо дані до будь-яких специфічних перетворень.

Також можна задати функцію, яка проводитиме додаткові модифікації даних.

comment.class.php - Частина 3

private static function validate_text($str) ( /* / Цей метод використовується як FILTER_CALLBACK */ if(mb_strlen($str,"utf8"))<1) return false; // Кодируем все специальные символы html (<, >, ", & .. etc) і перетворюємо // символ нового рядка на тег
: $str = nl2br(htmlspecialchars($str)); // Видаляємо всі символи нового рядка, що залишилися $str = str_replace(array(chr(10),chr(13)),"",$str); return $str; )

Останній метод validate_textпередається як зворотна функція у два виклики filter_input. Він перетворює всі спеціальні символи HTML, що ефективно блокує атаки XSS. Також він замінює символи нового рядка тегами
.

submit.php

/* / Даний масив наповнюватиметься або даними, / які передаються в скрипт, / або повідомленнями про помилку. /*/ $arr = array(); $validates = Comment::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); "=>1,"html"=>$insertedComment->markup())); ) else ( /* Виведення повідомлень про помилку */ echo "("status":0,"errors":".json_encode($arr ).")"; )

submit.phpотримує коментар із даних через запит AJAX. Перевіряє його та виводить об'єкт JSON, у якому міститься або розмітка XHTML із вставленим коментарем, або список помилок. jQuery використовує властивість statusдля визначення того, що потрібно виводити - або повідомлення про помилки або додавати розмітку коментаря до сторінки.

Нижче наведено два приклади.

Успішна відповідь

( "status": 1, "html": "Html Code Of The Comment Comes Here..." )

Властивість htmlмістить код коментаря.

Відповідь про помилку

( "status": 0, "errors": ( "email": "Виберіть правильну електронну пошту.", "body": "Виберіть повідомлення для електронної пошти.", "name": "Виберіть електронну пошту." ) )

При помилці jQuery проходить циклом по об'єкту помилок і виводить повідомлення поряд з полями, в яких є помилки.

Крок 3 - CSS

Тепер, коли розмітка правильно генерується та відображається на сторінці, ми можемо перейти до завдання стилів.

styles.css - Частина 1

.comment, #addCommentContainer( /* Стиль для коментарів */ padding:12px; width:400px; position:relative; background-color:#fcfcfc; border:1px solid white; color:#888; margin-bottom:25px; / * Закруглені кути і тіні CSS3 */ -moz-border-radius: 10px; -webkit-border-radius: 10px; border-radius: 10px; shadow:2px 2px 0 #c2c2c2; box-shadow:2px 2px 0 #c2c2c2; ) .comment .avatar( /* / Аватар позиціонується абсолютно. :absolute;width:50px;background:url("img/default_avatar.gif") no-repeat #fcfcfc; /* Центруємо вертикально: */ margin-top:-25px; top:50%; -moz-box-shadow :1px 1px 0 #c2c2c2;-webkit-box-shadow:1px 1px 0 #c2c2c2;box-shadow:1px 1px 0 #c2c2c2;

div .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; position:absolute;right:15px;top:10px;color:#bbb; ) .comment p, #addCommentContainer p( font-size:18px; addCommentContainer textarea( /* Стиль для введення */ display:block; border:1px solid #ccc; margin:5px 0 5px; padding:3px; font-size:12px; color:#555; font-family:Arial, Helvetica, sans-serif; ) #addCommentContainer textarea( width:300px; ) label( font-size:10px; ) label span.error( color:red; position:relative; right:-10px; ) #submit( /* Кнопка "Надіслати " */ background-color:#58B9EB; border:1px solid #40A2D4; color:#FFFFFF; cursor:pointer; font-family:"Myriad Pro" -weight:bold;padding:4px;margin-top:5px;-moz-border-radius:4px;-webkit-border-radius:4px; border-radius:4px; 80cdf5; border-color: #52b1e2; )

У другій частині ми задаємо стилі для коментарів та елементів форми. Відзначимо селектор input,який виділяє елементи залежно від атрибуту type.

Крок 4 - jQuery

Тепер перейдемо до jQuery.

script.js

$(document).ready(function()( /* Наступний код виконується тільки після завантаження DOM */ /* Даний прапор запобігає надсиланню кількох коментарів: */ var working = false; /* Ловим подія відправки форми: */ $(" #addCommentForm").submit(function(e)( e.preventDefault(); if(working) return false; working = true; $("#submit").val("Working.."); $("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").append(" "+v+""); )); )), "json"); )); ));

Ми використовуємо виклик функції $(document).ready()яка прив'язує функцію до події. Змінна workingдіє як прапор, який сигналізує про те, що запит AJAX перебуває в роботі (у такий спосіб запобігається дублювання одного і того ж коментаря).

У зворотній функції для запиту POST AJAX ми перевіряємо властивість status, щоб визначити, чи було успішно вставлено коментар. Якщо так, ми додаємо отриману розмітку на сторінку після останнього коментаря з анімацією slideDown.

Якщо були проблеми, ми виводимо повідомлення про помилки, додаючи span error до відповідного елементу label(атрибут елемента labelмістить idвведення, що має помилку).

Готово!

Висновок

Щоб запустити скрипт на вашому сервері, потрібно створити таблицю comments у базі даних MySQL. Ви можете зробити це за допомогою коду SQL із файлу table.sql, який потрібно ввести на закладці SQL у phpMyAdmin. Потім потрібно встановити параметри з'єднання з базою даних MySQL у файлі connect.php .

Коментарі в PHP аналогічні коментарям, які використовуються у HTML. У синтаксисі PHP коментар починаються завжди з особливою послідовністю символів і весь текст, який з'являється між цими спецсимволами, буде проігнорований інтерпретатором.

У HTML основна мета коментаря в тому, щоб служити як примітки розробникам, які можуть переглядати вихідний код вашого сайту. Коментарі РНР відрізняються тим, що вони не відображатимуться для відвідувачів. Єдиний спосіб подивитися PHP коментарі це відкрити файл для редагування. Це робить PHP коментарі корисними тільки для PHP-програмістів.

Якщо ви забули або не знали, як робляться коментарі в HTML, то дивіться приклад нижче.

Синтаксис php коментарів: однорядковий коментар

Тоді як у html є лише один вид коментарів, у PHP є цілих два типи. Перший тип, який ми обговорюватимемо, це однорядковий коментар. Тобто коментар, який каже інтерпретатору, ігнорувати все, що відбувається на цій лінії праворуч від коментарів. Для використання цього коментаря слід застосовувати символи "//" або "#" і весь текст праворуч ігноруватиметься інтерпретатором PHP.

Psst...You can"t see my PHP comments!"; // Echo "nothing"; // echo "My name is Humperdinkle!"; # echo "I don"t do anything either"; ?>

Результат:

Hello World! Psst ... You can't see my PHP comments!

Зверніть увагу, що кілька наших команд echo не були оброблені, тому що ми закоментували їх за допомогою спеціальних символів коментування. Цей тип коментарів часто використовується для швидкого запису про складний і заплутаний код або тимчасово видалити рядок коду PHP (для налагодження).

Синтаксис php коментарів: багаторядковий коментар

Як і HTML - коментарі, багаторядкові коментарі PHP можуть бути використані для коментування великих блоків коду або для запису коментів в кілька рядків. Багаторядкові коментарі в PHP починається з "/*" і закінчуються "*/". Все, що знаходиться між цими символами, ігноруватиметься.

Результат.