Обновить без перезагрузки

Статус
Закрыто для дальнейших ответов.

AngelGabriel

И имя мне - легион
Регистрация
23.11.2008
Сообщения
778
Скажите как обновить этот код без перезагрузки страницы каждые 3 мин.

Код:
 $q50 = "SELECT * FROM masseg WHERE user='$_SESSION[login]' AND flag='1'";
            $res50 = mysql_query($q50);
            $myrow50 = mysql_num_rows($res50);
            $cant = $myrow50 == 0?"нет новых сообщений":"<p>Новые сообщения <strong style='color:red'>$myrow50</strong></p>";
 

Abrogen

Убью нахер
Регистрация
18.08.2010
Сообщения
190
AJAX`ом. создаёшь функцию пишешь нужный запрос методом ajax к нужному скрипту, в конце функции устанавливаешь setTimeout() на эту же функцию прописываешь необходимое тебе время.
Код:
setTimeout("action()", 180000);
action() - функция, которая выполнится через 3 минуты (180000 мсек.).

Код:
$q50 = "SELECT * FROM masseg WHERE user='$_SESSION[login]' AND flag='1'";
$res50 = mysql_query($q50);
$myrow50 = mysql_num_rows($res50);
$cant = $myrow50 == 0?"нет новых сообщений":"<p>Новые сообщения <strong style='color:red'>$myrow50</strong></p>";
Этот код не будет у вас работать.
Нужно создать отдельный документ с типом XML. Прописать подключение к БД. Вывести значение.
К примеру вот так:
Код:
<? header('Content-Type: text/xml; charset=utf-8'); ?>
<xml>
<res>
<?
$q50 = "SELECT * FROM masseg WHERE user='$_SESSION[login]' AND flag='1'";
$res50 = mysql_query($q50);
$myrow50 = mysql_num_rows($res50);
echo $myrow50 == 0?"нет новых сообщений":"<p>Новые сообщения <strong style='color:red'>$myrow50</strong></p>";
?>
</res>
</xml>
Далее в JS получаете значение из элемента <res>. И записываете его в нужный элемент странички, где бы вы хотели видеть этот результат.
 

ALEXu

в сером
Регистрация
29.12.2010
Сообщения
307
класс JsHttpRequest.
 

brevis

Well-Known Member
Регистрация
10.08.2010
Сообщения
452
Уже давно все пацаны юзают jQuery (или Prototype). Ниже пример с jQuery).

html:
Код:
<html>
<head>
  <meta http-equiv="content-type" content="text/html; charset=utf-8" />
  <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script>
  <script type="text/javascript">
    var refreshId = setInterval(function(){ $("#refresh").load('count.php');}, 180000);
  </script>
</head>
<body>
  <div id="refresh"></div>
</body>
</html>
count.php:
Код:
<?php
$db_link = mysql_connect('localhost', 'root', '') or die('Error connect');
mysql_select_db('my_db', $db_link) or die('Error select DB');

$res = mysql_query("SELECT COUNT(*) FROM masseg WHERE user='".$_SESSION['login']."' AND flag='1'", $db_link);
if (!$res) die(mysql_errno($db_link).': '.mysql_error($db_link));
$count = (int)mysql_result($res, 0);

echo ($count>0) ? '<p>Новые сообщения <strong style="color:red">'.$count.'</strong></p>' : 'новых сообщений нет';
Кстати, код
Код:
$q50 = "SELECT * FROM masseg WHERE user='$_SESSION[login]' AND flag='1'";
$res50 = mysql_query($q50);
$myrow50 = mysql_num_rows($res50);
для получения количества записей -- это говнокод.
 

AngelGabriel

И имя мне - легион
Регистрация
23.11.2008
Сообщения
778
покажи как из говна зделать куколку

сори не заметил, чем плоха моя запись?
 

brevis

Well-Known Member
Регистрация
10.08.2010
Сообщения
452
сори не заметил, чем плоха моя запись?
Код:
SELECT * FROM ...
возвращает сами записи из таблицы, а

Код:
SELECT COUNT(*) FROM ...
возвращает только количество записей.

На больших объёмах данных разница в скорости очень заметна.
 

AngelGabriel

И имя мне - легион
Регистрация
23.11.2008
Сообщения
778
Ясно спасибо, не приятно признавать свой код говном но это стимул для действий и пополнения своих знаний.
 

ALEXu

в сером
Регистрация
29.12.2010
Сообщения
307
класс JsHttpRequest http://dklab.ru/lib/JsHttpRequest/manual.html
Если по каким-то причинам неохота ничего писать или нет возможности, то все уже написано за вас просто и удобно в использовании.
P.S. но раз :biggrin: пацаны :biggrin: юзают jQuery то я уж и не знаю. зря наверно написал :laugh:
 

AngelGabriel

И имя мне - легион
Регистрация
23.11.2008
Сообщения
778
Я когда подгружаю файл
Код:
jQuery(document).ready(function(){
jQuery("#logo h1, h2, #nonreg").textShadow();

window.setInterval(function() { $("#counter").load("moduls/counter.php"); }, 1000);
})
то русский текст коряво (не правельная кодировка) выводиться из counter.php, как это исправить, пришлось заменить на английский но это конечно не дело
 

brevis

Well-Known Member
Регистрация
10.08.2010
Сообщения
452
Нужно убедиться, что оба файла сохранены в одной кодировке (желательно utf-8).
Также может понадобиться передать кодировку в заголовках. Выше уже приводился код для этого:

Код:
header('Content-Type: text/html; charset=utf-8');
 

AngelGabriel

И имя мне - легион
Регистрация
23.11.2008
Сообщения
778
спасибо все сработает с 1251
 
Статус
Закрыто для дальнейших ответов.
Верх Низ