Ir para conteúdo

POWERED BY:

Arquivado

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

Jair Humberto

enviando dados via POST para php

Recommended Posts

Olá pessoal, estou iniciando na utilização do ajax, e estou tropeçando no seguinte problema:

 

tenho uma página php que contem o script ajax:

 

<?php echo <<<EOT<?xml version="1.0" encoding="UTF-8"?>EOT;?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//PT"	"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"><html xmlns="http://www.w3.org/1999/xhtml"	 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"	 xsi:schemaLocation="http://www.w3.org/MarkUp/SCHEMA/xhtml11.xsd"	 xml:lang="pt" >	<head>		<title>oi</title>		<script type="text/javascript">			var ajax = false;			function bajax(){				ajax = false;				if(window.XMLHttpRequest){					ajax = new XMLHttpRequest();				} else if(window.ActiveXObject){					try {						ajax = new ActiveXObject("Msxml2.XMLHTTP");					} catch (e) {						try {							ajax = new ActiveXObject("Microsoft.XMLHTTP");						} catch (e) {}					}				}				if(!ajax){					return false;				}				ajax.open('POST', 'dados.php', true);				ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");				ajax.onreadystatechange = funcao;				ajax.send("dados=teste");			}			function funcao() {				if (ajax.readyState == 4) {					if (ajax.status == 200) {						var xmldoc = ajax.responseXML;						var resultado = xmldoc.childNodes[0].childNodes[0].nodeValue;						alert(resultado);					} else {						alert('erro');					}				}			}		bajax();		</script>	</head>	<body>	</body></html>

note esse trecho:

 

ajax.open('POST', 'dados.php', true);ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");ajax.onreadystatechange = funcao;ajax.send("dados=teste");

estou enviando uma string "teste" via post para o arquivo dados.php que está abaixo:

 

<?php	header("Content-Type: text/xml");	if($_POST["dados"]){		$conteudo = file_get_contents("arquivo.txt");		$dados = $_POST["dados"];		#$dados = $conteudo.":".$_POST["dados"];		$handle = fopen("arquivo.txt", "a+");		fwrite($handle, $dados);		fclose($handle);	}	$linha = file_get_contents("arquivo.txt");	$xml = "<?xml version='1.0' encoding='UTF-8'?>";	$array = explode(":", $linha);	foreach($array as $valor){		$xml .= "<dados>$valor</dados>";	}	echo $xml;?>

Agora eis a questão: eu queria enviar uma string "teste" na variavel $_POST["dados"] para o php, o php por sua vez iria pegar o dado recebido (teste), procurar um arquivo (arquivo.txt), verificar o que está dentro do arquivo, e armazenar a string recebida junto com os dados do arquivo, separando, porém, um do outro com ":" dois pontos.

 

em seguida ele deveria carregar tudo em um array, separando cada item do array, por explode(":", $linha), e exibir na tela como xml.

 

no entanto o que acontece é que ele está concatenando todos os dados antes de armazenar!

 

exemplo: a primeira vez ele mostra um erro de caracteres inúteis, a segunda vez que executo ele mostra "testeteste" em vez de só "teste", a terceira vez que ele executa ele mostra "testetesteteste" e por aí vai

 

o original era pra ser:

 

#$dados = $conteudo.":".$_POST["dados"];

essa linha aí descomentada, em vez dessa:

 

$dados = $_POST["dados"];

tive que fazer assim pra fazer um teste, porque tava dando caracteres inválidos.

 

o xml exibido era pra ser assim:

 

<dados>	  teste</dados><dados>	  teste</dados><dados>	  teste</dados>
e a cada vez que eu executasse o arquivo onde está o codigo ajax, ele acrescentasse um campo <dados>teste</dados>

 

no entanto o que está acontecendo é isso:

 

<dados>	  testetesteteste</dados>

alguém pode me ajudar nisso? :unsure:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esta dúvida esta mais para o PHP do que javascript, até porque até a parte que os dados são enviados não há problemas.

 

ps, o problema não seria nesta parte:

$conteudo = file_get_contents("arquivo.txt");		$dados = $_POST["dados"];		#$dados = $conteudo.":".$_POST["dados"]; <--------- Eu acho que esta linha não deveria esta comentada		$handle = fopen("arquivo.txt", "a+");		fwrite($handle, $dados);		fclose($handle);

Compartilhar este post


Link para o post
Compartilhar em outros sites

da o mesmo erro klaygomes, so que acrescenta um problema: uma mensagem dizendo caracteres inúteis, e acaba não mostrando nada na tela, no entanto o php grava no arquivo. so que grava com aquele problema de concatenação.eu comentei essa linha pra fazer um teste, aí troquei pela linha de cima pra ver o que acontecia, e o problema identificado foi que estava concatenando tudo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

descobri o erro pessoal,

 

é o seguinte:

 

$handle = fopen("arquivo.txt", "a+");
essa linha aí precisa ser assim:

 

$handle = fopen("arquivo.txt", "w+");
porque como eu já estava pegando todo o conteudo do arquivo e pondo em uma variavel, eu precisaria truncar o arquivo com "w+", já com "a+" eu apenas ponho o ponteiro no fim do arquivo o que vai logicamente, adicionando a variavel, que já tem todo o conteudo do arquivo, duplic

 

ar o conteudo do arquivo.

 

porém contudo eu tenho agora o seguinte problema:

 

<?xml version='1.0' encoding='UTF-8'?><dados>teste</dados><dados>teste</dados><dados>teste</dados>
o firefox diz que esse xml aí tem erro

 

olha a mensagem:

 

Erro no processamento de XML: caracteres inúteis após um elemento do documento

Posição: http://localhost/teste/dados.php

Número da linha 1, Coluna 59:

 

alguém poderia me ajudar nisso?

 

Obrigado desde já

Compartilhar este post


Link para o post
Compartilhar em outros sites

resolvido,

 

não sei porque mas fazendo assim funcionou:

 

<?xml version='1.0' encoding='UTF-8'?><tudo>	<dados>teste</dados>	<dados>teste</dados>	<dados>teste</dados>	<dados>teste</dados></tudo>

Obrigado pela ajuda pessoal :)

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.