Регистрация Войти
Войти через VK Войти через FB Войти через Google Войти через Яндекс
Войти через VK Войти через FB Войти через Google Войти через Яндекс
Поиск по сайту
Загрузка формы и отправка её с использованием Ajax
Несложная система комментирования с использованиям Ajax. Не использует никаких баз данных. Сообщения добавляются непосредственно в код html или php страниц.
Для начала разместим кнопку и div или span, в который будем подгружать форму:
<span id="insertComment">
<input type="submit"
onclick="return ajaxLoad('insertComment','/send.php');"
value="Прокомментировать" />
</span>
В этом примере мы поместили кнопку внуть span-а, в который будет загружаться форма. Это сделано в связи с тем, что после загрузки формы кнопка нам больше не понадобиться.
Наша функция ajaxLoad, которая часто встречается в моих примерах:function ajaxLoad(obj,url,defMessage,post,callback){
var ajaxObj;
if (defMessage) document.getElementById(obj).innerHTML=defMessage;
if(window.XMLHttpRequest){
ajaxObj = new XMLHttpRequest();
} else if(window.ActiveXObject){
ajaxObj = new ActiveXObject("Microsoft.XMLHTTP");
} else {
return;
}
//ajaxObj.open ('GET', location.href+'?ps='+page);
ajaxObj.open ((post?'POST':'GET'), url);
if (post&&ajaxObj.setRequestHeader)
ajaxObj.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=windows-1251;");
ajaxObj.onreadystatechange = ajaxCallBack(obj,ajaxObj,(callback?callback:null));
ajaxObj.send(post);
return false;
}
function updateObj(obj, data, bold, blink){
if(bold)data=data.bold();
if(blink)data=data.blink();
if(document.getElementById(obj).tagName=='INPUT') document.getElementById(obj).value=data;
else document.getElementById(obj).innerHTML = data;
}
function ajaxCallBack(obj, ajaxObj, callback){
return function(){
if(ajaxObj.readyState == 4){
if(callback) if(!callback(obj,ajaxObj))return;
if (ajaxObj.status==200)
updateObj(obj, ajaxObj.responseText);
else updateObj(obj, ajaxObj.status+' '+ajaxObj.statusText,1,1);
}
}}
function SendComment(){
formComment=document.frmcomment;
if(!formComment.comment.value){updateObj('answer', 'Пустой комментарий!',1,1); return;}
if (!IsMail(formComment.mail.value, true)){updateObj('answer', 'Mail или пустой или корректный!',1,1); return;}
str=''
for (i=0; i<formComment.length; i++) if(formComment[i].name){
str=str+encodeURIComponent(formComment[i].name)+'='+encodeURIComponent(formComment[i].value)+'&';
}
str=str.slice(0,-1);
ajaxLoad('answer','/send.php','Отправка...', str)
}
Не будем на ней останавливаться подробно, т.к. она неоднократно описана на страницах http://htmlweb.ru/ajax/
Далее рассмотрим систему отображения формы по Ajax-запросу и записи комментариев.
<?
// Универсальная система добавления комментариев на страницы любого сайта с использованием технологии Ajax
// Вы можете использовать данный код в любых своих разработках с сохранением этого комментария
// Размещение исходного кода на сайтах возможно только при наличии активной ссылки на первоисточник:
// http://HTMLWEB.RU/ajax/example/load_form.php
// Все остальные права принадлежат автору: Колесникову Дмитрию Геннадьевичу
$u_name=param('name');
$u_mail=param('mail');
$u_www=param('www');
$DEBUG= (getenv('REMOTE_ADDR')=='127.0.0.1');
$HTTP_REFERER = @$_SERVER['HTTP_REFERER'];
$comment=@$_POST['comment'];
if (empty($comment)) {
?>
<form name="frmcomment" method="post" ONSUBMIT="SendComment();return false;">
Имя: <input type="text" name="name" size=18 value="<?=$u_name?>" />
E-mail:<input type="text" name="mail" size=18 value="<?=$u_mail?>" title="Защищен от спама" /><br />
<textarea name="comment" rows="4" style="width:100%"></textarea>
<INPUT TYPE="SUBMIT" VALUE="Поделиться мыслями" class="submit" />
<input type="hidden" name="url" value="<?=substr($HTTP_REFERER,strlen("http://".$_SERVER['SERVER_NAME']))?>" />
</form><span id="answer"></span>
<?
exit;
}
$logfile=$_SERVER['DOCUMENT_ROOT']."/log/comment.txt";
if(!isset($add_mes) && is_file($logfile)){
$t=((int)((time()-filemtime($logfile))));
if($t<60){echo "Нельзя отправлять сообщения чаще, чем раз в минуту!";exit;}
}
// при запросе через ajax всё всегда передается в UTF-8
$u_name=@iconv("UTF-8", "windows-1251//IGNORE", $u_name);
$comment=@iconv("UTF-8", "windows-1251//IGNORE", $comment);
// Вы можете добавить защиту от спамеров, но не забудьте при отправке формы через Ajax устанавливать поле referer
//if (!isset($HTTP_REFERER) || (strpos($HTTP_REFERER, "htmlweb.ru") === false) )die('Запрос из вне сайта!');
// отправляем сообщение админу сайта
$body=date("d.m.Y H:i", time())."\n".$_SERVER['REQUEST_URI']."\nИмя: ".$u_name."\nMail:".$u_mail."\nip:".$ip."\n".$comment."\n"; // сообщение администратору
file_put_contents ( $logfile, $body."\r\n" , FILE_APPEND);
if(mail("admin@".$_SERVER['SERVER_NAME'], "Сообщение из ".$HTTP_REFERER, $body, "From: <".$u_mail.">\nContent-Type: text/plain; charset=windows-1251"))
echo "Спасибо, Ваше сообщение отправлено!";
else echo "К сожалению, отправка сообщения не удалась!";
// добавляем сообщение на страницу
$file_name=$_SERVER['DOCUMENT_ROOT'].$url; // адрес страницы
if(file_exists($file_name)){
if(!empty($u_name)){$body=htmlspecialchars($u_name);
if(!empty($u_mail))$body="<a href='' title='e-mail' onclick=\"this.href='mailto:".$u_mail."'\"><b>".$body.'</b></a>';
}else $body='';
$body='<span class="time">'.date("d.m.Y H:i", time()).$comment.'</span>'.$body;
$body.="<br />\n".nl2br(AddBB(htmlspecialchars($comment)))."\n";
$body='<div class="comment">'.$body."</div><br />";
// добавляем в конец
// на самом деле, желательно вставлять в какое-то определенное место.
file_put_contents ( $file_name, "\r\n".$body."\r\n" , FILE_APPEND);
} else die('Не удалось добавить комментарий в '.$file_name);
function AddBB($comment) {
// делаем ссылки активными
$comment = preg_replace("/\s(([a-zA-Z]+:\/\/)([a-z][a-z0-9_\..-]*[a-z]{2,6})([a-zA-Z0-9\/*-?&%]*))\s/i", " <a href=\"$1\" target=_blank>$3</a> ", $comment);
$comment = preg_replace("/\s(www\.([a-z][a-z0-9_\..-]*[a-z]{2,6})([a-zA-Z0-9\/*-?&%]*))\s/i", " <a href=\"http://$1\" target=_blank>$2</a> ", $comment);
// можно сделать преобразование BB-кодов
// пример смотри на http://htmlweb.ru/php/example/bb_code.php
// можно совсем удалять все теги
//$comment=strip_tags($comment);
return $comment;}
function param($param) {
$param=(isset($_GET[$param])?$_GET[$param]:(isset($_POST[$param])?$_POST[$param]:false));
if (get_magic_quotes_gpc()) $param=stripslashes($param);
return $param;
}
?>
.
Прокомментировать/Отблагодарить