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

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

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

Добрый день всем кто зашел в мою тему.

Вопрос PHP-ам...

Как мне сделать страницу с формами и с возможностью отправить введенные данные из этой формы на email.

http://postimg.org/image/jjy4c9vrv/

Есть модуль feedback, но он не подходит, причина много всего не нужного (и это не нужное не убирается).

Может быть есть какие то специальные модули для моего запроса?


В итоге что у меня получилось:

Я создал обычную страницу, вставил в нее (через админку) HTML код формы, при нажатии на кнопку отправить идет переадресация на другую страницу с ошибкой неизвестный ID. Т.е. как мне избавиться от этой ошибки? Посмотрел файл php /mod/page/view.php и попробовал вставить туда php код:

if($_POST['submit']) {

        $name = substr(htmlspecialchars(trim($_POST['name'])), 0, 1000); 

        $family =  substr(htmlspecialchars(trim($_POST['family'])), 0, 1000000); 

        // $to - кому отправляем 

        $to = 'vasya@mail.ru'; //адреса другие

        // $from - от кого 

        $from='admin@mail.ru'; //адреса другие

        // функция, которая отправляет наше письмо

        mail($to, $name, $family, 'From:'.$from); 

        echo 'Спасибо! Ваше письмо отправлено.'; 


Конечно ничего не получилось?

Как мне можно вставить PHP код в определенную страницу? новой создаваемой странице присваивается свой уникальный ID..

В ответ на Styazhkin Nikolay

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

от Vadim Tabunshchik -
Изображение пользователя Developers
Как мне сделать страницу с формами и с возможностью отправить введенные данные из этой формы на email.

В виде отдельного плагина (модуль, блок, т. д.) с использованием стандартных классов/библиотек/функций moodle. Читайте документацию для разработчиков.

Будет это блок, модуль или ещё что-то, зависит от задачи, кот. вам нужно решить. Об этом не сказано ни слова.

Если с какой-то страницы нужно отправить сообщение, так это в moodle уже есть - обмен личными сообщениями.

Может быть есть какие то специальные модули для моего запроса?

Может и есть, нужно знать задачу улыбаюсь

В ответ на Vadim Tabunshchik

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

от Styazhkin Nikolay -

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

Получилось все очень просто, о чем собственно хочу написать, может быть кому-то пригодится. В 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) не авторизованный пользователь доступа не имеет.!