Artigos & Ideias

Guardar $_POST PHP como XML

Escrito por:

Um dos principais objectivos ao criar formulários PHP é mantê-los seguros e protegidos contra spammers e programas automatizados. Com a quantidade de spam que o Akismet detém todos os dias, não preciso de vos lembrar sobre a importância de manter os formulários seguros. Uma vez que  90 e muitos % dos meus formulários são via POST, já despendi algum tempo a desenvolver algumas protecções e formas de debug.

Uma função que costumo utilizar para manter o controlo dos formulários POST é a minha função imprimir_xml(). A função recebe um array de dados (no meu caso, $ _POST), percorrendo todos os valores e transforma cada valor no formato XML, a partir do qual, posso guardar o XML num ficheiro ou colocar o XML numa Base de Dados.

A função pode ser usada em qualquer array ($ _SESSION e $ _GET, que também são boas opções!).

Código PHP

/* imprimir o conteúdo de uma url */
function imprimir_xml($arr, $wrapper = 'dados', $ciclo = 1)
{
	//variáveis úteis
	$break = "\n";

	//construir o conteudo
	if($ciclo == 1)
	{
		$output = '<?xml version="1.0" encoding="UTF-8" ?>'.$break;
	}

	$output.= tabelar_dados($ciclo - 1).'<'.$wrapper.'>'.$break;

	foreach($arr as $key => $valor)
	{
		if(!is_array($valor))
		{
			$output.= tabelar_dados($ciclo).'<'.htmlspecialchars($key).'>'.$valor.'</'.htmlspecialchars($key).'>'.$break;
		}
		else
		{
			$output.= imprimir_xml($valor,$key,$ciclo + 1).$break;
		}
	}

	$output.= tabelar_dados($ciclo - 1).'</'.$wrapper.'>';

	//retornar o output
	return $output;
}

/* Tabelar os dados */
function tabelar_dados($numero_tabelas)
{
	for($x = 1; $x <= $numero_tabelas; $x++)
	{
		$return.= "\t";
	}

	return $return;
}

De notar que esta função é usada de forma recursiva quando a informação é um array.

Como Usar

$_POST = array(
				'primeiro_nome'=>'Carlos',
				'ultimo_nome'=>'Gonçalves',
				'site_url'=>'http://cgoncalves.com',
				'linguagens_programacao'=>array('python','php','c#','asp'),
				'titulo'=>'Web Developer'
			);
echo imprimir_xml($_POST);

O Resultado

<?xml version="1.0" encoding="UTF-8">
<data>
	<primeiro_nome>Carlos</primeiro_nome>
	<ultimo_nome>Gonçalves</ultimo_nome>
	<site_url>http://cgoncalves.com</site_url>
	<linguagens_programacao>
		<0>python</0>
		<1>php</1>
		<2>c#</2>
		<3>asp</3>
	</linguagens_programacao>
	<titulo>Web Developer</titulo>
</data>
Actualmente, utilizo este script para gerar o XML que coloco num ficheiro, desta forma, posso fazer uma análise e gerar relatórios, ou simplesmente ajudar-me a fazer debug aos GET e POST.
Experimenta, e diz-me o que tu achas!

7


Sobre o Autor

Carlos Gonçalves é um Freelancer com bastante experiência em linguagens de programação e webdesign. Vocacionado para as novas tecnologias, aposta na qualidade dos serviços, atendimento rápido e sempre disponível para melhor satisfazer os seus clientes. Autor do site cgoncalves.com

Comentários

  1. João Pedro Pereira  27 Agosto 2010

    Gostei muito desta função, pode de facto tornar-se extremamente útil em questões de debug e logging ! Aliás estou a pensar implementá-la num projecto !

    (responder)
    • Carlos Gonçalves  27 Agosto 2010

      Também a costumo usar muito, como disse é bastante útil para debug, e para gerar relatórios é muito boa também.
      Depois deixa aqui o teu feedback quando a implementares no teu projecto.

      (responder)
  2. Alex Leandro Rosa  14 Setembro 2011

    Fantástica tua função, porém tem alguns errinhos, banais, mas vale consertar!! Na linha 19 deveria estar $ciclo, mas está $cuclo, e na linha 36, deveria estar $x++ dentro do for.
    Obrigado!!

    (responder)
    • Carlos Gonçalves  14 Setembro 2011

      Obrigado pelo reparo, o primeiro foi erro de digitação, o segundo foi lapso.
      Mas ainda bem que gostou da função, realmente é bastante útil :)
      Qualquer dúvida disponha.

      (responder)
  3. Pablo  5 Janeiro 2012

    Boa tarde,

    Após efetuar uma query a base de dados mysql, teria como gerar um ficheiro PDF para relatórios, incluindo os campos do resultado da query sem auxilio de bibliotecas?

    Desde já o meu obrigado.

    (responder)

Comentar

Nota: A moderação de comentários está activada e pode atrasar o teu comentário. Não há necessidade de reenviares o teu comentário.

  1. Carlos Gonçalves  Agosto 23, 2010
  2. João Pedro Pereira  Agosto 27, 2010
More in Outros (1 of 12 articles)

# #