Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

neotheone

Dificuldade no mural

Recommended Posts

Fala pessoal to tentando desenvolver um sistema simples de mural, você digita o seu nome; seu e-mail e sua mensagem e clica em enviar, e acima deve aparecer sua mensagem.Meu sistema é dividido em 2 páginas, o erro é o seguinte, eu digito o nome, email e mensagem, daí quando clico em enviar ele da o seguinte erro:Objeto Response error 'ASP 0156 : 80004005' Erro de cabeçalho /neo/mural/inserir-mural.asp, line 22 PS: sendo q ele posta a mensagem, mais ele dá esse erroOs cabeçalhos HTTP já estão gravados no navegador cliente. Quaisquer modificações no cabeçalho HTTP devem ser feitas antes de gravar o conteúdo da página. código abaixo da página MURAL.ASP:<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%><html><head><title>Untitled Document</title><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"><script language="JavaScript" type="text/JavaScript"><!--function MM_reloadPage(init) { //reloads the window if Nav4 resized if (init==true) with (navigator) {if ((appName=="Netscape")&&(parseInt(appVersion)==4)) { document.MM_pgW=innerWidth; document.MM_pgH=innerHeight; onresize=MM_reloadPage; }} else if (innerWidth!=document.MM_pgW || innerHeight!=document.MM_pgH) location.reload();}MM_reloadPage(true);//--></script></head><body><% conexao="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("mural.mdb")Set conn=Server.CreateObject("ADODB.connection")conn.open conexaosql = "select * from mural"Set rs=conn.execute(sql)%><table width="715" border="1" cellpadding="0" cellspacing="0"><%do while not rs.eof%><!--DWLayoutTable--><tr> <td width="592" height="59" valign="top"> Mensagem: <%=rs.fields("msg")%></td></tr><tr> <td height="57" valign="top"></td></tr><tr> <td height="58" valign="top"></td></tr><%rs.movenextloop%></table> </div><p> </p><p> </p><form action="inserir-mural.asp" method="post"> <p>Nome: <input name="nome" size="20"> </p> <p>E-mail: <input name="email" size="20"> </p> <p> Mensagem:</p> <p> <textarea name="msg" cols="80"></textarea> <input type="submit" name="Submit" value="Enviar"> </p> <p>  </p> </form></body></html>E agora o código abaixo é da página, inserir-mural.asp<% conexao="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("mural.mdb") Set conn=server.CreateObject("ADODB.connection") Set rs=server.CreateObject("ADODB.RecordSet") conn.open conexao rs.open "mural",conn,3,3 nome=request.Form("nome") email=request.Form("email") msg=request.Form("msg") banco="insert into mural(nome,email,msg) values('"&nome&"', '"&email&"', '"&msg&"')" conn.execute(banco) rs.update rs.close response.Redirect("mural.asp") %>

Compartilhar este post


Link para o post
Compartilhar em outros sites

O Erro tá no Response.redirect("mural.asp"), que não pode ser usado dessa maneira pois quando tu dais o redirect ele envia o header pro cliente e quando a página mural .asp tenta executar no servidor não consegue, faz o seguinte, na tela inserir_mural.asp cria uma interfacezinha tipo:

 

Os dados foram inseridos com sucesso, clique no link abaixo para voltar à página anterior

 

E quando o usuário clicar tu voltas. Não vai mudar quase nada, o resto do código tá tudo certo

Compartilhar este post


Link para o post
Compartilhar em outros sites

bom uma explicação mais facil é que o response.redirect não pode ser utilizado depois de tag HTML, explo<%variavel = bla bla blaif bla thenrepsonse.redirect "bla2"elseresponse.redirect "bla2"end if %><html><head>agora se você utilizar o response.redirect depois de tag html tipo:<html><head><%variavel = bla bla blaif bla thenrepsonse.redirect "bla2"elseresponse.redirect "bla2"end if %>ele vai gerar erro... pq ? pq o ASP é processado no servidor, e quando você der o response.redirect ele ja vai ta carregando a pagina para te mostrar (o html mesmo)dai gera o erro, recomendo que se quiser redirecionar memso utilize função javascript, que funciona... mas num lembro de cabeça agora... rsAbração

Compartilhar este post


Link para o post
Compartilhar em outros sites

Lá não está acontecendo o redirect. O cara tá usando apenas uma página mais ou menos assim. Verificar se existe alguma variável vindo por POST, caso exista executar o código e logo em seguida mandar o código html, caso contrário só mostrar o códigoAlgo mais ou menos assim.<% x = Request.form("variavel") str = ""if (x != "") <--- Insere no banco -----> str = "Mensagem inserida com sucesso";%><html><body> <p><%=str%> </p> <p>Resto do código</p></body></html>To fazendo às pressas, talvez os comandos estejam errados, vê isso aew, mas a idéia é essa, faz tudo usando apenas uma página e não duas.

bom uma explicação mais facil é que o response.redirect não pode ser utilizado depois de tag HTML, explo

Exatamente isso !!!!, mas tenho dúvidas quanto ao teu exemplo, não quiz tentar nada parecido no browser, mas ele vai funcionar com certeza.Quando a pessoa dá um redirect, a página seguinte não vai poder executar códigos asp, pode até ter a extensão .asp, ,mas não poderá executar códigos. No teu exemplo a página vai rodar pq o servidor vai primeiro varrer o código inteiro em busca das tags <%%> e logo depois inserir o .html

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quando a pessoa dá um redirect, a página seguinte não vai poder executar códigos asp, pode até ter a extensão .asp, ,mas não poderá executar códigos.

Ei abcdefgh, acho que não é bem assim não, a pagina executa o codigo asp sim, pois ao redirecionar ocorre um novo carregamento da pagina, a unica possibilidade de não executar os codigos, é a pagina já está em cache e o navegador não ir busca-la denovo até ser dado um reload, ou ela não conter um cabeçalho que sempre manda busca-la novamente independentemente de estar em cache

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu vou dar uma olhada nisso de novo, escrevi com o que tinha na memória.<offline> Como tu és remo, não queres uma foto de um leão pra colocar no teu avatar, não é querer falar não mas esse é feio.</offline>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Coloque no inicio de seu .ASPResponse.Buffer = True[/tr]

Isso habilitará o buffer no servidor (no IIS por padrão já é habilitado) e não enviará nada para o browser antes do termino do processamento, ou que você expressamente diga para enviar (Response.Flush).

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.