Реклама - здесь может быть Ваша реклама, которую увидят 4000+ человек в сутки. Хотите 1000 посетителей на свой сайт за 50 копеек?
Главная
Примеры PHP Примеры JavaScript Примеры Ajax Примеры CSS,HTML

Загрузка формы и отправка её с использованием 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-запросу и записи комментариев.


<?php
// Универсальная система добавления комментариев на страницы любого сайта с использованием технологии 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?>" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
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;
}
?>
Скопировать в буфер
электростанции.

© Copyright 2008-2012 by KDG