SimpleXML - Trabalhando com XML e PHP - Parte 2/2.

Muita gente esta me pedindo então vamos lá, vou mostrar como alterar arquivos XML da maneira mais simples possível.

$arquivo = fopen(”arquivo.xml”, “w+”);
Abre o arquivo para leitura e escrita se o arquivo já existir o arquivo vai ser apagado e criado um novo.

$xml = ‘< ?xml version="1.0" encoding="UTF-8"? >
< mensagem >Olá Mundo!!!< /mensagem >‘;
Agora você monta o seu XML da maneira que achar necessário.

fwrite($arquivo, $xml);
Escreve no arquivo tudo o que estiver na $XML.

fclose($arquivo);
Fecha o arquivo.

Simples não? Você lê o XML como eu mostrei aqui, e altera o XML como quiser, monte a estrutura do XML em uma variável e grave no arquivo.

Dúvidas? Deixe nos comentários!

SimpleXML - Trabalhando com XML e PHP - Parte 1/2

SimpleXML é mais uma das implementações feitas no PHP5 que quase ninguém conheçe, com ele é possível ler e editar arquivos XML de uma maneira muito simples.
Chega de blá blá blá vamos a um exemplo prático:

[code]
1 $arquivo = file_get_contents("http://maisregional.com.br/dolar.php");
2 $xml = simplexml_load_string($arquivo);
3
4 $dolar_compra = $xml->dolarcompra;
5 $dolar_venda = $xml->dolarvenda;
6
7 echo "Dolar Compra: R$ $dolar_compra
";
8 echo "Dolar Venda: R$ $dolar_venda";
[/code]

Aqui o XML gerado pelo Script php que fiz:
[code]

  • <?xml version="1.0" encoding="UTF-8"?>
  • <cotacao>
    • <dolarcompra>2,1252</dolarcompra>
    • <dolarvenda>2,1252</dolarvenda>
  • </cotacao>

[/code]

Vamos a explicação:
Linha 1: pego XML(fiz esse script para um cliente ele pega a cotação do dolar no site do banco central e cria um xml quem quiser usar sinta-se a vontade) e coloco todo o seu conteúdo na variável $arquivo
Linha 2: aqui começa a mágica, nesta linha o simplexml transforma o xml em objeto
Linha 4: coloca o valor da tag dolarcompra na variável $dolar_compra. Explicando melhor quando o XML é carregado no SimpleXML, seu apontador já é apontado para a linha na primeira tag do xml que no caso é cotacao, então seto $xml-> que vai apontar para o cotacao do XML, e depois seto dolarcompra seu valor é salvo na variavel

Viu como é simples?

Vamos a um exemplo mais complicado:

[code]
1 $arquivo = file_get_contents("http://www.xe.com/dfs/sample-usd.xml");
2 $xml = simplexml_load_string($arquivo);
3
4 for($i=1; $xml->currency[$i] ->cname != "Brazil Reais"; $i= $i + 1);
5
6 $cotacao_real = $xml->currency[$i] ->crate;
7
8 echo "Cotação do real em relação ao dollar: $cotacao_real";
[/code]

Veja o código do XML <a href="http://www.xe.com/dfs/sample-usd.xml" target="blank">aqui</a>

Explicação:
Linha 1: pego o XML e coloco o conteúdo dele na variavel arquivo
Linha 2: o simplexml transforma o XML em objeto
Linha 4: faço um for para varrer todo o XML a até que encontre no cname "Brazil Reais"
Linha 6: com a variável i definido na linha 4 eu coloco na variavel o valor da cotação do real

Facinho não é?

Para acabar com a primeira parte deste artigo só tenho que explicar como pegar valores que estão nas tags de auto fechamento como esta <nota valor="5" /> vamos lá então

Aqui vai o XML de exemplo:
[code]

  • <?xml version="1.0" encoding="UTF-8"?>
  • <escola>
    • <salas nome="1A">
      • <aluno>
        • <nome>Zehh</nome>
        • <nota valor="10" />
      • </aluno>
      • <aluno>
        • <nome>Tatiana</nome>
        • <nota valor="9" />
      • </aluno>

    • </salas>
    • <salas nome="1B">
      • <aluno>
        • <nome>João</nome>
        • <nota valor="3" />
      • </aluno>
      • <aluno>
        • <nome>Bruna</nome>
        • <nota valor="5" />
      • </aluno>
      • <aluno>
        • <nome>Bianca</nome>
        • <nota valor="8" />
      • </aluno>
    • </salas>
  • </escola>

[/code]

Como ficaria o PHP:
[code]
1 $arquivo = file_get_contents("http://garagemdaweb.com.br/arquivo.xml");
2 $xml = simplexml_load_string($arquivo);
3
4 $nome_sala1a = $xml->salas[0]["nome"];
5 $nome_aluno2_da_sala1a = $xml->salas[0]->aluno[1]->nome;
6 $nota_aluno2_da_sala1a = $xml->salas[0]->aluno[1]->nota["valor"];
7
8 echo "Sala 1: $nome_sala1a<br>";
9 echo "Nome do aluno 2 sala 1A: $nome_aluno2_da_sala1a<br>";
10 echo "Nota do aluno 2 da sala 1A: $nota_aluno2_da_sala1a<br>";
[/code]

Explicando…
Linha 4: Setei a sala 0, por que para o XML a primeira é identificada como 0 e pagamos o nome o resultado seria 1A
Linha 5: Setei a sala 0 e peguei o valor da tag nome do segundo aluno, como para o XML começa no zero
Linha 6: Setei a sala 0 o aluno 1 e peguei o valor que estava na tag de auto fechamento nota que no caso seria 9

Viu muito fácil trabalhar com o simplexml, logo logo postarei como alterar um arquivo XML.

Dúvidas? deixe seu comentário.

[UPDATE]
SimpleXML - Trabalhando com XML e PHP - Parte 2/2
[/UPDATE]

Dicas de segurança para o PHP

[update]Só esqueci de falar que depois que você usar a função anti_sql_injection() vocÊ tem que usar o stripslashes() pra tirar as barra invertidas é só fazer assim: echo stripslashes($nome); [/update]

Recentemente li alguns artigos que falavam sobre a baixa segurança do scripts PHP feitos por programadores iniciantes, aqui vai duas dicas que já deixaram seus scripts mais seguros:

- Desativar as variáveis globais, se ele estiver ativo é muito fácil burlar o seu script. Para desativar é só alterar a seguinte linha do php.ini(arquivo de configuração do PHP) register_globals =Off

- SQL Injection é outro grande problema, mas podemos resolve-lo assim:

function anti_sql_injection($sql){
$sql = preg_replace(sql_regcase(“/(from|select|insert|delete|where|drop table|show tables|#|\*|–|\\\\)/”),”",$sql);//remove toda a sintaxe SQL
$sql = trim($sql);//limpa os espaços em branco
$sql = strip_tags($sql);//remove todas as tags HTML e a sintaxe PHP
$sql = addslashes($sql);//insere barra invertida na string exemplo: Nome: “teste” ficaria Nome: \”teste\
return $sql;
}

Agora é só pegar os dados do POST/GET assim: $nome = anti_sql_injection($_POST[”nome”]);

Só isto não torna seu script 100% seguro, mas ajuda!

Se você conhece outra tecnica posta ai…