Русский
Русский
English
Статистика
Реклама

Comments

Пишем комментарии для сайта на чистом PHP MySQL Ajax

05.08.2020 02:22:35 | Автор: admin
Привет всем! Недавно столкнулся с проблемой написания комментариев на сайте. Просмотрел весь интернет в поиске нормальных статей, по поводу написания комментариев на чистом PHP 7. Статьи были, но в основном либо устаревшие, либо не работающие уже совсем. Для написания комментариев Вам необходимо знать PHP 7, MySQL, JavaScript и Ajax. Приступим!



Front-End


Структура


Для начало создаем все нужные файлы и папки.


Далее создаем самую простую форму заполнения комментария.
В comments.php:
<!DOCTYPE html><html lang="ru"><head>  <title>Комментарии</title>  <link rel="stylesheet" href="http://personeltest.ru/aways/habr.com/css/style.css">  <meta http-equiv="content-type" content="text/html; charset=utf-8">  <script type="text/javascript" src="js/jquery-1.5.1.min.js"></script></head><body>  <form action="sendMessage.php" method="post" name="form">    <p class="is-h">Автор:<br> <input name="author" type="text" class="is-input" id="author"></p>    <p class="is-h">Текст сообщения:<br><textarea name="message" rows="5" cols="50" id="message"></textarea></p>    <input name="js" type="hidden" value="no" id="js">    <button type="submit" id='click' name="button" class="is-button">Отправить</button>  </form>  <div class="clear">  </div>  <p>Комментарии к статье</p>  <div id="commentBlock"><!-- Здесь будут высвечиваться комментарии -->  </div></body></html>


Работаем с БД


Подготовка Базы Данных


Сначала создадим нужную нам Базу Данных и таблицу:
Базу данных назовем test.
Далее создаем таблицу:
CREATE TABLE `test`.`messages` ( `id` INT(255) UNSIGNED NOT NULL AUTO_INCREMENT , `author` VARCHAR(30) NOT NULL , `message` TEXT NOT NULL , `date` VARCHAR(25) NOT NULL , PRIMARY KEY (`id`)) ENGINE = InnoDB CHARSET=utf8 COLLATE utf8_general_ci;

Она должна быть такой структуры:


Подключение к Базе Данных


Теперь подключимся к самой базе данных. Подключаться будем в отдельном файле, чтобы в дальнейшем каждый раз не подключаться.
В файле connect.php пишем:
<?php$mysql = new mysqli('localhost', 'login', 'password', 'test');?>

Вместо login и password вставляете свои значения (логин и пароль соответственно). Например у меня login root, и пароль root:
<?php$mysql = new mysqli('localhost', 'root', 'root', 'test');?>

test название нашей Базы Данных.

Пишем сам скрипт


Получение и обработка данных из полей


Теперь нам нужно получить данные из полей. Но для начала сделаем нашу форму немного симпатичнее, чтобы было приятнее с ней работать. В style.css пропишем:
* {  max-width: 800px;  margin: 0 auto;}textarea {  resize: none;}.clear {  margin-top: 50px;}#author {  width: 100%;  height: 4%;  font-size: 1.3em;}.is-h {  font-weight: bold;  font-family: cursive;  margin-top: 2%;}#message {  width: 100%;  font-size: 1.5em;}.is-button {  cursor: pointer;  color: white;  background-color: green;  width: 25%;  height: 50px;  margin-top: 1%;  outline: none; /* Убираем линию вокруг кнопки при нажатии */  font-weight: bold;  font-family: cursive;  font-size: 1.2em;  border: none;  transition: all 0.3s ease-out;}.is-button:hover {  color: black;  background: rgb(48, 184, 66);}


Теперь наша форма должна выглядить так:


Обработка данных с помощью AJAX


Теперь получим данные из полей, обработаем их и отправим в PHP на доработку:
В файле comments.php, в теге script пропишем:
$(function() {    $("#send").click(function(){ // При нажатии на кнопку      var author = $("#author").val(); // Получаем имя автора комментария      var message = $("#message").val(); // Получаем само сообщение      $.ajax({ // Аякс        type: "POST", // Тип отправки "POST"        url: "sendMessage.php", // Куда отправляем(в какой файл)        data: {"author": author, "message": message}, // Что передаем и под каким значением         cache: false, // Убираем кеширование        success: function(response){ // Если все прошло успешно          var messageResp = new Array('Ваше сообщение отправлено','Сообщение не отправлено Ошибка базы данных','Нельзя отправлять пустые сообщения');          var resultStat = messageResp[Number(response)];          if(response == 0){             $("#author").val("");            $("#message").val("");            $("#commentBlock").append("<div class='comment'>Автор: <strong>"+author+"</strong><br>"+message+"</div>");}            $("#resp").text(resultStat).show().delay(1500).fadeOut(800);}});return false;});});

Обработка данных и запись их в БД


Теперь приступим к самому интересному. Для начала нам нужно провести самые примитивные проверки и словить данные с AJAX. В sendMessage.php пишем:
<?php include("connect.php"); // Подключаемся к БДheader("Content-type: text/html; charset=UTF-8"); // Устанавливаем кодировку//Если JS у пользователя включенif(empty($_POST['js'])){ if($_POST['message'] != '' && $_POST['author'] != ''){ // Если поля не пустые$author = @iconv("UTF-8", "windows-1251", $_POST['author']);$author = addslashes($author);$author = htmlspecialchars($author);$author = stripslashes($author);$author = mysql_real_escape_string($author); // Обрабатываем данные$message = @iconv("UTF-8", "windows-1251", $_POST['message']);$message = addslashes($message);$message = htmlspecialchars($message);$message = stripslashes($message);$message = mysql_real_escape_string($message); // Обрабатываем данные$date = date("d-m-Y в H:i:s"); // Получаем дату(фиксируем)$result = $mysql->query("INSERT INTO `messages` (`author`, `message`, `date`) VALUES ('$author', '$message', '$date')"); // Передаем в БД значенияif($result == true){echo 0; //Ваше сообшение успешно отправлено}else{echo 1; //Сообщение не отправлено. Ошибка базы данных}}else{echo 2; //Нельзя отправлять пустые сообщения}}// Если отключен JavaScript if($_POST['js'] == 'no'){if($_POST['message'] != '' && $_POST['author'] != ''){$author = $_POST['author'];$author = addslashes($author);$author = htmlspecialchars($author);$author = stripslashes($author);$message = $_POST['message'];$message = addslashes($message);$message = htmlspecialchars($message);$message = stripslashes($message);$date = date("d-m-Y в H:i:s");$result = $mysql->query("INSERT INTO `messages` (`author`, `message`, `date`) VALUES ('$author', '$message', '$date')");if($result == true){echo "Ваше сообшение успешно отправлено"; //Ваше сообшение успешно отправлено}else{echo "Сообщение не отправлено. Ошибка базы данных"; //Сообщение не отправлено. Ошибка базы данных}}else{echo "Нельзя отправлять пустые сообщения"; //Нельзя отправлять пустые сообщения}}?>

Вывод комментариев


Теперь дело за малым. Осталось всего лишь вывести эти комментарии в приятной для глаза форме.
Сначала необходимо подключиться к БД в comments.php. В самом верху пишем:
<?php require 'connect.php'; ?>

В div с id=commentBlock в файле comments.php пишем:
<?php            $result = $mysql->query("SELECT * FROM `messages`"); /*Получаем все данные из таблицы*/            $comment = $result->fetch_assoc(); /* В результирующий массив */            do{echo "<div class='comment' style='border: 1px solid gray; margin-top: 1%; border-radius: 5px; padding: 0.5%;'>Автор: <strong>".$comment['author']."</strong><br>".$comment['message']."</div>"; // Выводим          }while($comment = $result->fetch_assoc());          ?>

По комментариям должно быть все понятно. И теперь у нас должно получиться что-то вроде такого:

Всем спасибо за Внимание! Вот исходники:
comments.php
<?php require 'connect.php'; ?><!DOCTYPE html><html lang="ru"><head>  <title>Комментарии</title>  <link rel="stylesheet" href="http://personeltest.ru/aways/habr.com/css/style.css">  <meta http-equiv="content-type" content="text/html; charset=utf-8">  <script type="text/javascript" src="js/jquery-1.5.1.min.js"></script>  <script type="text/javascript">  $(function() {    $("#send").click(function(){      var author = $("#author").val();      var message = $("#message").val();      $.ajax({        type: "POST",        url: "sendMessage.php",        data: {"author": author, "message": message},        cache: false,        success: function(response){          var messageResp = new Array('Ваше сообщение отправлено','Сообщение не отправлено Ошибка базы данных','Нельзя отправлять пустые сообщения');          var resultStat = messageResp[Number(response)];          if(response == 0){            $("#author").val("");            $("#message").val("");            $("#commentBlock").append("<div class='comment'>Автор: <strong>"+author+"</strong><br>"+message+"</div>");}            $("#resp").text(resultStat).show().delay(1500).fadeOut(800);}});return false;});});            </script>          </head>                    <body>            <form action="sendMessage.php" method="post" name="form">              <p class="is-h">Автор:<br> <input name="author" type="text" class="is-input" id="author"></p>              <p class="is-h">Текст сообщения:<br><textarea name="message" rows="5" cols="50" id="message"></textarea></p>              <input name="js" type="hidden" value="no" id="js">              <button type="submit" id='click' name="button" class="is-button">Отправить</button>            </form>            <div class="clear">                          </div>                        <p>Комментарии к статье</p>                        <div id="commentBlock">              <?php              $result = $mysql->query("SELECT * FROM `messages`");              $comment = $result->fetch_assoc();              do{echo "<div class='comment' style='border: 1px solid gray; margin-top: 1%; border-radius: 5px; padding: 0.5%;'>Автор: <strong>".$comment['author']."</strong><br>".$comment['message']."</div>";              }while($comment = $result->fetch_assoc());              ?>            </div>          </body>          </html>


sendMessage.php:
<?php include("connect.php");header("Content-type: text/html; charset=UTF-8");//**********************************************if(empty($_POST['js'])){if($_POST['message'] != '' && $_POST['author'] != ''){$author = @iconv("UTF-8", "windows-1251", $_POST['author']);$author = addslashes($author);$author = htmlspecialchars($author);$author = stripslashes($author);$author = mysql_real_escape_string($author);$message = @iconv("UTF-8", "windows-1251", $_POST['message']);$message = addslashes($message);$message = htmlspecialchars($message);$message = stripslashes($message);$message = mysql_real_escape_string($message);$date = date("d-m-Y в H:i:s");$result = $mysql->query("INSERT INTO `messages` (`author`, `message`, `date`) VALUES ('$author', '$message', '$date')");if($result == true){echo 0; //Ваше сообшение успешно отправлено}else{echo 1; //Сообщение не отправлено. Ошибка базы данных}}else{echo 2; //Нельзя отправлять пустые сообщения}}//**************************************** Если отключен JavaScript ************************************if($_POST['js'] == 'no'){if($_POST['message'] != '' && $_POST['author'] != ''){$author = $_POST['author'];$author = addslashes($author);$author = htmlspecialchars($author);$author = stripslashes($author);$message = $_POST['message'];$message = addslashes($message);$message = htmlspecialchars($message);$message = stripslashes($message);$date = date("d-m-Y в H:i:s");$result = $mysql->query("INSERT INTO `messages` (`author`, `message`, `date`) VALUES ('$author', '$message', '$date')");if($result == true){echo "Ваше сообшение успешно отправлено"; //Ваше сообшение успешно отправлено}else{echo "Сообщение не отправлено. Ошибка базы данных"; //Сообщение не отправлено. Ошибка базы данных}}else{echo "Нельзя отправлять пустые сообщения"; //Нельзя отправлять пустые сообщения}}?>


connect.php:
<?php$mysql = new mysqli('localhost', 'root', 'root', 'test');?>


style.css:
* {  max-width: 800px;  margin: 0 auto;}textarea {  resize: none;}.clear {  margin-top: 50px;}#author {  width: 100%;  height: 4%;  font-size: 1.3em;}.is-h {  font-weight: bold;  font-family: cursive;  margin-top: 2%;}#message {  width: 100%;  font-size: 1.5em;}.is-button {  cursor: pointer;  color: white;  background-color: green;  width: 25%;  height: 50px;  margin-top: 1%;  outline: none; /* Убираем линию вокруг кнопки при нажатии */  font-weight: bold;  font-family: cursive;  font-size: 1.2em;  border: none;  transition: all 0.3s ease-out;}.is-button:hover {  color: black;  background: rgb(48, 184, 66);}

Подробнее..
Категории: Javascript , Php , Js , Mysql , Ajax , Jquery , Back-end , Comments

Hi Programming Language начинаем конструировать

06.10.2020 12:23:44 | Автор: admin
Мы приступаем к конструированию языка программирования Hi. Здесь ввод в курс дела и некоторые ответы на вопросы, зачем это нужно. Впрочем, и без веских причин конструирование языка это необыкновенно интересная задача, если относится к делу серьёзно.

Следуя нашему тезису максимальной доступности для обучения, постараемся логично интегрировать все основные элементы языка из широко используемых элементов других алгоритмических языков. Здесь мы следуем внутренней логике, заданной в первой статье и тому предположению, что композиция сущностей нескольких популярных языков позволит легче схватить новое содержание с меньшими усилиями, так как люди обладают встроенной интегрирующей машиной на базе нейронных сетей, которая автоматически вастнавливаят semantics parte наруш. soobщeniй.

Идея конструирования новых языков из элементов уже известных имеет давнюю историю. Более 140 лет назад доктор Заменгоф создал искусственный язык Эсперанто из составных частей других естественных языков. Язык получился настолько логичным и легким в усвоении, что оказался жизнеспособен и дожил до наших дней. Например, он есть в Google переводчике. Saluton Habr! Bonvenon sub la kat!



Попробуем сконструировать язык, удобный для быстрого программирования интеллектуальных игр и головоломок и использование которого доставит удовольствие своей логичностью и продуманностью.

Комментарии


Для однострочного комментария используем символ # (Python, R, Ruby). Сочетание // (С и множество других языков) применим в качестве оператора деления целых чисел для получения результата операции как вещественного числа, чтобы не использовать в этом случае немного тяжеловесное выражение конверсии вида CGFloat(int), как в Swift.

PRINT Hi world\n
# печатает Hi world с переходом на новую строку

Для выделения многострочных комментариев используем сочетание ##.
## Это многострочный комментарий.
Интересно, почему он не используется в Python ##

Выбор символа # также удобен тем, что в будущем он будет использоваться интерпретатором Hi language для обработки мета-тегов в тексте программы, которые могут быть синтезированы из текста комментариев. Это немного похоже на работу препроцессора в С/C++, где, кстати, тоже используется символ #.

Элементарные типы данных


Hi language в basic edition использует три элементарных типа данных:

Бинарный: BOOL
Возможные операции: & (and), | (or), ~ (not)
LET true = TRUE
LET false = FALSE
PRINT true & true # печатает TRUE
PRINT true | false # печатает TRUE
PRINT ~true # печатает FALSE

Целые числа: INT
Возможные операции: +, -, *, / (целочисленное деление), % (остаток), // (деление с автоматической конверсией результата на тип REAL)
VAR i = 0
PRINT (i + 6 2) * 3 / 5 # печатает 2

Вещественные числа: REAL
Возможные операции: +, -, *, /
VAR pi = 3.1415926535


Строки


Строки являются составным типом, так как рассматриваются как цепочка Unicode символов
LET the_force = flow through you

Одинарные кавычки для выделения строковых литералов не используем, так как знаки, особенно расположенные на стандартной клавиатуре это ценный ресурс на будущее.
Стандартные операции над строками:
# Конкатенация
VAR language = C
LET statement = the best language ever
LET proposition = language + statement
language = Python

Пока нам нет необходимости вводить тип данных вида Character; для решения практических задач можно использовать
# Доступ к элементу строк
LET secondSym = language[2]

Результат присваивания в том случае, когда ссылка по индексу выходит за пределы строки равен и не приводит к run-time error.

Константы и переменные


Как мы уже увидели в примерах выше, Hi язык со статической типизацией для снижения вероятности ошибок использования идентификаторов и лучшего понимания их назначения. Константы LET и переменные VAR должны быть объявлены до момента первого использования объекта. Объявление типов эргономичнее делать без явного указания конкретного типа через присваивание исходных значений; в этом случае вывод типа становится очевиден.
## вместо
LET one: INT = 1 лучше использовать: ##
LET one = 1
VAR boolean = TRUE

Концепция объявления констант и переменных let и var заимствована из Swift, но в Hi возможно сделать множественное объявление с присвоением одного значения:
VAR i, j, k = 0


Стандартный ввод и вывод


Ввод данных с клавиатуры осуществляется командой INPUT:
VAR startFrom: INT
PRINT "Start from: "; INPUT startFrom

Для ввода значения типа BOOL не нужно печатать true или false. Мобильное приложение для программирования, которое мы готовим к выходу в AppStore достаточно умно, чтобы в этом случае вывести только две кнопки с бинарным выбором. Точно также будет отображаться цифровая клавиатура без точки для ввода целого числа и обычная клавиатура для ввода текстового значения.

Команда PRINT печатает строки на экране с консольным типом отображения. По умолчанию используется режим 20 строк по 40 символов. Можно выбрать режим с крупными символами 10 Х 20 или мелкими: 40 Х 80.
PRINT "Сегодня мы изучили калькулятор для Hi language"


Hi Calculator Language


Теперь у нас есть всё, чтобы в терминах языка Hi сформировать грамматику калькулятора с интерактивным вводом выводом в форме EBNF.

1. The Syntax of HI Programming Language

digit = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9".
capital = "A" | ... | "Z".
small = "a" | ... | "z".
character = [Unicode_character].
addOperator = "+" | "-" | "|".
mulOperator = "*" | "/" | "//" | "%" | "&".
relation = "==" | "~=" | "<" | "<=" | ">" | ">=".

integer = digit {digit}.
real = digit {digit} "." {digit}.
string = """ {character} """.

number = integer | real.
letter = capital | small.

keyword = capital capital {capital}.
ident = letter {letter | digit}.
type = keyword.

factor = number | string | TRUE | FALSE | ident | "(" expression ")" | "~" factor.
term = factor {mulOperator factor}.
simpleExpression = ["-"] term {addOperator term}.
expression = simpleExpression [relation simpleExpression].
assignment = ident "=" expression.

identList = ident {"," ident}.
expList = expression {"," expression}.
constDeclaration = LET identList [":" type] "=" expression.
varDeclaration = VAR identList [":" type] ["=" expression].
funcCall = keyword [expList ].

statement = assignment | funcCall | constDeclaration | varDeclaration
statementSequence = statement {("\n" | ";") statement}.

2. Standard Data Types

BOOL INT REAL STRING

3. Standard Procedures and Functions

INPUT PRINT

4. Other Keywords

LET VAR

В отличие от грамматики множества языков, где ключевые слова входят в список исключений из более общего класса идентификаторов, мы вводим специальный вид токена keyword, который распознается уже на уровне сканнера интерпретатора Hi language.

В следующей статье введем в язык Hi составные типы данных в дополнение к STRING. Для нашего простого языка они достаточно мощные, чтобы легко выражать идеи оперирования множествами объектов, массивами и словарями.
Подробнее..

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru