1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Duvida de PHP

Discussão em 'Web Development' iniciada por Tsunamy_boy, 25 de Março de 2008. (Respostas: 15; Visualizações: 861)

  1. Tsunamy_boy

    Tsunamy_boy Banido

    como actualizar uma pagina consecutivamente para ir buscar dados a base de dados
    a ideia e fazer um chat em php e preciso de actualizar as mensagens enviadas.
     
    Última edição pelo moderador: 25 de Março de 2008
  2. Armadillo

    Armadillo Folding Member

    ajax pode ser a soluçao
     
  3. Tsunamy_boy

    Tsunamy_boy Banido

    sim a solução é essa o problema é que nao sei como fazer isso...

    Tenho este codigo que me lé as mensagens que consiste num ciclo infitito como podem ver no While (true) e tem mais uma coisa como o
    flush(); que penso que executa o codigo até aquela linha e depois volta para standby a espera de nova instrução.
    usleep(1111111);//faz uma pausa no tempo
    Mas a certa altura isto kraxa e nao da para ter 2 janelas abertas

    a parte
    PHP:
    if (ini_get("safe_mode") == 0set_time_limit(0);
    set_magic_quotes_runtime(0);
    ob_end_flush();
    Penso que evita que surjam erros mas isto num funca passado algum tempo...


    PHP:
    <script language="jscript">
    move();
    function move()
    {
        if(parent.form_msg.b_auto_rol.value=="true")
        {
            window.scroll(1,400000);
        }
        window.setTimeout("move()",100);
    }
    </script>
    <?
    if (ini_get("safe_mode") == 0) set_time_limit(0);
    set_magic_quotes_runtime(0);
    ob_end_flush();

    $proc=$_GET['proc'];
    $id_sala=$_GET['id_sala'];

    $ult_id=0;//guarda o ultimo id

    function txt_smiles($texto)
    {
        $msgem=$texto;
        $msgem = str_replace("[ E:\ ]","<img border=\"0\" src=\"smiles/1.jpg\">",$msgem);
        $msgem = str_replace("[ :k ]","<img border=\"0\" src=\"smiles/2.jpg\">",$msgem);
        $msgem = str_replace("[ 8| ]","<img border=\"0\" src=\"smiles/3.jpg\">",$msgem);
        $msgem = str_replace("[ :D ]","<img border=\"0\" src=\"smiles/4.jpg\">",$msgem);
        $msgem = str_replace("[ 8: ]","<img border=\"0\" src=\"smiles/5.jpg\">",$msgem);
        $msgem = str_replace("[ : ]","<img border=\"0\" src=\"smiles/6.jpg\">",$msgem);
        $msgem = str_replace("[ B) ]","<img border=\"0\" src=\"smiles/7.jpg\">",$msgem);
        $msgem = str_replace("[ :0zzz ]","<img border=\"0\" src=\"smiles/8.jpg\">",$msgem);
        $msgem = str_replace("[ (8 ) ]","<img border=\"0\" src=\"smiles/9.jpg\">",$msgem);
        $msgem = str_replace("[ X: ]","<img border=\"0\" src=\"smiles/10.jpg\">",$msgem);
        $msgem = str_replace("[ lol ]","<img border=\"0\" src=\"smiles/11.jpg\">",$msgem);
        $msgem = str_replace("[ .¡ ]","<img border=\"0\" src=\"smiles/12.jpg\">",$msgem);
        $msgem = str_replace("[ ((+.+)) ]","<img border=\"0\" src=\"smiles/a.bmp\">",$msgem);
        $msgem = str_replace("[ :() ]","<img border=\"0\" src=\"smiles/14.jpg\">",$msgem);
        $msgem = str_replace("[ :$ ]","<img border=\"0\" src=\"smiles/15.jpg\">",$msgem);
        $msgem = str_replace("[ %D ]","<img border=\"0\" src=\"smiles/16.jpg\">",$msgem);
        $msgem = str_replace("[ :( ]","<img border=\"0\" src=\"smiles/17.jpg\">",$msgem);
        $msgem = str_replace("[ :) ]","<img border=\"0\" src=\"smiles/18.jpg\">",$msgem);
        $msgem = str_replace("[ e| ]","<img border=\"0\" src=\"smiles/19.jpg\">",$msgem);
        $msgem = str_replace("[ :« ]","<img border=\"0\" src=\"smiles/20.jpg\">",$msgem);
        return $msgem;
    }

    include("conf.php");
    while (true)
    {
            $sql="select * from chat where id_sala=$id_sala and id>$ult_id order by id";
            $resultado=mysql_query($sql,$ligacao);
            while($reg_chat=mysql_fetch_row($resultado))
            {
                $ult_id=$reg_chat[0];//guarda o ultimo id visto
                
                //texto das mensagens
                if($reg_chat[7]==true)//italico
                $msg="<i>";
                else
                $msg="";
                
                if($reg_chat[6]==true)//negrito
                $msg.="<b>";
                $msg.="<font color=\"$reg_chat[5]\">";
                $msg.="$reg_chat[2]</font>";
                if($reg_chat[7]==true)//fechar italico
                $msg.="</i>";
                if($reg_chat[6]==true)//fechar negrito
                $msg.="</b>";
                $msg=txt_smiles($msg);
                //msg privada
                if($reg_chat[8]==true)
                {
                //mostrar a quem recebe
                if($reg_chat[3]==$proc)
                {
                    $font="<font color=red face=\"Arial, Helvetica, sans-serif\" size=\"2\">";
                    $sql="select nick from aluno_reg where n_processo='$reg_chat[1]'";
                        $resultado3=mysql_query($sql,$ligacao);
                        $registo3=mysql_fetch_row($resultado3);
                        echo("<b>$font >>Mensagem privad@ de <a target=\"utilizadores\" href=\"utilizadores.php?proc=$proc&id_sala=$id_sala&nome=$registo3[0]#sel\">$font$registo3[0]:</a></b><br>$msg<br>");
                }
                //mostrar a quem eviou
                if($reg_chat[1]==$proc)
                {
                    $font="<font color=\"#0081AD\" face=\"Arial, Helvetica, sans-serif\" size=\"2\">";
                    $sql="select nick from aluno_reg where n_processo='$reg_chat[3]'";
                        $resultado3=mysql_query($sql,$ligacao);
                        $registo3=mysql_fetch_row($resultado3);
                        echo("<b>$font >>Mensagem privad@ enviada para $registo3[0]:</b><br>>>$msg<br>");
                }    
                }
                else//msg não privada
                {
                    // msg de acaba de entrar
                    if($reg_chat[9]==true)
                    {
                    $sql="select nick from aluno_reg where n_processo='$reg_chat[1]'";
                        $resultado3=mysql_query($sql,$ligacao);
                        $registo3=mysql_fetch_row($resultado3);
                        
                        $font="<font color=red face=\"Arial, Helvetica, sans-serif\" size=\"2\">";
                        if($reg_chat[1]!=$proc)
                            echo("<b>$font>>Acaba de entrar: <a target=\"utilizadores\" href=\"utilizadores.php?proc=$proc&id_sala=$id_sala&nome=$registo3[0]#sel\">$font$registo3[0]</b></a><br>");
                        else
                            echo("<b>$font>>Acaba de entrar: $registo3[0]</b><br>");
                    }
                    else //no caso de ser uma mensagem derigida a outro/outros utilizadores
                    {
                        //cores para os nicks
                        if($reg_chat[1]!=$proc)
                        {
                            if($reg_chat[3]==$proc)//msg para o utilizador (vermelho)
                            {
                                $font="<font color=red face=\"Arial, Helvetica, sans-serif\" size=\"2\">";
                            }
                            else
                            if($reg_chat[3]=="Todos") //msg para todos (verde)
                            {
                                $font="<font color=\"#91C400\" face=\"Arial, Helvetica, sans-serif\" size=\"2\">";
                            }
                            else //msg de outo utilizador para outro)
                            {
                                $font="<font color=\"#6D7889\" face=\"Arial, Helvetica, sans-serif\" size=\"2\">";
                            }
                        }
                        else
                        {//msg enviada pelo utilizador (azul claro)
                            $font="<font color=\"#0081AD\" face=\"Arial, Helvetica, sans-serif\" size=\"2\">";
                        }
                        
                        echo($font);
                        
                        //parte de quem envia
                        $sql="select nick from aluno_reg where n_processo='$reg_chat[1]'";
                        $resultado2=mysql_query($sql,$ligacao);
                        $registo2=mysql_fetch_row($resultado2);
                        if($reg_chat[1]!=$proc)
                            echo("<a target=\"utilizadores\" href=\"utilizadores.php?proc=$proc&id_sala=$id_sala&nome=$registo2[0]#sel\"><b>$font$registo2[0]</b></a>");
                        else
                            echo("<b>$font$registo2[0]</b>");
                            
                        echo(" para ");
                        //parte de quem recebe
                        if($reg_chat[3]!="Todos") //quando a mesnagem não é destinada a todos
                        {
                            $sql="select nick from aluno_reg where n_processo='$reg_chat[3]'";
                            $resultado2=mysql_query($sql,$ligacao);
                            $registo2=mysql_fetch_row($resultado2);
                            //echo($sql);
                            //se for eu não posso seleccionar o meu nick
                            if($reg_chat[3]!=$proc)
                                echo("<a target=\"utilizadores\" href=\"utilizadores.php?proc=$proc&id_sala=$id_sala&nome=$registo2[0]#sel\"><b>$font$registo2[0]</a></b>: <br>$msg<br>");
                            else
                                echo("<b>$font$registo2[0]</b>: <br>$msg<br>");
                        }
                        else
                        {//quando a mensagem é para todos
                            echo("<a target=\"utilizadores\" href=\"utilizadores.php?proc=$proc&id_sala=$id_sala&nome=Todos#sel\"><b>$font Todos</b></a>: <br>$msg<br>");
                        }
                    }
                }
        flush();
        }
    flush();
    usleep(1111111);//pausa no tempo
    }
    ?>
     
    Última edição pelo moderador: 25 de Março de 2008
  4. Armadillo

    Armadillo Folding Member

    nao faças assim!! isso torra-te o servidor:005:

    o ajax funciona da seguinte forma: tens um php/asp/qqcoisa que te faz um echo/response.write dos dados que queres mostrar, apenas dados.
    o que o javascript vai fazer é sniffar esse output e depois "espetá-lo" aonde tu queres.

    http://www.techzonept.com/showpost.php?p=2494215&postcount=6
    lê o codigo e diz-me depois se percebeste. senao volta cá que explicamos-te.

    cumprimentos
     
  5. Tsunamy_boy

    Tsunamy_boy Banido

    Diz-me só onde é que o codigo vai boscar as msgs a base de dados e onde é que as imprime.

    Podes-m fazer um favor?
    Faz o codigo para mostrar quem envia a msg, para quem vai a msg e a propria mensagem.
    Usa codigo php pois aquilo tem scripts de Asp
    brigadão se poderes agradecia-te.
     
    Última edição pelo moderador: 25 de Março de 2008
  6. Armadillo

    Armadillo Folding Member

    tens no link tudo o que precisas para fazer o TEU codigo. nao sei como a tua app funciona (logo nao vou pegar nisso) e mesmo que soubesse como, nao to faria (a nao ser que me pagasses :p). aprende isso que é simples.

    Lê bem o código, que ele está bem explicito. Se tiveres duvidas em relação ao codigo, posta as duvidas que nos ajudamos, simplesmente nao fazemos (eu pelo menos) trabalho pro-bono.

    cumprimentos
     
  7. Tsunamy_boy

    Tsunamy_boy Banido

    ok eu percebo isso, tambem nao queria que pegaxes no meu codigo, apenas que fizexes uma cena que imprimisse 3coisas... mas cag*
    diz-me so desse codigo onde é que ele vai buscar os valores e onde é que mos imprime
     
  8. K0mA

    K0mA Power Member

    Boas,

    Fazeres isso de raiz não é pêra doce, pesquisa por AJAX PHP CHAT vais encontrar soluções já feitas.
     
  9. Armadillo

    Armadillo Folding Member

    tens no pseudo-ficheiro asp.asp os echos(em asp é response.write)
     
  10. Tsunamy_boy

    Tsunamy_boy Banido

    pois mas eu nao pisco de ajax, e tirar sites ja feitos e andar a ver um codigo que nao percebo os comandos torna-se complicado de implementar no meu proj

    e onde envias os campos vindos da base de dados?
     
    Última edição pelo moderador: 25 de Março de 2008
  11. Armadillo

    Armadillo Folding Member

    o envio de dados está hardcoded
    mas tu ja tens codigo para isso
    Código:
    //...
    [COLOR=#000000][COLOR=#0000BB]$sql[/COLOR][COLOR=#007700]=[/COLOR][COLOR=#DD0000]"select * from chat where id_sala=$id_sala and id>$ult_id order by id"[/COLOR][COLOR=#007700];
            [/COLOR][COLOR=#0000BB]$resultado[/COLOR][COLOR=#007700]=[/COLOR][COLOR=#0000BB]mysql_query[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]$sql[/COLOR][COLOR=#007700],[/COLOR][COLOR=#0000BB]$ligacao[/COLOR][COLOR=#007700]);
            while([/COLOR][COLOR=#0000BB]$reg_chat[/COLOR][COLOR=#007700]=[/COLOR][COLOR=#0000BB]mysql_fetch_row[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]$resultado[/COLOR][COLOR=#007700]))
    //...
    [/COLOR][/COLOR]
     
  12. RicardoMoreira

    RicardoMoreira Power Member

    Não me leves a mal, mas, ainda nem sabes programar e já pretendes incluir ajax?
     
  13. Kayvlim

    Kayvlim Undefined Moderator
    Staff Member

    Se ainda não percebes de ajax, podes usar um IFrame. Está obsoleto e não é aconselhado, mas é bem mais fácil actualizar uma página através de uma <META> ou de um reload por JavaScript. Essa página é o conteúdo do dito chat.
    É horrível a nível de gastos de largura de banda, mas para começar já dá para o gasto, e uma vez feito o básico, torna-se menos difícil (não confundir com "mais fácil") de optimizar ou passar para AJAX.
     
  14. Tsunamy_boy

    Tsunamy_boy Banido

    Meto o codigo que me deste dentro do while?
     
  15. Kayvlim

    Kayvlim Undefined Moderator
    Staff Member

    Que código?
    O que eu disse é: tens um <IFrame>, cujo href é uma página php cujo conteúdo é a shoutbox (sim, isto é uma shoutbox e não um chat).
    Para actualizar automaticamente, podes tanto usar uma tag <META> (google "meta redirect") ou JavaScript.
    Onde é que te dei código? :P
     

Partilhar esta Página