Блог программиста




Статья - 03
"Напиши мне - PHP контактная форма"

(09.07.2019)
Всем привет!

Как насчет создания контактной формы, используя только PHP?
Я создал одну для моего старого сайта.

Но прежде я не использовал и не изучал php.
И эта контактная форма мой первый опыт работы с php.
PHP (Personal Home Page tools) — это язык программирования общего назначения, разработанный для веб-разработки.
Давайте начнем!

Прежде чем мы начнем писать код, нам нужно создать и запустить наш собственный Apache сервер.
Я буду использовать панель управления XAMPP.
После скачивания Xampp просто запустите сервер Apache.




При загрузке Xampp автоматически будет создана папка xampp на диске C.


На нем нам нужна папка htdocs:


И это наша основная папка, где мы будем работать.
Теперь давайте создадим здесь файл index.php.

Echo: "hello world!"

<html>
 <head>
  <title>Test PHP - Hello world!</title>
 </head>
  <body>
     <?php echo '<p>Hello world!</p>'; ?>
  </body>
</html>
или так:
<html>
 <head>
  <title>Test PHP - Hello world!</title>
 </head>
  <body>
     <?php echo 'Hello world!'; ?> //echo is the same as just print.
  </body>
</html>
В отличии от HTML, мы не можем открыть файл .php просто в браузере,
сначала нужно подключиться к серверу
и для этого нам нужен xampp.

Если вы уже подключены,
зайдите в браузер на http://localhost/.
Вы должны увидеть что-то вроде этого:


Как вы могли заметить с php нужно использовать и HTML
в html структуре между тегами php выполняется php команды:
php .

А теперь обратно к форме

В index.php нам нужно создать контактную форму, которая отправляет данные на сервер
и нам нужно их там собрать.

Форма обратной связи (index.php):
<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title></title>
  </head>
  <body>
    <?php
      $_POST
     ?>
    <form action="welcome.php" method="post">
      <input type="text" name="name" placeholder="Name" maxlength="25"><br> <!--<br> used to wrap text/object-->
      <input type="email" name="email" placeholder="E-mail" maxlength="25"><br>
      <input type="text" name="subject" placeholder="Subject" maxlength="25"><br>
     <br>
      <textarea type="text" name="text" placeholder="Message" maxlength="300" rows="10px" cols="35px"></textarea><br>
     <br>
      <input type="submit">
    </form>
  </body>
</html>

Мы создали форму с тегом <form>)
и действием направленном на файл welcome.php через метод get или post.
Это означает, что при нажатии на кнопку отправки (<input type="submit">)
результат этой формы будет отправлен в этот (welcome.php) файл.
Как будто бы мы создаем мост между этими двумя файлами, один из которых находится на сервере.

В этой форме мы создаем окно ввода для имени / электронной почты / темы, текстовое окно для сообщения
и кнопку отправки.
Для каждого окна мы прописываем тип данных (type = "type"),
Такие как, text для текста и email для электронных писем и тд..

Также мы можем назначить максимальную длину ввода с maxlength = "25"
и можно написать что-то в окне ввода с атрибутом placeholder = "write what",
пользователь будет видеть эту надпись до тех пор, как не начнет что-то в нем писать.

У нас есть информация из контактной формы, которая будет отправлена.
Но нам нужно ее собрать.
И это мы делаем во втором файле (welcome.php).
<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title></title>
  </head>
    <body>
      <?php
        $name = $_POST["name"];
        $email = $_POST["email"];
        $subject = $_POST["subject"];
        $text = $_POST["text"];
        $date = date("h:i:sa [d.m.Y]");
        $br = "\n";
        $line = "-------------------------";

        echo $date;
        echo "<br>";
        echo "name is: " . $name;
        echo "<br>";
        echo "email is: " . $email;
        echo "<br>";
        echo "subject is: " . $subject;
        echo "<br>";
        echo "message: " . $text;
        echo "<br>";
        echo $line;
        echo "<br>";
       ?>
    </body>
</html>
Вы видите, что мы создаем переменные с символом $
и присваиваем данные из контактной формы с помощью метода $_POST или $_GET from a contact form to these variables.
В квадратных скобках нам нужно написать, какое имя входа из index.php будет сохранено в переменной.
<input type="text" name="name">
---------------------------------------------------
$name = $_POST["name"];
или
<input type="email" name="email">
---------------------------------------------------
$email = $_POST["email"];
Это должно выглядеть так:

Теперь мы можем писать -> отправлять -> читать входные данные
Но мы должны их и уметь сохранять.
Я реализовал это так: если вы нажали на кнопку отправить, вы будете отправлены на welcome.php
и ваши введенная информация будет сохранена в log.txt
welcome.php:
<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title></title>
  </head>
  <body>
    <?php
      $name = $_POST["name"];
      $email = $_POST["email"];
      $subject = $_POST["subject"];
      $text = $_POST["text"];
      $date = date("h:i:sa [d.m.Y]");
      $br = "\n";
      $line = "-------------------------";

      $log = file_put_contents('logs.txt', $line.PHP_EOL , FILE_APPEND | LOCK_EX);
      $log = file_put_contents('logs.txt', "date: " . $date.PHP_EOL , FILE_APPEND | LOCK_EX);
      $log = file_put_contents('logs.txt', "name: " . $name.PHP_EOL , FILE_APPEND | LOCK_EX);
      $log = file_put_contents('logs.txt', "email: " . $email.PHP_EOL , FILE_APPEND | LOCK_EX);
      $log = file_put_contents('logs.txt', "subject: " . $subject.PHP_EOL , FILE_APPEND | LOCK_EX);
      $log = file_put_contents('logs.txt', "message: " . $text.PHP_EOL , FILE_APPEND | LOCK_EX);
      $log = file_put_contents('logs.txt', $line.PHP_EOL , FILE_APPEND | LOCK_EX);
      $log = file_put_contents('logs.txt', $br.PHP_EOL , FILE_APPEND | LOCK_EX);
     ?>
  </body>
</html>
Видите, я не использую echo, потому что пользователю не нужно видеть его письмо.
Вместо этого мы создаем logs.txt
(нам не нужно создавать файл самостоятельно, php автоматически создаст файл, если он его не найдет)
и записывает содержимое переменных в него.
$log = file_put_contents('logs.txt', $line.PHP_EOL , FILE_APPEND | LOCK_EX);
Думаю, было бы гораздо удобнее, если бы мы знали дату отправки письма.
$date = date("h:i:sa [d.m.Y]");
Сервер может самостоятельно узнать время, без дополнительных скриптов.
Просто напишите, в каком формате вы хотите видеть время..

Я немного поиграл с дизайном логов, и результат должен быть примерно таким:

-------------------------
date: 02:01:13pm [25.03.2019]
name: Max
email: email@email.email
subject: test 1
message: Hi
-------------------------


-------------------------
date: 02:08:35pm [25.04.2019]
name: Max
email: email@email.email
subject: test 2
message: Hi again
-------------------------

Наверное, это все,
мы создали контактную форму на php!

Назад

К началу