Перейти к содержимому

Сервис обмена электронных валют

Партнерская программа Kredov

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

#1 Kolovrat

Kolovrat
  • Заблокированные
  • 61 сообщений
  • Репутация: 0
0

Отправлено 12 Май 2012 - 16:51

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

Вот код страницы обратной связи (знаю что не хватает таких тегов как BODY. Их если не ошибаюсь не надо добавлять когда поключается инфа из определенного файлика через PHP):
<title>Обратная связь</title>
<center>
<font size=5 style="font-family: cursive">Передайте информацию или задайте вопрос</font><br><br>
<em>
Заполните текстовые поля соответствующей информацией и нажмите кнопку "Отправить"<br>
Мы прочитаем ваше письмо и постараемся ответить<br><br>
<form method="post" action="2.php/feedback.php">
Укажите ваше имя <br><input type="text" name="name" size="20" maxlength="30"><br><br>
Ваш контактный E-Mail адресс <br><input type="text" name="mail" size="20" maxlength="50"><br><br>
Краткая тема письма (не более 20-и символов) <br><input type="text" name="theme" size="20" maxlength="20"><br><br>
Ваша информация или вопрос: <br><textarea name="text" cols="50" rows="20"></textarea>
<br><br><input type="submit" name="send" value="Отправить">
</em>
</form>
</center>

Мысль такая:
1. Юзер заполняет форму на сайте и нажимает на кнопку отправить
2. Срабатывает PHP код который записывает данные из формы в файлик в виде переменных
3. Администратор открывает через другую страницу список файликов (жалоб) и нажатием на нужный рядом появляется инфа из этого файла (имя майл и т.д.)

Как это все будет я представляю. Единственная трудность это то что я не знаю PHP. Я нашул урок по этой теме но у меня как то все странно получается, долго объяснять что не так.

К вам просьба, если не сложно напишите код второго пункта, а я на наглядном примере сам разберусь и научусь

P.S. заранее благодарен

 

 

  • 0

robot

robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85
Советую обратить внимание на следующее:
  1. Форма обратной связи
  2. Обратная связь на сайте
  3. Форма обратной связи в модальном окне
  4. Добавление полей в форму обратной связи
  5. PHP обработчик формы обратной связи

#2 unfixed

unfixed
  • Пользователь
  • 21 сообщений
  • Репутация: 5

Отправлено 12 Май 2012 - 21:45

Более того, теги <title> добавлять тоже не надо.

В упрощенном виде второй пункт выглядит так.
<?php

// Если срабатывает кнопка send
if (@$_POST['send']) {

	// Получаем данные формы
	$name = $_POST['name'];
	$mail = $_POST['mail'];
	$theme = $_POST['theme'];
	$text = $_POST['text'];

	$string = $name."\n".
				  $mail."\n".
				  $theme."\n".
				  $text;

	// Название каждого файла — дата и время поступления сообщения
	$filename = date("d-m-Y H.i.s").'.txt';

	// Записываем каждое сообщение в файл
	$file = fopen($filename, 'w+');
	fwrite($file, $string);
	fclose($file);

}

?>

Только не стоит забывать обрабатывать полученные переменные функциями типа trim, htmlspecialchars. т.е. получится "$name = htmlspecialchars(trim( $_POST['name']));".

Переменные записываются в файл каждая с новой строки, поэтому потом будет удобно считывать их функцией file.
  • 1

#3 Kolovrat

Kolovrat
    Topic Starter
  • Заблокированные
  • 61 сообщений
  • Репутация: 0

Отправлено 12 Май 2012 - 22:19

огромнейшее спасибо =) вот такой вот вопросик =) я вот сидел сам пробовал сделать упрощенный вариант чтоб именно понять работу с файлами и написал эту вещь:
<?
$name = $_post['name'];
$mail = $_post['mail'];
$theme = $_post['theme'];
$text = $_post['text'];
$file = "Тема сообщения: ".$theme."/n Имя: ".$name."/n Майл: ".$mail."/n/n".$text;
$feed = fopen('counter.txt', 'w');
$test = fwrite($feed, $file);
if ($test) echo("Данные успешно занесены!"); else echo("ОШИБКА!!!");
fclose($feed);
?>


так вот, файл не создавался а проверка в конце срабатывала так как будто все записалось (ну в том смысле что выводилось сообщение "Данные успешно занесены!"). потом я еще попробовал переменную $file вывести после того сообщения и оказалось что в нее не вставились значения переменных $name $text и т.д.
не знаете ли почему так получилось?

и если не сложно, можно ли поподробней про "Только не стоит забывать обрабатывать полученные переменные функциями типа trim, htmlspecialchars. т.е. получится "$name = htmlspecialchars(trim( $_POST['name']));"."

P.S. попробовал сейчас вставить ваш код себе и он тоже не работает... просто не создает файлик =( может быть какие то базы данных не обновлены??? я пользуюсь программой openserver, недавно было какое то обновление и я его установил
  • 0

#4 unfixed

unfixed
  • Пользователь
  • 21 сообщений
  • Репутация: 5

Отправлено 13 Май 2012 - 13:31

Переменные не передались, потому что глобальные переменные типа $_POST, $_GET, $_SERVER пишутся заглавным буквами. И, кстати, символ перевода строки "\n", а не "/n".

Может, с формой что-то не так? Вот весь код, который у меня работал:
<?php
error_reporting(E_ALL);
// Если срабатывает кнопка send
if (@$_POST['send']) {
		// Получаем данные формы
		$name  = $_POST['name'];
		$mail  = $_POST['mail'];
		$theme = $_POST['theme'];
		$text  = $_POST['text'];
		$string = $name."\n".
				  $mail."\n".
				  $theme."\n".
				  $text;
		// Название каждого файла — дата и время поступления сообщения
		$filename = date("d-m-Y H.i.s").'.txt';
		// Записываем каждое сообщение в файл
		$file = fopen($filename, 'w+');
				fwrite($file, $string);
				fclose($file);
}
?>
<form action="<?=$_SERVER['PHP_SELF'];?>" method="post">
		<input type="text" name="name" placeholder="name" />
		<input type="text" name="mail" placeholder="mail" />
		<input type="text" name="theme" placeholder="theme" />
		<input type="text" name="text" placeholder="text" />
		<input type="submit" name="send" />
</form>

  • 0

#5 Kolovrat

Kolovrat
    Topic Starter
  • Заблокированные
  • 61 сообщений
  • Репутация: 0

Отправлено 13 Май 2012 - 14:11

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

что значит это: error_reporting(E_ALL);

Все! Большое спасибо! Заработало! Теперь буду разбираться с кодом, попытаюсь понять почему до этого не работало и т.д.
все же просьба растолкуйте русским языком для чего error_reporting(E_ALL); . я нашел в нэте описание, но там как то не понятно
  • 0

#6 yury

yury
  • Пользователь
  • 629 сообщений
  • Репутация: 176

Отправлено 13 Май 2012 - 15:02

что значит это: error_reporting(E_ALL);

error_reporting() — это функция обработки ошибок.
Конкретно команда
error_reporting(E_ALL);
указывает интерпретатору PHP сообщать обо всех ошибках в вашем коде и выводить все предупреждения, если соответствующие ошибки в коде обнаружатся.
  • 0

#7 Kolovrat

Kolovrat
    Topic Starter
  • Заблокированные
  • 61 сообщений
  • Репутация: 0

Отправлено 13 Май 2012 - 15:49

тоесть если эту комманду не поставить они не будут выводиться? но ведь если не ошибаюсь у меня выводились ошибки до этого

Я немного подправил PHP код, но вся суть осталась. Просто оформил как мне удобней будет. И переводы строки не работают. Гляньте скрипт пожалуйста:

<?php
error_reporting(E_ALL);
if (@$_POST['send'])
{
$name = $_POST['name'];
$mail = $_POST['mail'];
$theme = $_POST['theme'];
$text = $_POST['text'];
$string = "Имя: ".$name."n"."EMail: ".$mail."n"."Тема: ".$theme."nn".$text;
$filename = $theme." ".date("(d.m.Y H.i)").'.txt';
$file = fopen($filename, 'w+');
fwrite($file, $string);
fclose($file);
}
?>

  • 0

#8 yury

yury
  • Пользователь
  • 629 сообщений
  • Репутация: 176

Отправлено 13 Май 2012 - 17:13

тоесть если эту комманду не поставить они не будут выводиться? но ведь если не ошибаюсь у меня выводились ошибки до этого

Будут ли выводиться сообщения об ошибках и какие зависит от настроек PHP, команда error_reporting задает это в обход этих настроек.

И переводы строки не работают.

Переводы строк работают, но не для windows, который считает, что для новой строки одного символа новой строки "n" не достаточно и в добавок хочет еще символ возврата каретки "r".
Т.е. если хочется увидеть переводы строк в стандартном win-блокноте, используйте вместо "n" — "rn":
$string = "Имя: ".$name."rn"."EMail: ".$mail."rn"."Тема: ".$theme."rnrn".$text;

  • 0

#9 Kolovrat

Kolovrat
    Topic Starter
  • Заблокированные
  • 61 сообщений
  • Репутация: 0

Отправлено 13 Май 2012 - 20:49

Спасибо большое всем =) все работает =) но появился еще один вопрос :D как делать перенаправление на определенный адресс???
  • 0

#10 Kolovrat

Kolovrat
    Topic Starter
  • Заблокированные
  • 61 сообщений
  • Репутация: 0

Отправлено 13 Май 2012 - 21:10

блин =) и еще одна проблемка :D думал это легко исправить будит, но не получилось ;) файл с данными создается в том же каталоге где находится php файл с кодом, а мне надо на один каталог раньше в другую папку. как мне это указать? пробовал двумя способами и не работает
  • 0

robot

robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85


Оформление форума – IPBSkins.ru