Duvida de PHP

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:
ajax pode ser a soluçao
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") == 0) set_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:
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:
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
 
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
 
Boas,

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

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

tens no pseudo-ficheiro asp.asp os echos(em asp é response.write)
e onde envias os campos vindos da base de dados?
 
Última edição pelo moderador:
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]
 
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.
 
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.

Meto o codigo que me deste dentro do while?
 
Meto o codigo que me deste dentro do while?
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
 
Back
Topo