Аннали comment php. Проста система коментування за допомогою AJAX. 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 починається з "/*" і закінчуються "*/". Все, що знаходиться між цими символами, ігноруватиметься.

Результат.

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

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

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

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

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

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

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

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

Крок 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 = ""; 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"; return "
".$link_open." ".$link_close."
".$link_open.$d["name"].$link_close."
".date("d MY",$d["dt"])."

".$d["body"]."

"; }

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

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

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

public static function validate(&$arr) ( /* / Даний метод використовується для перевірки даних, що відправляються через AJAX. / / Він повертає true/false залежно від правильності даних, і наповнює / масив $arr, який передається як параметр або даними або повідомленням про помилку.*/ $errors = 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,"nam 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); ) // 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": "Please enter a valid Email.", "body": "Please enter a comment body.", "name": "Please enter a 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; :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;) #s ubmit:hover( background-color:#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 .

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
Приклад з однорядковим коментарем:

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

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

Браузери