Отправить данные методом post с созданной страницы

Re: Отправить данные методом post с созданной страницы

от Styazhkin Nikolay -
Количество ответов: 0

Разобрался сам, долго не отвечал...)) 

Получилось все очень просто, о чем собственно хочу написать, может быть кому-то пригодится. В php особо не силен, но основы понимаю. Постараюсь описать все свои шаги, опытные PHP подскажите если я что то сделал не так.

Не авторизованный пользователь заходит на главную страницу, проходит на страницу со списком курсов. Список курсов создан на отдельной странице /mod/page/view.php?id=71(эта страница создана на главной странице). Пользователь выбирает курс и проходит на страницу с описанием курса /mod/page/view.php?id=56. Далее пользователь нажимает на кнопку записаться на курс и проходит на страницу «Форма записи на курс» /mod/page/view.php?id=21.

http://www.picshare.ru/view/6939922/ - ссылка на схему.

Для реализации данных потребностей надо править код, на самом деле все очень просто. Использовать плагин feedback мне не захотелось. Так же у нас имеется десяток страниц с описанием курсов, а еще требуется указывать информацию на какой курс записывается пользователь на странице «Форма записи на курс» (эту функцию я реализовал с помощью кук). И, кроме курсов, имеются разовые семинары, пользователь тоже может записаться на семинар через форму записи, соответственно надо сделать две формы (т.е. две страницы).

Вся информация, которую мы собираем на странице «Форма записи на курс», отсылается на наш почтовый ящик.

Что я сделал. Первое что требуется – это создать две страницы для форм. Первая – форма записи на курс, Вторая форма записи на семинар, у меня получилось так:

·         Курсы - /mod/page/view.php?id=64

·         Семинары -/mod/page/view.php?id=51

Теперь код (начну с /mod/page/locallib.php):

Начинаю вставлять код после функции page_get_editor_options.

/* Запрос ID страницы */

$get_query = $_GET['id'];


/* Массив с id страницами. На этих страницах надо отображать ссылку "ЗАПИСЬ НА КУРС" */

$page_array_course = [41, 42, 43, 44, 45, 46, 47, 48, 49, 52, 53, 54, 55, 57, 71, 72];

$page_array_seminar = [73, 74];


/* Массив с id страницами и именами курсов/семинаров */

$course_array = [

  41 => "Курс 1",

  42 => "Курс 2",

  43 => "Курс 3",

  44 => "Курс 4",

  45 => "Курс 5",

  46 => "Курс 6",

  47 => "Курс 7",

  48 => "Курс 8",

  49 => "Курс 9",

  52 => "Курс 10",

  54 => "Курс 11",

  55 => "Курс 12",

  57 => "Курс 13"

];

$seminar_array = [

73 => "Семинар 1",

  74 => "Семинар 2"

];


/* Переменные для кук */

$course_view = '';

$seminar_view = '';


/* Назначение куки в зависимости от выбора курса/семинара */ 

switch ($get_query) {

  case '41':

    setcookie('course', 'course_1', time()+3600);

    break;

  case '42':

    setcookie('course', 'course_2', time()+3600);

    break;

  case '43':

    setcookie('course', 'course_3', time()+3600);

    break;

  case '44':

    setcookie('course', 'course_4', time()+3600);

    break;

  case '45':

    setcookie('course', 'course_5', time()+3600);

    break;

  case '46':

    setcookie('course', 'course_6', time()+3600);

    break;

  case '47':

    setcookie('course', 'course_7', time()+3600);

    break;

  case '48':

    setcookie('course', 'course_8', time()+3600);

    break;

  case '49':

    setcookie('course', 'course_9', time()+3600);

    break;

  case '52':

    setcookie('course', 'course_10', time()+3600);

    break;

  case '54':

    setcookie('course', 'course_11', time()+3600);

    break;

  case '55':

    setcookie('course', 'course_12', time()+3600);

    break;

  case '57':

    setcookie('course', 'course_13', time()+3600);

    break;

case '73':

setcookie('seminar', 'seminar_1', time()+3600);

break;

case '74':

setcookie('seminar', 'seminar_2', time()+3600);

break;

};


/* Вывод имени курса от полученной cookie */

switch ($_COOKIE['course']) {

  case 'course_1':

    $course_view = $course_array[41];

    break;

  case 'course_2':

    $course_view = $course_array[42];

    break; 

  case 'course_3':

    $course_view = $course_array[43];

    break;

  case 'course_4':

    $course_view = $course_array[44];

    break;

  case 'course_5':

    $course_view = $course_array[45];

    break;

  case 'course_6':

    $course_view = $course_array[46];

    break;

  case 'course_7':

    $course_view = $course_array[47];

    break;

  case 'course_8':

    $course_view = $course_array[48];

    break;

  case 'course_9':

    $course_view = $course_array[49];

    break;

  case 'course_10':

    $course_view = $course_array[52];

    break;

  case 'course_11':

    $course_view = $course_array[54];

    break;

  case 'course_12':

    $course_view = $course_array[55];

    break;

  case 'course_13':

    $course_view = $course_array[57];

    break;

}

/* Вывод имени семинара от полученной cookie */

switch ($_COOKIE['seminar']){

case 'seminar_1':

$seminar_view = $seminar_array[73];

break;

case 'seminar_2':

$seminar_view = $seminar_array[74];

break;

}


/* Объявление переменных для запроса формы*/

$form_name_course = clear_string($_POST['name_for_course']);

$form_name_seminar = clear_string($_POST['name_for_seminar']);

$form_email = clear_string($_POST['email']);

$form_phone = clear_string($_POST['phone']);

$form_bday = clear_string($_POST['bday']);

$form_city = clear_string($_POST['city']);

$form_about = clear_string($_POST['about']);

$form_comment = clear_string($_POST['comment']);


/* Переменные для отправки */

$to = "admin@admin.ru"; //УКАЗАТЬ КУДА ОТПРАВЛЯЕМ ПОЧТУ

$subject_course = "Запись на курс";

$subject_seminar = "Запись на семинар";

$headers .= 'Content-type: text/html; charset=utf-8';

$headers .= 'From: от кого <noreply@admin.ru>;


/* Таблица вставляемая при отправке формы курсов*/

$form_message_course = "

<table width='100%' cellpadding='4' cellspacing='0'>

  <col width='43*'>

  <col width='43*'>

  <col width='43*'>

  <col width='43*'>

  <col width='43*'>

  <col width='43*'>

  <tr>

    <td colspan='6' width='100%' valign='top' bgcolor='#ffffcc' style='border: 1px solid #000000; padding: 0.1cm'>

      <p align='center'><b>ФОРМА ЗАЯВКИ НА КУРС: " . $course_view ."</b></p>

    </td>

  </tr>

  <tr>

    <td width='17%' bgcolor='#ffffcc' style='border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm'>

      <p align='center'>Ф И О</p>

    </td>

    <td width='17%' bgcolor='#ffffcc' style='border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm'>

      <p align='center'>E-MAIL</p>

    </td>

    <td width='17%' bgcolor='#ffffcc' style='border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm'>

      <p align='center'>ТЕЛЕФОН</p>

    </td>

    <td width='17%' bgcolor='#ffffcc' style='border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm'>

      <p align='center'>ДАТА РОЖДЕНИЯ</p>

    </td>

    <td width='17%' bgcolor='#ffffcc' style='border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm'>

      <p align='center'>Город</p>

    </td>

    <td width='17%' bgcolor='#ffffcc' style='border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm'>

      <p align='center'>ОТ КУДА УЗНАЛИ ПРО НАС</p>

    </td>

  </tr>

  <tr valign='top'>

    <td width='17%' bgcolor='#ffffcc' style='border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm'>

      <p align='center'>" . $form_name_course ."</p>

    </td>

    <td width='17%' bgcolor='#ffffcc' style='border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm'>

      <p align='center'>" . $form_email ."</p>

    </td>

    <td width='17%' bgcolor='#ffffcc' style='border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm'>

      <p align='center'>" . $form_phone ."</p>

    </td>

    <td width='17%' bgcolor='#ffffcc' style='border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm'>

      <p align='center'>" . $form_bday ."</p>

    </td>

    <td width='17%' bgcolor='#ffffcc' style='border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm'>

      <p align='center'>" . $form_city ."</p>

    </td>

    <td width='17%' bgcolor='#ffffcc' style='border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm'>

      <p align='center'>" . $form_about ."</p>

    </td>

  </tr>

  <tr valign='top'>

    <td width='17%' bgcolor='#ffffcc' style='border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm'>

      <p align='center'>КОММЕНТАРИЙ:</p>

    </td>

    <td colspan='5' width='83%' bgcolor='#ffffcc' style='border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm'>

      <p>" . $form_comment ."</p>

    </td>

  </tr>

</table>";


/* Таблица вставляемая при отправке формы семинаров */

$form_message_seminar = "

<table width='100%' cellpadding='4' cellspacing='0'>

  <col width='43*'>

  <col width='43*'>

  <col width='43*'>

  <col width='43*'>

  <col width='43*'>

  <col width='43*'>

  <tr>

    <td colspan='6' width='100%' valign='top' bgcolor='#ffffcc' style='border: 1px solid #000000; padding: 0.1cm'>

      <p align='center'><b>ФОРМА ЗАЯВКИ НА СЕМИНАР: " . $seminar_view ."</b></p>

    </td>

  </tr>

  <tr>

    <td width='17%' bgcolor='#ffffcc' style='border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm'>

      <p align='center'>Ф И О</p>

    </td>

    <td width='17%' bgcolor='#ffffcc' style='border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm'>

      <p align='center'>E-MAIL</p>

    </td>

    <td width='17%' bgcolor='#ffffcc' style='border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm'>

      <p align='center'>ТЕЛЕФОН</p>

    </td>

    <td width='17%' bgcolor='#ffffcc' style='border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm'>

      <p align='center'>ДАТА РОЖДЕНИЯ</p>

    </td>

    <td width='17%' bgcolor='#ffffcc' style='border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm'>

      <p align='center'>Город</p>

    </td>

    <td width='17%' bgcolor='#ffffcc' style='border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm'>

      <p align='center'>ОТ КУДА УЗНАЛИ ПРО НАС</p>

    </td>

  </tr>

  <tr valign='top'>

    <td width='17%' bgcolor='#ffffcc' style='border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm'>

      <p align='center'>" . $form_name_seminar ."</p>

    </td>

    <td width='17%' bgcolor='#ffffcc' style='border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm'>

      <p align='center'>" . $form_email ."</p>

    </td>

    <td width='17%' bgcolor='#ffffcc' style='border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm'>

      <p align='center'>" . $form_phone ."</p>

    </td>

    <td width='17%' bgcolor='#ffffcc' style='border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm'>

      <p align='center'>" . $form_bday ."</p>

    </td>

    <td width='17%' bgcolor='#ffffcc' style='border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm'>

      <p align='center'>" . $form_city ."</p>

    </td>

    <td width='17%' bgcolor='#ffffcc' style='border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm'>

      <p align='center'>" . $form_about ."</p>

    </td>

  </tr>

  <tr valign='top'>

    <td width='17%' bgcolor='#ffffcc' style='border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm'>

      <p align='center'>КОММЕНТАРИЙ:</p>

    </td>

    <td colspan='5' width='83%' bgcolor='#ffffcc' style='border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm'>

      <p>" . $form_comment ."</p>

    </td>

  </tr>

</table>";


$message_course = $form_message_course;

$message_seminar = $form_message_seminar;



С locallib.php покончили, теперь /mod/page/view.php

Вставлять код после :

require('../../config.php');
require_once($CFG->dirroot.'/mod/page/locallib.php');
require_once($CFG->libdir.'/completionlib.php');


/* Отправляем форму на почту

В зависимости какой POST пришел (либо это первая форма либо вторая форма),

выбираем что отправлять, либо мы отправляем форму с записью на курс

либо мы отправляем форму записи на семинар.

*/

$send_course = $_POST['name_for_course'];

$send_seminar = $_POST['name_for_seminar'];

if ($_SERVER['REQUEST_METHOD'] == 'POST'){

if ($send_course){

mail($to, $subject_course, $message_course, $headers);

header("Location: указать адрес куда переадресовывать после отправки формы");

exit;

}elseif ($send_seminar) {

mail($to, $subject_seminar, $message_seminar, $headers);

header("Location: указать адрес куда переадресовывать после отправки формы");

exit;

}

}


/* Вывод формы заявки на курс */

/* формы вставляются перед строкой $content = file_rewrite_pluginfile_urls($page->content, 'pluginfile.php', $context->id, 'mod_page', 'content', $page->revision); */

if ($get_query == 64) {

    ?>

    <hr style="border: 1px solid #9CCD58; width: 40%; margin: 20px auto 20px auto;">

    <h1 style="text-align: center;">Вы выбрали курс - <?=$course_view?></h1>

    <p style="padding-bottom: 30px; text-align: center;">Пожалуйста, заполните форму обратной связи.</p>

    <div class="form_course">

      <form action="" method="post">  

        <ul class="form_registration_course">

          <li>

            <label for="name" style="text-align: left;">Ф И О:</label>

            <input type="text" name="name_for_course" placeholder="Иванов Сергей Валерьянович" autofocus required pattern="^[А-Яа-яЁё\s]{10,30}">    

          </li>

          <li>

            <label for="city" style="text-align: left;">Город:</label>

            <input type="text" name="city" required>    

          </li>

          <li>

            <label for="email" style="text-align: left;">E-mail:</label>

            <input type="email" name="email" placeholder="example@mail.com" required pattern="[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}">    

          </li>

          <li>

            <label for="phone" style="text-align: left;">Номер телефона:</label>

            <input type="text" name="phone" placeholder="89xx xxx xx xx" required pattern="[0-9]{11}">    

          </li>

          <li>

            <label for="bday" style="text-align: left;">Дата рождения:</label>

            <input type="date" name="bday" min="1950-01-01" max="2000-01-01"required>    

          </li>

          <li>

            <label for="about" style="text-align: left;">Откуда вы узнали про нас?</label>

            <input type="text" name="about" class="form_registration_about">

          </li>

          <li>

            <label for="comment" style="text-align: left;">Ваши комметарии:</label>

            <textarea name="comment"></textarea>

          </li>

          <li>

          <input type="submit" value="ОТПРАВИТЬ" class="form_registration_submit" style="height: 40px !important;">

          </li>

        </ul>

    </form>

<?

}


/* Вывод формы заявки на семнар */

if ($get_query == 51) {

    ?>

    <hr style="border: 1px solid #9CCD58; width: 40%; margin: 20px auto 20px auto;">

    <h1 style="text-align: center;">Вы выбрали семинар - <?=$seminar_view?></h1>

    <p style="padding-bottom: 30px; text-align: center;">Пожалуйста, заполните форму обратной связи.</p>

    <div class="form_course">

      <form action="" method="post">  

        <ul class="form_registration_course">

          <li>

            <label for="name" style="text-align: left;">Ф И О:</label>

            <input type="text" name="name_for_seminar" placeholder="Иванов Сергей Валерьянович" autofocus required pattern="^[А-Яа-яЁё\s]{10,30}">    

          </li>

          <li>

            <label for="city" style="text-align: left;">Город:</label>

            <input type="text" name="city" required>

          </li>

          <li>

            <label for="email" style="text-align: left;">E-mail:</label>

            <input type="email" name="email" placeholder="example@mail.com" required pattern="[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}">    

          </li>

          <li>

            <label for="phone" style="text-align: left;">Номер телефона:</label>

            <input type="text" name="phone" placeholder="89xx xxx xx xx" required pattern="[0-9]{11}">    

          </li>

          <li>

            <label for="bday" style="text-align: left;">Дата рождения:</label>

            <input type="date" name="bday" min="1960-01-01" max="2000-01-01"required>    

          </li>

          <li>

            <label for="about" style="text-align: left;">Откуда вы узнали про нас?</label>

            <input type="text" name="about" class="form_registration_about">

          </li>

          <li>

            <label for="comment" style="text-align: left;">Ваши комметарии:</label>

            <textarea name="comment"></textarea>

          </li>

          <li>

          <input type="submit" value="ОТПРАВИТЬ" class="form_registration_submit" style="height: 40px !important;">

          </li>

        </ul>

    </form>

<?

}



На этом все... В итоге получилось так - на сайт заходит не авторизованный пользователь, проходит на страницу со списком курсов (еще раз повторюсь это обычная страница) выбирает курс, читает описание курса, нажимает на ссылку и попадает на форму записи на курс. На этой странице "Форма записи на курс" отображается имя курса с которого пришел пользователь, и, отображается сама форма для ввода данных. Форма проверяется на валидность средствами HTML5. Пользователь вводит все данные и нажимает отправить. Форма приходит мне на почту.


Важно понимать, то, что страницы с курсами в которых содержится весь контент по курсу (к примеру адрес курса /course/view.php?id=24) не авторизованный пользователь доступа не имеет.!