Скрипт отправки сообщений об ошибках

Скрипт проверки ошибок на сайте

На нашем сайте - сайте, посвященном ошибкам, очень желательно было установить систему устранения этих самых ошибок. В Рунете для этих целей уже традиционно используется система Orphus.

Одно время скрипт этой системы успешно работал на сайте, но в один прекрасный момент вдруг перестал, и все попытки реанимировать его оказались тщетными.

Пришлось разрабатывать свой скрипт. Как оказалось, все не так-то просто. Помогли уроки JavaScript, ну и, конечно же, Google с Яндексом. В итоге, при сложении нескольких найденных блоков скрипта и почерпнутых из учебника знаний получился вполне рабочий модуль для проверки ошибок на сайте. Для его работы необходима поддержка PHP на хостинге.

Модуль состоит из четырех файлов: mistakes.js, mistakes.css, mistakes.php и overlay.png.
Скачать можно отсюда.

Чтобы его подключить, нужно поместить эти файлы в директорию своего сайта, например в папку «mistakes» и на всех страницах сайта между тегами «head» вставить две строки:

<script type="text/javascript" src="http://адрес_сайта/mistakes/mistakes.js"></script> <link href="http://адрес_сайта/mistakes/mistakes.css" rel="stylesheet" type="text/css" />

При этом после src=" и href=" нужно прописать путь к файлу mistakes.js и mistakes.css соответственно.

Файл mistakes.js. В этом файле нужно изменить значение переменной misphploc (то, что между кавычками "") на путь к файлу mistakes.php.

var loc = window.location; var mis; nN = navigator.appName; function createMessage(title, body) { // Измените следующую строку var misphploc = '/mistakes/mistakes.php' var container = document.createElement('div') var scroll = dde.scrollTop || db.scrollTop; var mtop = scroll + 100 + 'px'; var mleft = Math.floor(dde.clientWidth/2) - 175 + 'px'; container.innerHTML = '<div id="mistake">\ <div id="m_window" style="top:' + mtop + '; left:' + mleft + '";>\ <iframe frameborder="0" name="mis" id="m_frame" src="' + misphploc + '"></iframe></div> \ </div></div>' return container.firstChild } function positionMessage(elem) { elem.style.position = 'absolute'; var pageheight = Math.max(dde.scrollHeight, db.scrollHeight, dde.clientHeight); var pagewidth = Math.max(dde.scrollWidth, db.scrollWidth, dde.clientWidth); elem.style.height = pageheight + 'px'; elem.style.width = pagewidth + 'px'; } function winop(title, body) { dde=document.documentElement; db=document.body; var messageElem = createMessage(title, body) positionMessage(messageElem) db.appendChild(messageElem) } function getText(e) { if (!e) e= window.event; if((e.ctrlKey) && ((e.keyCode==10)||(e.keyCode==13))) {if(nN == 'Microsoft Internet Explorer') {if(document.selection.createRange()) {var range = document.selection.createRange(); mis = range.text; winop();}} else {if (window.getSelection()) {mis = window.getSelection(); winop();} else if(document.getSelection()) {mis = document.getSelection(); winop();}} return true;} document.onkeypress = getText;

Файл mistakes.php.
Здесь нужно изменить значение нескольких переменных:
$title - заголовок сообщения,
$to, - email, на который будут отправлятся сообщения,
$mymail - email, от кого пришло сообщение.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1251"> <TITLE>Отправить ошибку</TITLE> <script language="JavaScript"> var p=parent; function readtxt() { if(p!=null)document.forms.mistake.url.value=p.loc if(p!=null)document.forms.mistake.mis.value=p.mis } function hide() { var win=p.document.getElementById('mistake'); win.parentNode.removeChild(win); } </script> <?php if($_POST['submit']) { # Заголовок сообщения - замените "yousite.ru" на имя своего сайта: $title = 'Сообщение об ошибке на сайте yousite.ru'; $ip = getenv("REMOTE_ADDR"); $url = (trim($_POST['url'])); $mis = substr(htmlspecialchars(trim($_POST['mis'])), 0, 100000); $comment = substr(htmlspecialchars(trim($_POST['comment'])), 0, 100000); $mess = ' Адрес страницы: '.$url.' Ошибка: '.$mis.' Комментарий: '.$comment.' IP: '.$ip.' '.$_POST['mess']; # Email адрес, на который должны приходить сообщения: $to = 'youmail@mail.ru'; # Email адрес, от кого пришло сообщение: $mymail='youmail@mail.ru'; # Вместо "yousite.ru" указжите имя вашего сайта: $from = "From: =?windows-1251?B?". base64_encode("yousite.ru"). "?= < $mymail >\n"; $from .= "X-Sender: < $mymail >\n"; $from .= "Content-Type: text/plain; charset=windows-1251\n"; mail($to, $title, $mess, $from); echo '<br><br><br><center>Спасибо!<br>Ваше сообщение отправлено.<br><br><br><input onclick="hide()" type="button" value="Закрыть окно" id="close" name="close"><br><br><br><a class="copyright" href="http://mistakes.ru/script/mistakes_dev" target="_blank" title="">© Ошибки.ru</a><center>'; exit(); } ?> </head> <body onload=readtxt()> <span class="text"> Адрес страницы : </span> <br /> <form name="mistake" action="" method=post> <input type="text" name="url" size="30" readonly="readonly"> <br /> <span class="text"> Ошибка : </span> <br /> <textarea rows="5" name="mis" cols="30" readonly="readonly"></textarea> <br /> <span class="text"> Комментарий : </span> <br /> <textarea rows="5" name="comment" cols="30"></textarea> <div style="margin-top: 7px"><input type="submit" value="Отправить" name="submit"> <input onclick="hide()" type="button" value="Отмена" id="close" name="close"> </div> </form> </body></html>

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

На сайте работает система проверки ошибок. Обнаружив неточность в тексте, выделите ее и нажмите Ctrl + Enter.

Также открыть окошко отправки сообщения можно, кликнув по ссылке:

Отправить сообщение об ошибке

Код ссылки:

<a href="javascript:void(0)" onclick="winop()">Отправить сообщение об ошибке</a>

Скачать модуль (zip архив 6Kb).

Вопросы и пожелания оставляйте в комментариях.

Комментарии

Аватар пользователя Алексей

Расширение возможностей

Спасибо, скрипт запустил у себя на сайте. Есть еще вопрос: как заставить его срабатывать не только на комбинацию Ctrl+Enter, а еще и на клик по ссылке, например, "Отправить сообщение об ошибке"?

Еще раз спасибо.

Аватар пользователя Павел

Не работает

У меня не работает, вставил между head, и чего-то ничего. Пишет ошибка. Что может быть? Выполнил всё по инструкции.

Аватар пользователя aleks

IE6.0

Все супер, только в IE60 не работает. Не выделяется текст вообще. Соответственно в окошке показывается только ссылка.

Аватар пользователя Гость

Re: Re:IE6.0

Вообще тестирую через IETester и MultiplyIE, так как давно уже сижу не в 6-м. Очень странно, возможно причина в конфликте с другими подключенными javascript библиотеками. Кстати в Opera последней тоже самое - пустое окно открывается. Вы не тестировали в опере?

Аватар пользователя Алексей

Друзья, вопрос

Друзья, вопрос еще актуален.
Никто не поможет?

Как заставить его срабатывать не только на комбинацию Ctrl+Enter, а еще и на клик по ссылке, например, "Отправить сообщение об ошибке"?

Аватар пользователя Гость

классно

Сообщите пожалуйста, когда доработаете.

И ещё, у вас капча не отображается под этой формой.

Аватар пользователя Natali_J

Спасибо за ваши старания

С последними дополнениями, затемнением и стилем стало вообще отлично выглядеть. Но перестало работать во всех браузерах. У меня сработало только в опере. В мозиле, хроме и ie не закрывается окно отправки.

Аватар пользователя Гость

клёво

Мой респект.
Я вчера из сообщения от 08/10/2010 - 14:46 последнюю версию скачал надеюсь?

Аватар пользователя Alex

IE 6-8

Замечательный скрипт! Спасибо!
Есть только одна проблема - поставил последнюю версию скрипта, в опере, мозиле и хроме работает, а в дибильном IE (6 и 8 - одинаково) окно открывается слева и видно только правую половину окна - т.е. даже кнопки "отправить" не видно.... что может быть?

Аватар пользователя Alex

Спасибо!

Спасибо, щас попробую. Если можно, в двух словах, как это могло повлиять? Я думал всегда что эта строка "просто так" :) неужели из-за нее изменится вид страницы?

Аватар пользователя Alex

ИМЕННО ИЗ-ЗА

ИМЕННО ИЗ-ЗА ЭТОЙ СТРОКИ?...
А я блин думал когда с цсс работал че за фигня, почему он себя так по-дурацки временами ведет. Ведь знаешь же что должно быть так, а оно блин..... :)))) Да....

Аватар пользователя Habrahabr

Вот. Исправил

Вот. Исправил траблы с русской кодировкой айпишник показывается ну и так, по мелочи

$title = 'Сообщение об ошибке'; $ip = getenv("REMOTE_ADDR"); $url = (trim($_POST['url'])); $mis = substr(htmlspecialchars(trim($_POST['mis'])), 0, 100000); $comment = substr(htmlspecialchars(trim($_POST['comment'])), 0, 100000); $mess = ' '.$url.' '.$mis.' '.$comment.' '.$ip.' '.$_POST['mess']; $to = "youmail@mail.ru"; $mymail='youmail@mail.ru'; $from = "From: =?windows-1251?B?". base64_encode("yousite.ru"). "?= < $mymail >\n"; $from .= "X-Sender: < $mymail >\n"; $from .= "Content-Type: text/plain; charset=windows-1251\n"; mail($to, $title, $mess, $from);
Аватар пользователя Sancha

Я разместил код

Я разместил код на сайте visiongrp ru, но он работает странно - появляясь под футером :) Что можно предпринять, посоветуйте пожалуйста?

Аватар пользователя Sancha

Я разместил код

Спасибо, черт меня побери :). Про стили я забыл. А есть у вас кнопочка для размещения на сайте? Я про то, чтобы разместить ссылочку на ваш ресурс.

Аватар пользователя Sancha

Заметано. А

Заметано.
А пожелания принимаете?
Если зайти на ваш сайт на главную, то страницу со скриптом не так-то легко найти. Может доработать меню сайта, для оптимального серфинга?

Страницы

Комментировать