Translate

Поиск по этому блогу

Показаны сообщения с ярлыком php. Показать все сообщения
Показаны сообщения с ярлыком php. Показать все сообщения

вторник, 8 августа 2017 г.

Создание Базы Данных на OpenServer

При изучении PHP по книгам и руководствам часто возникают проблемы с созданием базы данных (далее - БД) при работе с OpenSrver. Я решил рассмотреть этот вопрос по шагам. И так, приступаем!
  1. Открываем КС - командную строку и переходим в директорию БД OpenServer
    cd C:\OpenServer\modules\database\MariaDB-5.5\bin
    Соединяемся с БД - mysql -u root
    Получаем подтверждение об установленном соединении или повторяем все с начала.

  2. Для просмотра уже существующих БД набираем SHOW DATABASES;

  3. Для работы и перехода к существующей БД - набираемuse name_database;name_database - имя уже существующей БД.ИЛИ создаем новую БД с помощью команды CREATE DATABASE name_database;
    набираемuse name_database; для работы с вновь созданной базой данных

  4. Создаем таблицу в нашей БД, следующей командой:
    CREATE TABLE `aliens_abduction` (
    `first_name` VARCHAR(30) ,
    `last_name` VARCHAR(30) ,
    `whеп_it_hаррепеd` varchar(30) ,
    `hоw_lопg` VARCHAR(30) ,
    `how_many` VARCHAR(30) ,
    `alien_description` VARCHAR(lOO) ,
    `what_they_did` VARCHAR(lOO) ,
    `fang_spotted` VARCHAR(lO) ,
    `other` VARCHAR(lOO) ,
    `email` VАRСНАR(50)
    ) ;
    При наборе использовал Гравис - одинарная кавычка (буква Ё в англ раскладке)

  5. Для того, чтобы добавить данные в новую таблицу:
    INSERT INTO alien_abduction (first_name, last_name, when_it_happened, how_long, how_many, alien_description, what_they_did, fang_spotted, other, email)
    VALUES ('Салли', 'Джонс', '3 дня назад', '1 день' ,'четыре', 'зеленые с шестью щупальцами', 'мы просто разговаривали и играли с со6акой' , ' да', ' возможно, я видела вашу собаку, свяжитесь со мной','sally@mail.com');

  6. Для того, чтобы посмотреть все данные в таблице набираем:
    SELECT * FROM aliens_abduction



Теперь нам осталось сделать так, чтобы данные в таблицу добавлялись автоматически рнр-сценарием


  1. На OpenServer в папке domains у нас есть папка с нашим сайтом mysite. Внутри нее есть два файла report.html и report.php.

    report.html


    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    <head>
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
      <title>Aliens Abducted Me - Report an Abduction</title>
      <link rel="stylesheet" type="text/css" href="style.css" />
    </head>
    <body>
      <h2>Aliens Abducted Me - Report an Abduction</h2>
    
      <p>Share your story of alien abduction:</p>
      <form method="post" action="report.php">
        <label for="firstname">First name:</label>
        <input type="text" name="firstname" /><br />
        <label for="lastname">Last name:</label>
        <input type="text" name="lastname" /><br />
        <label for="email">What is your email address?</label>
        <input type="text" name="email" /><br />
        <label for="whenithappened">When did it happen?</label>
        <input type="text" name="whenithappened" /><br />
        <label for="howlong">How long were you gone?</label>
        <input type="text" name="howlong" /><br />
        <label for="howmany">How many did you see?</label>
        <input type="text" name="howmany" /><br />
        <label for="aliendescription">Describe them:</label>
        <input type="text" name="aliendescription" size="32" /><br />
        <label for="whattheydid">What did they do to you?</label>
        <input type="text" name="whattheydid" size="32" /><br />
        <label for="fangspotted">Have you seen my dog Fang?</label>
        Yes <input name="fangspotted" type="radio" value="yes" />
        No <input name="fangspotted" type="radio" value="no" /><br />
        <img src="fang.jpg" width="100" height="175"
          alt="My abducted dog Fang." /><br />
        <label for="other">Anything else you want to add?</label>
        <textarea name="other"></textarea><br />
        <input type="submit" value="Report Abduction" name="submit" />
      </form>
    </body>
    </html>
    
    


    report.php


    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    <head>
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
      <title>Aliens Abducted Me - Report an Abduction</title>
    </head>
    <body>
      <h2>Aliens Abducted Me - Report an Abduction</h2>
    
    <?php
      $first_name = $_POST['firstname'];
      $last_name = $_POST['lastname'];
      $when_it_happened = $_POST['whenithappened'];
      $how_long = $_POST['howlong'];
      $how_many = $_POST['howmany'];
      $alien_description = $_POST['aliendescription'];
      $what_they_did = $_POST['whattheydid'];
      $fang_spotted = $_POST['fangspotted'];
      $email = $_POST['email'];
      $other = $_POST['other'];
    
      $dbc = mysqli_connect('localhost', 'root', '', 'aliendatabase')
        or die('Error connecting to MySQL server.');
    
      $query = "INSERT INTO alien_abduction (first_name, last_name, when_it_happened, how_long, " .
        "how_many, alien_description, what_they_did, fang_spotted, other, email) " .
        "VALUES ('$first_name', '$last_name', '$when_it_happened', '$how_long', '$how_many', " .
        "'$alien_description', '$what_they_did', '$fang_spotted', '$other', '$email')";
    
      $result = mysqli_query($dbc, $query)
        or die('Error querying database.');
    
      mysqli_close($dbc);
    
      echo 'Thanks for submitting the form.<br />';
      echo 'You were abducted ' . $when_it_happened;
      echo ' and were gone for ' . $how_long . '<br />';
      echo 'Number of aliens: ' . $how_many . '<br />';
      echo 'Describe them: ' . $alien_description . '<br />';
      echo 'The aliens did this: ' . $what_they_did . '<br />';
      echo 'Was Fang there? ' . $fang_spotted . '<br />';
      echo 'Other comments: ' . $other . '<br />';
      echo 'Your email address is ' . $email;
    ?>
    
    </body>
    </html>
    
    

  2. Для соединения с уже созданной базой данных мы создали переменную с запросом:
    $dbc = mysqli_connect('localhost', 'root', '', 'aliendatabase') or die('Error connecting to MySQL server.');
    Первый параметр -localhost остается без изменений, затем идет имя пользователя (в моем случае - root), пароля нет - '' и имя БД - aliendatabase

  3. В следующей перменной мы поместили все действия с данными (куда попадет тот или иной параметр введенный пользователем)
    $query = "INSERT INTO alien_abduction (first_name, last_name, when_it_happened, how_long, " . "how_many, alien_description, what_they_did, fang_spotted, other, email) " . "VALUES ('$first_name', '$last_name', '$when_it_happened', '$how_long', '$how_many', " . "'$alien_description', '$what_they_did', '$fang_spotted', '$other', '$email')";
  4. Запрос к БД - $result = mysqli_query($dbc, $query) or die('Error querying database.');

  5. РНР-функция die () прерывает ход выполнения сценария и выводит сообщение о коде, который выполнить не удалось. Хотя это и не раскрывает всех причин неудачи в подробностях, функция die () все же сообщает нам: что-то случилось и необходимо принимать меры по решению проблемы. Если что-то не так с одним из четырех аргументов, необходимых для соединения функции mysqli_connect ( ) , или сервер баз данных не может быть найден, функция die () останавливает ход выполнения сценария и выводит сообщение об ошибке, которое передается ей в качестве аргумента в скобках.

  6. Функции mysqli_query () необходимо передать в качестве аргумента SQL-запрос в виде РНР-строки (значения переменной $query), для того чтобы произвести добавление данных о похищении космическими пришельцами.

  7. После всего закрываем БД - mysqli_close($dbc);

Более подробно о работе с базой данных смотрите мой пост —Введение в MySQL
                                                                                                                                                             

воскресенье, 28 мая 2017 г.

Шпаргалки для программистов

Несколько сборников полезных шпаргалок:
                                                                                                                                                             

пятница, 12 мая 2017 г.

Как убрать расширение файла из адресной строки

Очень часто бывает необходимо избавиться от расширения файла в адресной строке браузера.
При разработке сайта, даже на локальном сервере, это можно сделать очень просто.
Идем в корневую директорию сайта на локальном сервере и в папке с названием вашего сайта создаем файл .htaccess
В нем указываем домашнюю страницу, то есть ту, которая будет загружаться сразу. Это может быть любой файл, а не обязательно index.html
Например:home.html. В данном случае нам просто нужно добавить в наш .htaccess файл вот такую строчку:

DirectoryIndex home.html Вот и все. Теперь у вас будет вот так:
                                                                                                                                                             

среда, 26 апреля 2017 г.

Материалы для программистов (все темы)

Отличные бесплатные материалы для программистов. Найдется всё:

Полностью такую подборку осилить сложно, так что вот вам более узкие подборки в дополнение:


  1. — Материалы по продвинутым алгоритмам и структурам данных: https://tproger.ru/digest/advanced-computer-science/

  2. — 83 бесплатных материала по грамотному тестированию: https://tproger.ru/digest/free-software-testing-books/

  3. — Материалы по криптографии: https://tproger.ru/digest/crypto/

  4. — Подборка материалов для изучения машинного обучения: https://tproger.ru/digest/machine-learning-materials/

  5. — Самая полная подборка фильмов для айтишников: https://tproger.ru/digest/films/ — не все бесплатные, но вы знаете, что делать 😉

Материалы по отдельным языкам:

Блоги и каналы на YouTube:

Фундаментальные знания для всех
Серьезная литература по программированию для тех, кто хочет овладеть фундаментальными знаниями:
  1. — 4 лучшие книги по C++: https://tproger.ru/books/cpp-books/ — бестселлеры Скотта Мейерса.

  2. — Подборка литературы по теории программирования: https://tproger.ru/books/books-not-for-the-code-monkeys/

  3. — 4 книги о системах контроля версий, которые дадут о них полное представление: https://tproger.ru/books/4-books-about-vcs/

  4. — Подборка книг о компиляторах и обо всем, что с ними связано: https://tproger.ru/books/compiler-design-books/

  5. — 9 полезных бесплатных книг по машинному обучению: https://tproger.ru/boo…/9-free-books-about-machine-learning/

                                                                                                                                                             

вторник, 31 января 2017 г.

Регулярные выражения для новичков

Что такое регулярные выражения?

Если вам когда-нибудь приходилось работать с командной строкой, вы, вероятно, использовали маски имён файлов. Например, чтобы удалить все файлы в текущей директории, которые начинаются с буквы «d», можно написать rm d*.


Регулярные выражения представляют собой похожий, но гораздо более сильный инструмент для поиска строк, проверки их на соответствие какому-либо шаблону и другой подобной работы. Англоязычное название этого инструмента — Regular Expressions или просто RegExp. Строго говоря, регулярные выражения — специальный язык для описания шаблонов строк.


Реализация этого инструмента различается в разных языках программирования, хоть и не сильно. В данной статье мы будем ориентироваться в первую очередь на реализацию Perl Compatible Regular Expressions.


Основы синтаксиса

В первую очередь стоит заметить, что любая строка сама по себе является регулярным выражением. Так, выражению Хаха, очевидно, будет соответствовать строка «Хаха» и только она. Регулярные выражения являются регистрозависимыми, поэтому строка «хаха» (с маленькой буквы) уже не будет соответствовать выражению выше.


Однако уже здесь следует быть аккуратным — как и любой язык, регулярные выражения имеют спецсимволы, которые нужно экранировать. Вот их список: . ^ $ * + ? { } [ ] \ | ( ). Экранирование осуществляется обычным способом — добавлением \ перед спецсимволом.


Набор символов

Предположим, мы хотим найти в тексте все междометия, обозначающие смех. Просто Хаха нам не подойдёт — ведь под него не попадут «Хехе», «Хохо» и «Хихи». Да и проблему с регистром первой буквы нужно как-то решить.


Здесь нам на помощь придут наборы — вместо указания конкретного символа, мы можем записать целый список, и если в исследуемой строке на указанном месте будет стоять любой из перечисленных символов, строка будет считаться подходящей. Наборы записываются в квадратных скобках — паттерну [abcd] будет соответствовать любой из символов «a», «b», «c» или «d».


Внутри набора большая часть спецсимволов не нуждается в экранировании, однако использование \ перед ними не будет считаться ошибкой. По прежнему необходимо экранировать символы «\» и «^», и, желательно, «]» (так, [][] обозначает любой из символов «]» или «[», тогда как [[]х] — исключительно последовательность «[х]»). Необычное на первый взгляд поведение регулярок с символом «]» на самом деле определяется известными правилами, но гораздо легче просто экранировать этот символ, чем их запоминать. Кроме этого, экранировать нужно символ «-«, он используется для задания диапазонов (см. ниже).


Если сразу после [ записать символ ^, то набор приобретёт обратный смысл — подходящим будет считаться любой символ кроме указанных. Так, паттерну [^xyz] соответствует любой символ, кроме, собственно, «x», «y» или «z».


Итак, применяя данный инструмент к нашему случаю, если мы напишем [Хх][аоие]х[аоие], то каждая из строк «Хаха», «хехе», «хихи» и даже «Хохо» будут соответствовать шаблону.


Предопределённые классы символов

Для некоторых наборов, которые используются достаточно часто, существуют специальные шаблоны. Так, для описания любого пробельного символа (пробел, табуляция, перенос строки) используется \s, для цифр — \d, для символов латиницы, цифр и подчёркивания «_» — \w.


Если необходимо описать вообще любой символ, для этого используется точка — .. Если указанные классы написать с заглавной буквы (\S, \D, \W) то они поменяют свой смысл на противоположный — любой непробельный символ, любой символ, который не является цифрой, и любой символ кроме латиницы, цифр или подчёркивания соответственно.


Также с помощью регулярных выражений есть возможность проверить положение строки относительно остального текста. Выражение \b обозначает границу слова, \B — не границу слова, ^ — начало текста, а $ — конец. Так, по паттерну \bJava\b в строке «Java and JavaScript» найдутся первые 4 символа, а по паттерну \bJava\B — символы c 10-го по 13-й (в составе слова «JavaScript»).


Диапазоны

У вас может возникнуть необходимость обозначить набор, в который входят буквы, например, от «б» до «ф». Вместо того, чтобы писать [бвгдежзиклмнопрстуф] можно воспользоваться механизмом диапазонов и написать [б-ф]. Так, паттерну x[0-8A-F][0-8A-F] соответствует строка «xA6», но не соответствует «xb9» (во-первых, из-за того, что в диапазоне указаны только заглавные буквы, во-вторых, из-за того, что 9 не входит в промежуток 0-8).


Механизм диапазонов особенно актуален для русского языка, ведь для него нет конструкции, аналогичной \w. Чтобы обозначить все буквы русского алфавита, можно использовать паттерн [а-яА-ЯёЁ]. Обратите внимание, что буква «ё» не включается в общий диапазон букв, и её нужно указывать отдельно.


Квантификаторы (указание количества повторений)

Вернёмся к нашему примеру. Что, если в «смеющемся» междометии будет больше одной гласной между буквами «х», например «Хаахаааа»? Наша старая регулярка уже не сможет нам помочь. Здесь нам придётся воспользоваться квантификаторами.


Квантификатор Число повторенийПримерПодходящие строки
{n} Ровно n раз Ха{3}хаrХаааха
{m,n}От m до n включительноХа{2,4}ха Хаа, Хааа, Хааааха
{m,}Не менее mХа{2,}хаХааха, Хаааха, Хааааха и т. д.
{,n}Не более nХа{,3}хаХха, Хаха, Хааха, Хаааха

Обратите внимание, что квантификатор применяется только к символу, который стоит перед ним.


Некоторые часто используемые выражения получили в языке регулярных выражений специальные обозначения:


КвантификаторАналогЗначение
? {0,1}Ноль или одно вхождение
*{0,} Ноль или более
+{1,}Одно или более

Таким образом, с помощью квантификаторов мы можем улучшить наш шаблон для междометий до [Хх][аоеи]+х[аоеи]*, и он сможет распознавать строки «Хааха», «хееееех» и «Хихии».


Ленивая квантификация

Предположим, перед нами стоит задача — найти все HTML-теги в строке

<p><b>Tproger</b> — мой <i>любимый</i> сайт о программировании!</p>

Очевидное решение <.*> здесь не сработает — оно найдёт всю строку целиком, т.к. она начинается с тега абзаца и им же заканчивается. То есть содержимым тега будет считаться строка
p><b>Tproger</b> — мой <i>любимый</i> сайт о программировании!</p

Это происходит из-за того, что по умолчанию квантификатор работают по т.н. жадному алгоритму — старается вернуть как можно более длинную строку, соответствующую условию. Решить проблему можно двумя способами. Первый — использовать выражение <[^>]*>, которое запретит считать содержимым тега правую угловую скобку. Второй — объявить квантификатор не жадным, а ленивым. Делается это с помощью добавления справа к квантификатору символа ?. Т.е. для поиска всех тегов выражение обратится в <.*?>.


Ревнивая квантификация

Иногда для увеличения скорости поиска (особенно в тех случаях, когда строка не соответствует регулярному выражению) можно использовать запрет алгоритму возвращаться к предыдущим шагам поиска для того, чтобы найти возможные соответствия для оставшейся части регулярного выражения. Это называется ревнивой квантификацией. Квантификатор делается ревнивым с помощью добавления к нему справа символа +. Ещё одно применение ревнивой квантификации — исключение нежелательных совпадений. Так, паттерну ab*+a в строке «ababa» будут соответствовать только первые три символа, но не символы с третьего по пятый, т.к. символ «a», который стоит на третьей позиции, уже был использован для первого результата.


Скобочные группы

Для нашего шаблона «смеющегося» междометия осталась самая малость — учесть, что буква «х» может встречаться более одного раза, например, «Хахахахааахахооо», а может и вовсе заканчиваться на букве «х». Вероятно, здесь нужно применить квантификатор для группы [аиое]+х, но если мы просто напишем [аиое]х+, то квантификатор + будет относиться только к символу «х», а не ко всему выражению. Чтобы это исправить, выражение нужно взять в круглые скобки: ([аиое]х)+.


Таким образом, наше выражение превращается в [Хх]([аиое]х?)+ — сначала идёт заглавная или строчная «х», а потом произвольное ненулевое количество гласных, которые (возможно, но не обязательно) перемежаются одиночными строчными «х». Однако это выражение решает проблему лишь частично — под это выражение попадут и такие строки, как, например, «хихахех» — кто-то может быть так и смеётся, но допущение весьма сомнительное. Очевидно, мы можем использовать набор из всех гласных лишь единожды, а потом должны как-то опираться на результат первого поиска. Но как?…


Запоминание результата поиска по группе (обратная связь)

Оказывается, результат поиска по скобочной группе записывается в отдельную ячейку памяти, доступ к которой доступен для использования в последующих частях регулярного выражения. Возвращаясь к задачи с поиском HTML-тегов на странице, нам может понадобиться не только найти теги, но и узнать их название. В этом нам может помочь регулярное выражение <(.*?)>.
<p><b>Tproger</b> — мой <i>любимый</i> сайт о программировании!</p>

Результат поиска по всем регулярному выражению: «<p>», «<b>», «</b>», «<i>», «</i>», «</p>».

Результат поиска по первой группе: «p», «b», «/b», «i», «/i», «/i», «/p».


На результат поиска по группе можно ссылаться с помощью выражения \n, где n — цифра от 1 до 9. Например выражению (\w)(\w)\1\2 соответствуют строки «aaaa», «abab», но не соответствует «aabb».


Если выражение берётся в скобки только для применения к ней квантификатора (не планируется запоминать результат поиска по этой группе), то сразу первой скобки стоит добавить ?:, например (?:[abcd]+\w).

С использованием этого механизма мы можем переписать наше выражение к виду [Хх]([аоие])х?(?:\1х?)*.


Перечисление

Чтобы проверить, удовлетворяет ли строка хотя бы одному из шаблонов, можно воспользоваться аналогом булевого оператора OR, который записывается с помощью символа |. Так, под шаблон Анна|Одиночество попадают строки «Анна» и «Одиночество» соответственно. Особенно удобно использовать перечисления внутри скобочных групп. Так, например (?:a|b|c|d) полностью эквивалентно [abcd] (в данном случае второй вариант предпочтительнее в силу производительности и читаемости).


С помощью этого оператора мы сможем добавить к нашему регулярному выражению для поиска междометий возможность распознавать смех вида «Ахахаах» — единственной усмешке, которая начинается с гласной: [Хх]([аоие])х?(?:\1х?)*|[Аа]х?(?:ах?)+


Полезные сервисы

Потренироваться и / или проверить своё регулярное выражение на каком-либо тексте без написания кода можно с помощью таких сервисов, как RegExr, Regexpal или Regex101. Последний, вдобавок, приводит краткие пояснения к тому, как регулярка работает.


Разобраться, как работает регулярное выражение, которое попало к вам в руки, можно с помощью сервиса Regexper — он умеет строить понятные диаграмы по регулярному выражению.


RegExp Builder — визуальный конструктор функций JavaScript для работы с регулярными выражениями. Больше инструментов можно найти в нашей подборке.

Задания для закрепления

Найдите время

Время имеет формат часы:минуты. И часы, и минуты состоят из двух цифр, пример: 09:00. Напишите регулярное выражение для поиска времени в строке: «Завтрак в 09:00». Учтите, что «37:98» — некорректное время.





Java[^script]

Найдет ли регулярка Java[^script] что-нибудь в строке Java? А в строке JavaScript?





Цвет

Напишите регулярное выражение для поиска HTML-цвета, заданного как #ABCDEF, то есть # и содержит затем 6 шестнадцатеричных символов.



Разобрать арифметическое выражение

Арифметическое выражение состоит из двух чисел и операции между ними, например:

1 + 2
1.2 * 3.4
-3 / -6
-2 — 2
Список операций: «+», «-», «*» и «/».

Также могут присутствовать пробелы вокруг оператора и чисел.

Напишите регулярное выражение, которое найдёт как всё арифметическое действие, так и (через группы) два операнда.




Кроссворды из регулярных выражений

Интересное и полезное времяпрепровождение! Найти такие кроссворды можно в подборке.

                                                                                                                                                             


Хотите освоить самые современные методы написания React приложений? Надоели простые проекты? Нужны курсы, книги, руководства, индивидуальные занятия по React и не только? Хотите стать разработчиком полного цикла, освоить стек MERN, или вы только начинаете свой путь в программировании, и не знаете с чего начать, то пишите через форму связи, подписывайтесь на мой канал в Телеге, вступайте в группу на Facebook.Пишите мне - kolesnikovy70 почта gmail.com