Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Публикация комментариев без перезагрузки страниц посредством Ajaks, iframe, ...?
 
 автор: olegs7   (13.03.2009 в 20:31)   письмо автору
 
 

Долго искал, но так и не нашёл.


Задача: Необходимо публиковать соощения на странице без её перезагрузки.

Имеется следующий файл comment.php с кодом:
<?php


if ($_GET['event'] == "add")
  {

    
// Получаем данные из формы при registr_globals=off
    
if (isset ($_POST['comment'])) {$comment=$_POST['comment'];}
    else {
$comment="";}

    
// время_добавления
    
$date=mktime();

    
// Данные: время_добавления|сообщение|
    
$text="$date|$comment|";

      
// запись данных в файл
      
$fp=fopen("news.dat","a+");
      
flock ($fp,LOCK_EX);
      
fputs($fp,"$text\r\n");
      
fflush ($fp);
      
flock ($fp,LOCK_UN);
      
fclose($fp);
      @
chmod("news.dat"0644);


    print 
"
    <script language=\"Javascript\">
      function reload() {location = \"comment.php\"};
      setTimeout('reload()', 1000);
    </script>
    "
;


  exit;}



print
"
<tr><td>
  <form action=\"comment.php?event=add\" method=\"post\">
    <textarea rows=\"4\" cols=\"40\" name=\"comment\"></textarea><br>
    <input type=\"submit\" value=\"Добавить\">
  </form>
</td></tr>
"
;



if (
is_file("news.dat") and filesize("news.dat") > "0")
  {
    
$file=file("news.dat"); $count=count($file);
      if (
$count>1) {
        do {
$count--; $dt=explode("|"$file[$count]);
        
$dt[0]=date("d.m.Y H:i:s",$dt[0]);
        print
"<tr><td>$dt[0]<br>$dt[1]<br></td></tr>";
      }
      while (
$count "0");
  }
}


?>


При добавлении сообщения происходит запись в файл news.dat и последующее его чтение.


Было бы так же здорово узнать, как при довольно длинном сообщении прокрутка в textarea не появлялась, а само поле формы ползло вниз.


Вопрос актуальный. Буду рад помощи. Спасибо.

  Ответить  
 
 автор: olegs7   (14.03.2009 в 15:10)   письмо автору
 
   для: olegs7   (13.03.2009 в 20:31)
 

Продолжил копаться. Сделал, но присутствуют баги:
- Если писать на русском, то получам текст непонятной кодировки.
- При добавлении нескольких комментов одним человеком, будет виден только последний. Т.е. надо поставить в файле script_page.php цикл, в который передавалось бы кол-во строк опраленных одним человеком подряд.

А так же не понял ещё как сделать, чтобы при довольно длинном сообщении прокрутка в textarea не появлялась, а само поле формы ползло вниз.


файл index.php
<html>
  <head>
    <title>Ajax Comment</title>
      <meta http-equiv="content-type" content="text/html; charset=windows-1251" />
      <script type="text/javascript" src="ajax.js"></script>
  </head>

<body>

  <table width="200px" cellspacing="0" cellpadding="5" border="0">
    <tr>
      <td><strong>Имя :</strong></td>
      <td><input type="text" id="text_content1"></td>
    </tr>
    <tr>
      <td><strong>E-Mail :</strong></td>
      <td><input type="text" id="text_content2"></td>
    </tr>
    <tr>
      <td><strong>Комментарий :</strong></td>
      <td><textarea rows="4" cols="30" id="text_content3"></textarea></td>
    </tr>
    <tr>
      <td colspan="2" align="center" >
        <input type="submit" value="Отправить" onMouseUp="getScriptPage('output_div','text_content1','text_content2','text_content3','1','x')">
        <input type="button" onClick="reset('text_content1','text_content2','text_content3')" value="Очистить">
      </td>
    </tr>

    <tr><td></td><tr>


    <tr><td colspan=2><div id="output_div"></div></td><tr>

<?php

if (is_file("news.dat") and filesize("news.dat") > "0")
  {
    
$file=file("news.dat"); $count=count($file);
      do {
$count--; $dt=explode("|"$file[$count]);
        
$dt[0]=date("d.m.Y H:i:s",$dt[0]);
        print
"
          <tr><td colspan=2>
            
$dt[0]<br>
            <b>
$dt[1]</b><br>
            
$dt[3]<br><br>
          </td></tr>
        "
;
      }
      while (
$count "0");
  }

?>

  </table>

</body>
</html>



файл ajax.js
// ajax

subject_id = '';

  function handleHttpResponse() {
    if (http.readyState == 4) {
      if (subject_id != '') {
        document.getElementById(subject_id).innerHTML = http.responseText;
      }
    }
  }

  function getHTTPObject() {
    var xmlhttp;
    /*@cc_on
      @if (@_jscript_version >= 5)
        try {
          xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
        try {
          xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
        } catch (E) {
          xmlhttp = false;
          }
        }
      @else
        xmlhttp = false;
        @end @*/
          if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
            try {
              xmlhttp = new XMLHttpRequest();
            } catch (e) {
              xmlhttp = false;
            }
       }
      return xmlhttp;
    }

  var http = getHTTPObject(); // We create the HTTP Object


// js

  function getScriptPage(div_id,content_id1,content_id2,content_id3,more_options,act_id)
    {
      subject_id = div_id;
            
      content1 = document.getElementById(content_id1).value;
      content2 = document.getElementById(content_id2).value;
      content3 = document.getElementById(content_id3).value;

      switch(more_options)
        {
          case '1':
            {
              http.open("GET", "script_page.php?val1=" + escape(content1)+"&val2=" + escape(content2)+"&val3=" + escape(content3), true);
            }
          break;
        }

      http.onreadystatechange = handleHttpResponse;
      http.send(null);

      document.getElementById(content_id1).value="";
      document.getElementById(content_id2).value="";
      document.getElementById(content_id3).value="";

    }

  function reset(content_id1,content_id2,content_id3)
    {
      document.getElementById(content_id1).value="";
      document.getElementById(content_id2).value="";
      document.getElementById(content_id3).value="";
    }



файл script_page.php
<?php

$name
=$_GET['val1'];
$email=$_GET['val2'];
$comment=$_GET['val3'];

  
// время_добавления
  
$date=mktime();

  
// Данные: время_добавления|сообщение|
  
$text="$date|$name|$email|$comment|";

    
// запись данных в файл
    
$fp=fopen("news.dat","a+");
    
flock ($fp,LOCK_EX);
    
fputs($fp,"$text\r\n");
    
fflush ($fp);
    
flock ($fp,LOCK_UN);
    
fclose($fp);
    @
chmod("news.dat"0644);


if (
is_file("news.dat") and filesize("news.dat") > "0")
  {
    
$file=file("news.dat"); $count=count($file)-1;
      
$dt=explode("|"$file[$count]); $dt[0]=date("d.m.Y H:i:s",$dt[0]);
        print
"
            
$dt[0]<br>
            <b>
$dt[1]</b><br>
            
$dt[3]<br><br>
        "
;
  }


?>

  Ответить  
 
 автор: olegs7   (14.03.2009 в 18:32)   письмо автору
 
   для: olegs7   (14.03.2009 в 15:10)
 

Приколько общаться самому с собой))

Хочется получить что-то типа

http://www.itsavesyou.com/TextArea_Resizer_example.htm

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

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования