Обработка форм с помощью Ajax

Discussion in 'PHP' started by n3m0, 14 Feb 2008.

  1. n3m0

    n3m0 Elder - Старейшина

    Joined:
    11 May 2007
    Messages:
    133
    Likes Received:
    92
    Reputations:
    11
    Собственно вопрос: У меня есть форма. при нажатии на кнопку идёт обработка формы на сервере, потом тудаже вместо текущей формы загружаются другие данные(ещё одна форма/ и так несколько раз). Т.е у меня пару формочек, и пользователь должен их заполнить по очерёдно.

    Перегуглился и толкового не нашел.


    А ещё. при обработке формы нужно чтобы выводился рисунок(какбы loading image) (пример на сайте хека.ру)

    Знающих прошу показать пример, ибо от Ajax'a далёк
     
    #1 n3m0, 14 Feb 2008
    Last edited: 14 Feb 2008
  2. banned

    banned Banned

    Joined:
    20 Nov 2006
    Messages:
    3,324
    Likes Received:
    1,193
    Reputations:
    252
    Хек хек!

    index.php
    PHP:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    <head>
        <title>The Mafia - Undeground Security Private Community</title>
        <meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
        <script src="http://www.xeka.ru/js/jquery.js" type="text/javascript"></script>
        <script type="text/javascript">   function whois(domain)
       {
        $.post("whois.php", { domain: document.getElementById("domain").value },
       function(data)
       {
            document.getElementById("res").innerHTML = data;
       });
       }
    </script>
        <script type="text/javascript">
        $(function(){    
            $('<img id="test" src="images/indicator.gif"/>') 
            .ajaxStart(function() {$(this).show();}) 
            .ajaxStop(function() {$(this).hide();}) 
            .appendTo('#res'); 
        }); 
        </script>
    </head>
    <body>
    <?php
    echo '<div id="main">';

    echo 
    '<form method="post" enctype="multipart/form-data"><table>
        <tr><td>Enter domain name:</td><td><input type="text" id="domain" /></td></tr>
        <tr><td>&nbsp;</td><td align="right"><input type="button" value="Lookup" onclick="whois()" /></td></tr>
        </table></form>'
    ;

    echo 
    '<div id="res"></div>';
    echo 
    '</div>';
    ?>
    whois.php
    PHP:
    <?php
    <?php
        error_reporting
    (0);

        if(
    $_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest')
        {
            function 
    encode($str$type)
            {
                static 
    $conv='';
                if (!
    is_array $conv ))
                {
                    
    $conv=array ();
                    for(
    $x=128$x <=143$x++ )
                    {
                      
    $conv['utf'][] = chr(209).chr($x);
                      
    $conv['win'][] = chr($x+112);
                    }

                    for( 
    $x=144$x <=191$x++ )
                    {
                           
    $conv['utf'][] = chr(208).chr($x);
                           
    $conv['win'][] = chr($x+48);
                    }

                    
    $conv['utf'][] = chr(208).chr(129);
                    
    $conv['win'][] = chr(168);
                    
    $conv['utf'][] = chr(209).chr(145);
                    
    $conv['win'][] = chr(184);
                 }
                 if( 
    $type=='w' )
                      return 
    str_replace $conv['utf'], $conv['win'], $str );
                 elseif( 
    $type=='u' )
                      return 
    str_replace $conv['win'], $conv['utf'], $str );
                 else
                    return 
    $str;
            }

            function 
    whois($domain)
            {
                
    $dom explode("."$domain);

                if(
    substr($domain04) == 'www.' && count($dom) >= 3)
                {
                    
    $domain substr($domain,4);
                }

                
    $zone    strtolower($dom[count($dom) - 1]);

                if(!empty(
    $zone))
                {
                    
    $error 0;
                    if(
    in_array($zone, array('de')))
                    {
                        
    $server "whois.denic.de";
                    }
                    else
                    if(
    in_array($zone, array('nl')))
                    {
                        
    $server "whois.domain-registry.nl";
                    }
                    else
                    if(
    in_array($zone, array('ru''su')))
                    {
                        
    $server "whois.ripn.net";
                    }
                    else
                    if(
    in_array($zone, array('com''net''edu')))
                    {
                        
    $server "whois.crsnic.net";
                    }
                    else
                    if(
    in_array($zone, array('org')))
                    {
                        
    $server "whois.publicinterestregistry.net";
                    }
                    else
                    if(
    in_array($zone, array('info')))
                    {
                        
    $server "whois.afilias.net";
                    }
                    else
                    if(
    in_array($zone, array('biz')))
                    {
                        
    $server "whois.neulevel.biz";
                    }
                    else
                    if(
    in_array($zone, array('cc')))
                    {
                        
    $server 'ccwhois.verisign-grs.com';
                    }
                    else
                    if(
    in_array($zone, array('nu')))
                    {
                        
    $server 'whois.nic.nu';
                    }
                    else
                    if(
    in_array($zone, array('us')))
                    {
                        
    $server 'whois.nic.us';
                    }
                    else
                    if(
    in_array($zone, array('ws')))
                    {
                        
    $server 'whois.website.ws';
                    }
                    else
                    if(
    in_array($zone, array('tv')))
                    {
                        
    $server 'tvwhois.verisign-grs.com';
                    }
                    else
                    if(
    in_array($zone, array('ua')))
                    {
                        
    $server 'whois.net.ua';
                    }
                    else
                    {
                        
    $error 2;
                    }
                }
                else
                {
                    
    $error 1;
                }

                if(!empty(
    $domain) && $error == 0)
                {
                    
    $fp fsockopen($server43, &$errno, &$errstr30);
                    if(!
    $fp)
                    {
                        
    $output $errstr." (".$errno.")<br>\n";
                    }
                    else
                    {
                        
    fputs($fp$domain."\n");
                        while(!
    feof($fp))
                        {
                            
    $output $output ereg_replace("\t"" "fgets($fp,128)) . "<BR>\n";
                        }
                        
    fclose($fp);
                    }
                    
    $output str_replace("<BR>\n"""$output);
                    return 
    "<textarea rows='20' cols='60'>".$output."</textarea>";
                }
                else
                if(
    $error == 2)
                {
                    return 
    $output "<b>Ошибка:</b><br />1) Неверно задана зона <b>".htmlspecialchars(encode($zone))."</b> для домена ".htmlspecialchars(encode($domain))."<br/>2) В нашей базе нет информации по вашему домену<br>\n";
                }
                else
                if(
    $error == 1)
                {
                    return 
    $output "Вы не ввели домен";
                }
            }

            if(
    $_POST['domain'])
            {
                if(empty(
    $_POST['domain']))
                {
                    echo 
    "<div align='center'><div class='error'>Заполните поле</div></div>";
                }
                else
                {
                    echo 
    whois(encode($_POST['domain']));
                }
            }
        }
    ?>
    [​IMG]
     
    1 person likes this.
  3. DIAgen

    DIAgen Banned Life!

    Joined:
    2 May 2006
    Messages:
    1,055
    Likes Received:
    376
    Reputations:
    460
    Isis если используешь jquery.js, изучи его функции:) (правда я только не давно сам изучил его полностью...)
    PHP:
    <script src="http://www.xeka.ru/js/jquery.js" type="text/javascript"></script>
        <script type="text/javascript">  
        function whois(domain) {
        $.post("whois.php", { domain: $('#domain').attr('value') },
        function(data) {
            $('#res').empty().append(data);
       });
       }
    </script>
     
    1 person likes this.
  4. n3m0

    n3m0 Elder - Старейшина

    Joined:
    11 May 2007
    Messages:
    133
    Likes Received:
    92
    Reputations:
    11
    Спасибо Isis. я и надеялся на твою помощь :)

    DIAgen, спасибо за исправление


    Теперь такой вопрос: Форма обрабатывается. Но нужно сделать так. чтобы когда форма обработалась, в <div id="main"> помещалась ещё одна форма. И так несколько раз/ Т,е старая форма убиралась и помещалась новая

    Там нужно использовать innerHTML для замены HTML кода?
    Покажите пример
     
    #4 n3m0, 14 Feb 2008
    Last edited: 14 Feb 2008
    1 person likes this.
  5. gibson

    gibson Elder - Старейшина

    Joined:
    24 Feb 2006
    Messages:
    391
    Likes Received:
    247
    Reputations:
    88
    еще посмотри тут
    http://myjoomla.ru/demo_ru/demonstratie.php

    и вот тут есть примеры для
    http://xajaxproject.org/download.php
     
    1 person likes this.
  6. banned

    banned Banned

    Joined:
    20 Nov 2006
    Messages:
    3,324
    Likes Received:
    1,193
    Reputations:
    252
    DIAgen, мне больше понятен мой код и удобнее для меня..
    На время работы никак влияет что означает что знать мне его более не надо
     
    1 person likes this.
  7. DIAgen

    DIAgen Banned Life!

    Joined:
    2 May 2006
    Messages:
    1,055
    Likes Received:
    376
    Reputations:
    460
    Где то приблизительно так
    PHP:
    <script type="text/javascript">  
    $(
    '#main').empty().append('<form><!-- Сдесь твоя новая форма--></form>'); 
    </script>  
    Этот скрипт вставь в текст который возвращается при AJAX
     
  8. DIAgen

    DIAgen Banned Life!

    Joined:
    2 May 2006
    Messages:
    1,055
    Likes Received:
    376
    Reputations:
    460
    Ну это твое дело, просто сначало не привычно, зато потом на много лучше и быстре делается все:)

    простой пример
    PHP:
    document.getElementById("domain").value
    или так...
    PHP:
    $('#domain').attr('value')
     
    #8 DIAgen, 14 Feb 2008
    Last edited: 14 Feb 2008
    1 person likes this.