Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Pagenator на AJAX! отправка данных без перезагрузки страниц 
:(
    Опции темы
Zmiuko
Дата 17.3.2009, 23:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


http://zmiuko.ru
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 8.10.2008

Репутация: 2
Всего: 2



Есть код:

Код

<?php
//открываем файл базы данных допустим $mass = file(имя файла базы);
if (!isset($page)){$page = '1';}else{$page = $page;}
$count = count($mass);
$pages = ceil($count/$kpp); //$kpp = 10; лопустим на страницу - десять сообщений выводится
if ($count > $kpp) {
$com_nav = page($page, $pages, 'page', 'index.php?', ''); //page выводит ссылки вида <a href=index.php?page=1>1</a> там 2...3 и т.д.
$text.= '<center>'.$com_nav.'</center>';
}
$t  = (($page * $kpp) - $kpp);
if ($count < ($page * $kpp)){$a = $count;}
else{$a = ($page * $kpp);}
for($i=$t;$i<$a;$i++)
{
list ($id_com,$name_com,$email_com,$text_com,$date_com,$code_com,$ip_mess,$comred)=explode('<>', $mass[$i]);


//...echo $id_com,$name_com,$email_com,$text_com,$date_com,$code_com,$ip_mess,$comred каждый элемент с html разметкой. Тут понятно все.

}

//вывод формы с отправкой данных в базу  в соответствии с перечисленными переменными


if($_GET['page']=='add') {
if (isset($_POST['name'])){setcookie("user_name", $_POST['user_name'], time()+333333333);}
if (isset($_POST['email'])){setcookie("user_email", $_POST['user_email'], time()+333333333);}

//ну и так далее

//сохраняем в файл из которого потом достанем

//header(УРЛ НА КОТОРЫЙ ВЕРНЕМ ПОЛЬЗОВАТЕЛЯ);
}
?>



Вопрос следующий: необходмимо, чтобы данный код (естественно он будет усовершенствован) был выполнен с AJAX. То есть переход по страницам и оправка самого сообщения проходила без перезагрузки.

Подскажите как это реализовать, есть примеры решения подобного вида задач?
PM MAIL WWW ICQ Skype Jabber   Вверх
nerezus
Дата 18.3.2009, 01:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: 12
Всего: 43



В чем проблема?

Вопрос из серии "сделайте за меня, мне влом"?
Ладно, не проблема. Пиши в ПМ, цена $100.


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
Zmiuko
Дата 18.3.2009, 02:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


http://zmiuko.ru
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 8.10.2008

Репутация: 2
Всего: 2



Нет, сам в состоянии, просто спросил - есть ли какие-либо примеры и источники.
PM MAIL WWW ICQ Skype Jabber   Вверх
Severyanin
Дата 18.3.2009, 07:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Исследователь
**


Профиль
Группа: Участник
Сообщений: 554
Регистрация: 31.7.2007
Где: Россия, Омск

Репутация: нет
Всего: 9



реализовать так же. Серверная сторона скрипта для работы с аякс практически ничем не отличается от работы с выводом браузера. Только вывод необходимо формировать не в виде html-страницы, а в виде массива особого рода. На самом деле. используется 3 типа передачи, но на мой взгляд наиболее удобные - xml и json, что использовать - зависит от ситуации. Почитайте в инете. Для реализации клиентской стороны рекомендую использовать библиотечку jQuery. 


--------------------
"Звонким вереском скроются наши следы, и не вспомнят о них. Кто поверит нам, рыцарям павшей звезды из отвергнутых книг? Пусть в узоре времен ни стихов. ни имен, но напомнит забывшим их полуночный крик." Тэм Гринхилл
"Ужели суслик твоего коварства нагадит в плов доверья моего?". Л.Филатов 
PM MAIL WWW ICQ   Вверх
Zmiuko
Дата 18.3.2009, 19:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


http://zmiuko.ru
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 8.10.2008

Репутация: 2
Всего: 2



Нашел и использую библиотеку jQuery.

Подключаю: 
Код

<script type="text/javascript" src="jquery.js"></script>


подключаю к сайту модуль:

?mod=id

где id - это id.php, модуль ввода-вывода сообщений.

создаю шаблон:

Код

<div id="messages">
</div>
    
<br>
<h3>Добавить сообщение</h3>
<!-- форма отправки сообщения -->

<!-- проверка заполнения формы -->
<script>

</script>

<!-- код формы -->
<form id="myForm">
<table border="0">
    <tr>
        <td width="160">
            Имя пользователя:
        </td>
        <td>
            <input id="username" name="username" style="width: 300px;">
        </td>
    </tr>
    <tr>
        <td width="160" valign="top">
            Сообщение:
        </td>
        <td>
            <textarea id="msg" name="msg" style="width: 300px;"></textarea>
        </td>
    </tr>        
    <tr>
        <td width="160">
            &nbsp;
        </td>
        <td>
            <input id="btn" type="submit" value="Отправить сообщение">
        </td>
    </tr>
</table>
</form>

<script>

    function splash()
    {
        if (document.myForm.username.value  =='')
            {
                alert ("Заполните имя пользователя!");
                return false;    
            }
            
        if (document.myForm.msg.value  =='')
            {
                alert ("Заполните текст сообщения!");
                return false;    
            }
        
        return true;   
    }

    // загрузка сообщений из БД в контейнер messages
    function show_messages()
    {
        $.ajax({
            url: "ajax.php",
            cache: false,
            success: function(html){
                $("#messages").html(html);
            }
        });
    }
        
    $(document).ready(function(){

        show_messages();
        
        // контроль и отправка данных на сервер в фоновом режиме при нажатии на кнопку "отправить сообщение"
        $("#myForm").submit(function(){
        
            var name = $("#username").val();
            var msg  = $("#msg").val();
            if (name =='')
            {
                alert ("Заполните имя пользователя!");
                return false;
            }
            if (msg =='')
            {
                alert ("Заполните текст сообщения!");
                return false;
            }

            $.ajax({
                type: "POST",
                url: "?mod=id&mc=action",
                data: "username="+name+"&msg="+msg+"&action=add",
                success: function(msg){
                    show_messages();
               }
            });
            
            return false;
        });
        
    });

</script>


где скрипт подгружает при отправке по урл ?mod=id&mc=action скрипт ajax.php^

ajax.php:

Код

$c=0;    
$arr = $_a['class']['mydb']['id']->db; //база в виде массива array(array('имя','дата','сообщение'),array('имя','дата','сообщение'), и т.д.); 

for($i=0;$i<count($arr);$i++) {

$row = $arr[$i];
if ($c%2)
            $col="bgcolor='#f9f9f9'";    // цвет для четных записей
        else
            $col="bgcolor='#f0f0f0'";    // цвет для нечетных записей
        
            ?>
            
            <table border="0" cellspacing="3" cellpadding="0" width="90%" <? echo $col; ?> style="margin: 10px 0px;">
            <tr>
                <td width="150" style="color: #999999;">Имя пользователя:</td>
                <td><?php echo $row['0']; ?></td>
            </tr>
            <tr>
                <td width="150" style="color: #999999;">Дата опубликования:</td>
                <td><?php echo $row['1']; ?></td>
            </tr>    
            <tr>
                <td colspan="2" style="color: #999999;">---------------------------------------------------------------</td>
            </tr>        
            <tr>
                <td colspan="2">
                    <?php echo iconv('UTF-8','windows-1251',$row['2']); ?>
                    <br>
                </td>
            </tr>
            
            </table>
            <?php

}
    if ($c==0) // если ни одной записи не встретилось
        echo "Гостевая книга пуста!<br>";


сообщения отправляются:

Код

if($mc=='action') {

    // получаем переменные из формы
    foreach ($_POST as $k=>$v){
        $$k=iconv('UTF-8','windows-1251',$v);
    }
    $username=$_REQUEST['username'];
    $msg=$_REQUEST['msg'];
    $action=$_REQUEST['action'];
    

    
    if ($action=="add")
    {

    
    $arrbase = array($username,time(),$msg);
     if(count($_a['class']['mydb']['stena']->db)>0) {
            array_unshift($_a['class']['mydb']['stena']->db, $arrbase);
        } else {
            $_a['class']['mydb']['stena']->db = array('0' => $arrbase);
        }
        $_a['class']['mydb']['stena']->flush();
    }
    

    
    header("Location: ?mod=id");
}



Проблема в том, что код файла ajax.php необходимо подключать отдельно - никак не могу вшить его в тело подключаемого модуля и вызывать по if($_GET['mc']=='show') {/*выполнение того же что выполняется в ajax.php*/}, рубит весь аякс. И не могу сделать разбиение сообщений по страницам, чтобы тоже подгружались при переходе без перезагрузки.

Как видите, наполовину осилил, но дальше никак не в голову не приходит, плохо знаю js smile. Можете подсказать?
PM MAIL WWW ICQ Skype Jabber   Вверх
Severyanin
Дата 19.3.2009, 06:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Исследователь
**


Профиль
Группа: Участник
Сообщений: 554
Регистрация: 31.7.2007
Где: Россия, Омск

Репутация: нет
Всего: 9



Почитайте здесь. А я думаю, что ваш html нужно выводить через echo или print. В этом случае косяк должен пропасть. И, по хорошему, неплохо было бы запретить прямой вызов из браузера функций, работающих с аяксом


--------------------
"Звонким вереском скроются наши следы, и не вспомнят о них. Кто поверит нам, рыцарям павшей звезды из отвергнутых книг? Пусть в узоре времен ни стихов. ни имен, но напомнит забывшим их полуночный крик." Тэм Гринхилл
"Ужели суслик твоего коварства нагадит в плов доверья моего?". Л.Филатов 
PM MAIL WWW ICQ   Вверх
Zmiuko
Дата 23.3.2009, 01:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


http://zmiuko.ru
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 8.10.2008

Репутация: 2
Всего: 2



Цитата(Severyanin @ 19.3.2009,  06:08)
Почитайте здесь. А я думаю, что ваш html нужно выводить через echo или print. В этом случае косяк должен пропасть. И, по хорошему, неплохо было бы запретить прямой вызов из браузера функций, работающих с аяксом

Благодарю, полезный материал!.. Что касается print и echo, то тут проблема, что весь контент сайта собирается в переменную допустим $display и конце выполнения функция, подключения модулей и вывода блоков, то сть вся работа скриптов выводится echo $display; Вот видите, подделать код под вывод блока через echo ну не ребентабельно чтоли, тем боле 7 мегабайт кода, полгода буду делат - стараться ))) вот и спросил по тому рабочий пример.
PM MAIL WWW ICQ Skype Jabber   Вверх
IZ@TOP
Дата 23.3.2009, 02:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: 44
Всего: 73



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

Для использования кода необходим модуль php sqlite.

config.php

Код

<?php

if(isset($_GET['code'])) {
    highlight_file($_SERVER['PATH_TRANSLATED']);
    exit;
}

define('PATH', dirname(__FILE__));
define('MESSAGES_ON_PAGE', 5);

$sqlite = new SQLiteDatabase(PATH . '/guestbook.db');

?>


index.php
Код

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>My Guestboock with Ajax</title>
<script src="jquery.js"></script>
</head>
<body>
<h1>My Guestbook with Ajax</h1>

<div id="messages"></div>

<h2>Post</h2>
<form action="add.php" method="post">
Name: <input type="text" name="author" /><br />
Message: <br />
<textarea rows="3" cols="22" name="message"></textarea>
<br />
<input type="submit" name="submit" value="submit" />
</form>

<script>
$(document).ready(function () {
    $('#messages').load('ajax.php', null, nextPage); 
});

function nextPage() {
    $('a.page').click(function() { 
        $('#messages').load('ajax.php?page=' + $(this).html(), null, nextPage);
    });
}

</script>

</body>
</html>


ajax.php
Код

<?php

include 'config.php';

$count = $sqlite->query('SELECT COUNT(*) FROM messages')->fetchSingle();
$pages = ceil($count / MESSAGES_ON_PAGE);

$start = 0;
$page = (isset($_GET['page']) ? (int) $_GET['page'] : 1);
if ($page > $pages) {
    $page = $pages;
} else if ($page < 1) {
    $page = 1;
}
if($page > 1) {
    $start = ($page - 1) * MESSAGES_ON_PAGE;
}

$messages = $sqlite->query('SELECT * FROM messages ORDER BY id DESC LIMIT ' .
 (int) $start . ',' . (int) MESSAGES_ON_PAGE);

while($row = $messages->fetch()) {
    echo "<div class=\"message\">" . $row['author'] . " пишет (от " . $row['posted'] . "):<br /><br />" . $row['message'] . "</div><hr />";
}

if($pages > 1) {
    for($i = 1; $i <= $pages; $i++) {
?>
     <a href="#" class="page"><?php echo $i?></a>
<?
    }
}

?>


add.php
Код

<?php

include 'config.php';

if(!empty($_POST['author']) && !empty($_POST['message'])) {
    $sqlite->query("INSERT INTO messages (posted, message, author)
 VALUES(DATETIME('NOW'), '" . 
sqlite_escape_string($_POST['message']) . "', '" . 
sqlite_escape_string($_POST['author']) . "')");
}

header('location: .');

?>


install.php
Код

<?php

require 'config.php';

$sqlite->query(
    'CREATE TABLE messages (
     id INTEGER PRIMARY KEY,
     posted DATE,
     message TEXT,
     author VARCHAR(30)
    ); '
);

?>


Онлайн посмотреть можно здесь http://izatop.ru/examples/vingrad.ru/guestbook/ (к любому файлу можно добавить ?code для просмотра сорсов).



--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
Zmiuko
Дата 23.3.2009, 06:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


http://zmiuko.ru
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 8.10.2008

Репутация: 2
Всего: 2



IZ@TOP, благодарю!  smile 

А проблемы, так это просто для меня ново : smile 
PM MAIL WWW ICQ Skype Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0886 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.