Post запрос без перезагрузки страницы

Тема в разделе "PHP", создана пользователем yeaahhh, 22 май 2010.

Статус темы:
Закрыта.
Модераторы: latteo
  1. yeaahhh

    yeaahhh

    Регистр.:
    8 май 2008
    Сообщения:
    278
    Симпатии:
    11
    Друзья. Помогите , пожалуйста сделать добавление информации и её отображение без перезагрузки страницы. Насколько я понял, в этом может помочь AJAX.
    Прочитал пару статей о нём, принцип добавления вроде бы понял, но плохо разбираюсь в новых для меня "методах"..
    Не могли бы мне помочь с реализацией?

    Значит есть php-файл с формой добавления информации, обработкой этой самой информации(заносом в БД) и её отображением:
    PHP:
    // Добавление
    <form action='' method='post'>
    <
    input name='login'>
    <
    input type="submit" name="submit" value="Отправить" />
    </
    form>
    //Обработка
    if (isset($_POST['login']))
    {
    include (
    "config.php");
    $login trim(stripslashes(htmlspecialchars($_POST['login'])));
    $query mysql_query("INSERT INTO users (login) VALUES ('$login')",$db);
    if (
    $query == 'true') { 
    $status "Юзер добавлен";
    } else {
    $status "Юзер не добавлен.";};
    echo 
    $status;
    }  
    // Отображение
    тут непосредственно код отображения(запрос к БД и вывод информации в цикле)..
    Не могли бы вы набросать полностью работающий код AJAX, чтобы я смог понять эту тему и самостоятельно оперировать с добавлением в БД без перезагрузки страницы в дальнейшем?
    Заранее большое спасибо..
    P.S. Погуглив, нашёл несколько статей с мануалами, но сделать так и не получилось.. Решил, что лучше пойму как и что делать здесь, на форуме..
     
  2. rex1963

    rex1963

    Регистр.:
    19 фев 2007
    Сообщения:
    228
    Симпатии:
    47
    пройди по ссылке _http://dklab.ru/lib/JsHttpRequest/, там и описание, и примеры, все рабочее и обкатанное. Разобраться, настроить и подключить проблем не вызывает.
     
    yeaahhh нравится это.
  3. yeaahhh

    yeaahhh

    Регистр.:
    8 май 2008
    Сообщения:
    278
    Симпатии:
    11
    Реализовал без помощи JsHttpRequest..
    Вот код ява-скриптовой части:
    HTML:
    
    <script type="text/javascript" language="javascript">
    var req = Create();
    
    function ge(id)
    {
        return document.getElementById(id);
    }
    
    function Create(){ 
    if(navigator.appName == "Microsoft Internet Explorer"){ 
    req = new ActiveXObject("Microsoft.XMLHTTP"); 
    }else{ 
    req = new XMLHttpRequest(); 
    } 
    return req; 
    } 
    
    function Request(query)
    {
    req.open('post', 'voprosi.php' , true );
    req.onreadystatechange = Refresh;
    req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=Windows-1251");
    req.send(query); 
    } 
    
    function Refresh()
    {
        if( req.readyState == 4 )
        ge('ajax').innerHTML = req.responseText;
        else
        ge('ajax').innerHTML = '<img src="/images/ajax-loader.gif" />';
    
    }
    function addanonym()
    { 
    var query; 
    
    var vid = encodeURIComponent(document.getElementById('vid').value);
    var email = encodeURIComponent(document.getElementById('email').value);
    var antext = encodeURIComponent(document.getElementById('antext').value);
    var anpoluchatel = encodeURIComponent(document.getElementById('anpoluchatel').value);
    
    var query = 'anpoluchatel='+anpoluchatel+'&email='+email+'&vid='+vid+'&antext='+antext; 
    
    Request(query);
    }
    </script>
    
    вот php код обработки:
    PHP:
    <?php
    include ("config.php");

    header('Content-Type: text/html; charset=Windows-1251'); 

    $vid = isset($_POST['vid'])?$_POST['vid']:NULL;
    $email = isset($_POST['email'])?$_POST['email']:NULL;
    $text = isset($_POST['antext'])?$_POST['antext']:NULL;
    $poluchatel = isset($_POST['anpoluchatel'])?$_POST['anpoluchatel']:NULL;

    $date date("Y-m-d H:i:s");
    $ip=getenv("HTTP_X_FORWARDED_FOR");
    if (empty(
    $ip) || $ip=='unknown') { $ip=getenv("REMOTE_ADDR"); }

    $text trim(stripslashes(htmlspecialchars($text)));
    $email trim(stripslashes(htmlspecialchars($email)));


    $query mysql_query("INSERT INTO voprosi (poluchatel, date, vid, text, email, ip) VALUES ('$poluchatel','$date','$vid','$text','$email','$ip' )",$db);
    if (
    $query == 'true') { 
    $status "Анонимка добавлена";
    } else {
    $status "Анонимка не добавлена";};

    echo 
    $status;

    ?>
    Добавлено через 3 минуты
    Встала проблема кодировки.. В бд записываются каракули..
    Может кто-нибудь подсказать, как исправить эту проблему?
    И ещё один момент.. Можно ли сделать так, чтобы данные, которые я добавил, появлялись на странице без её перезагрузки?
    Яркий пример того, чего я хочу - добавление сообщений на этом форуме. Нажал "Отправить быстрый ответ" и сообщение тут же добавилось..
    Заранее большое спасибо..

    ---------- Post added at 02:48 ---------- Previous post was at 00:58 ----------

    Проблему с кодировкой решил с помощью
    PHP:
    $text mb_convert_encoding($text"Windows-1251""auto");


    ---------- Post added at 03:55 ---------- Previous post was at 02:48 ----------

    Так каким же способом можно реализовать мгновенный вывод добавленной информации..?
     
  4. rex1963

    rex1963

    Регистр.:
    19 фев 2007
    Сообщения:
    228
    Симпатии:
    47
    Я ничего не понял из твоих вопросов.
    Срабатывает функция function Refresh()?
    Если да, то результат работы скрипта (echo $status;) должен выводится в вашем случае в элемент с id = ajax;
    В html страницы должен быть к примеру
    PHP:
    <div id ajax>Сюда будет вставлен результат работы скрипта</div>
    Выглядеть все может где-то так:
    PHP:
    <html>
    <
    head></head>
    <
    body>
    <
    table width=100%><tr>
    <
    td width=75%>
    <
    div id ajax>Сюда будет выведено echo $status;</div>
    </
    td>
    <
    td width=25%>
    <
    form action="" method="post" enctype="multipart/form-data">
    <
    input name='login'>
    <
    input type="submit" name="submit" value="Отправить" />
    </
    form

    </
    td></tr>
    </
    table>
    </
    body>
    </
    html>

    </
    body>

     
  5. yeaahhh

    yeaahhh

    Регистр.:
    8 май 2008
    Сообщения:
    278
    Симпатии:
    11
    Вы немного меня не поняли..
    С этим всё ок. Всё работает.
    Но мне хотелось бы, чтобы сразу добавлялся комментарий, а не только надпись от echo $result..
    Т.е. я вношу данные.. и там где вывод комментариев, появлялся бы новый комментарий, без перегазрузки страницы.. Не подскажешь, как можно реализовать?
     
  6. rex1963

    rex1963

    Регистр.:
    19 фев 2007
    Сообщения:
    228
    Симпатии:
    47
    ну так сделай запрос к базе и выведи результат.
     
  7. yeaahhh

    yeaahhh

    Регистр.:
    8 май 2008
    Сообщения:
    278
    Симпатии:
    11
    rex1963, пойми.. У меня вывод комментариев и форма для их добавлений на одной странице. Я хочу, чтобы после заполнения формы и нажатию на добавить комментарий, он сразу же появлялся в списке комментариев. А сейчас у меня появляется только результат выполнения запроса на добавление:
    HTML:
    
    <div id = ajax>Комментарий добавлен\комментарий не добавлен</div>.
    
    А сам комментарий, не отображается сразу.. Только после перезагрузки страницы.. Вот в чём мой вопрос..) Как сделать так, чтобы комментарий сразу же отобразился в списке комментариев?

    Я полагаю, что нужно сделать ещё что-то типа этого, где будет вывод всех комментариев?
    HTML:
    
    <div id = comments>Вывод всех комментариев</div>
    
    Как можно вывести файл с отображением комментариев в данную структуру?
    HTML:
    
    <div id = comments>Вывод всех комментариев</div>
    
     
  8. yeaahhh

    yeaahhh

    Регистр.:
    8 май 2008
    Сообщения:
    278
    Симпатии:
    11
    Ребяяяяят, ну помогите плиз кто-нибудь.. Нужно вывести файл comments.php в
    HTML:
    
    <div id ='comments'></div>
    
    Как я понял, это через innerHTML = '' Делается?
    Напишите, пожалуйста, полностью скрипт подгрузки файла comments.php в фоновом режиме..
    Уже второй день голову ломаю..
     
  9. rex1963

    rex1963

    Регистр.:
    19 фев 2007
    Сообщения:
    228
    Симпатии:
    47
    Этот скрипт, который ты подключаешь, делает запись в базу данных и выводит сообщение о результате этого процесса. За вывод записи ответственен наверняка другой скрипт, который ты не приводишь.
    Если запись идет в поле text, то вывод можно оформить вот так
    PHP:
      <?php
    include ("config.php");

    header('Content-Type: text/html; charset=Windows-1251'); 

    $vid = isset($_POST['vid'])?$_POST['vid']:NULL;
    $email = isset($_POST['email'])?$_POST['email']:NULL;
    $text = isset($_POST['antext'])?$_POST['antext']:NULL;
    $poluchatel = isset($_POST['anpoluchatel'])?$_POST['anpoluchatel']:NULL;

    $date date("Y-m-d H:i:s");
    $ip=getenv("HTTP_X_FORWARDED_FOR");
    if (empty(
    $ip) || $ip=='unknown') { $ip=getenv("REMOTE_ADDR"); }

    $text trim(stripslashes(htmlspecialchars($text)));
    $email trim(stripslashes(htmlspecialchars($email)));


    $query mysql_query("INSERT INTO voprosi (poluchatel, date, vid, text, email, ip) VALUES ('$poluchatel','$date','$vid','$text','$email','$ip' )",$db);
    if (
    $query == 'true') { 
    $status "Анонимка добавлена";
    $id mysql_insert_id(); //получаем идентификатор последней записи
    //Делаем запрос к базе данных
    $query "SELECT * FROM voprosi
              WHERE id = 
    $id LIMIT 1";

    $new mysql_query($query);

    $news mysql_fetch_array($new);
    /*выводим текст сообщения без перезагрузки в 
    <div id = ajax>Сюда будет вставлен результат работы скрипта</div>
    */
    echo $news['text'];
    } else {
    $status "Анонимка не добавлена";};

    echo 
    $status;

    ?> 

     
  10. serjinio

    serjinio

    Регистр.:
    10 май 2007
    Сообщения:
    439
    Симпатии:
    49
    Чушь не пишите ,обработайте по человечески "магические кавычки"
    + .mysql_real_escape_string() при инсерте
     
Статус темы:
Закрыта.