• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

QuadDamage

Formulário PHP para Editar outro PHP

11 mensagens neste tópico

Boa tarde a todos,

Esta é a minha primeira participação no fórum, contudo espero que seja duradoura dada a quantidade e qualidade da informação que por aqui circula.

Acontece que preciso de uma pequena ajuda, pois estou a bater com a cabeça nas paredes há já dois dias e ainda não consegui desembaraçar a situação.

Tenho um ficheiro PHP que abre uma tag XML com alguns campos para depois fechar essa mesma tag e enviar o resultado por curl para uma API que recebe esta mesma ordem em PHP. Mais concretamente, isto:

<?php
$xml = '<xmlrequest>
<username>admin</username>
<usertoken>********</usertoken>
<requesttype>user</requesttype>
<requestmethod>createnewuser</requestmethod>
<details>
<trialuser>1</trialuser>
<username>Administrator</username>
<password>password</password>
<fullname>Trial User</fullname>
<emailaddress>trial_user@somedomain.com</emailaddress>
<usertimezone>GMT+10</usertimezone>
<permissions>
<autoresponders>
<create>1</create>
<edit>1</edit>
<delete>1</delete>
<approve>1</approve>
</autoresponders>
<forms>
<create>1</create>
<edit>1</edit>
<delete>1</delete>
</forms>
<newsletters>
<create>1</create>
<edit>1</edit>
<delete>1</delete>
<approve>1</approve>
<send>1</send>
</newsletters>
<templates>
<create>1</create>
<edit>1</edit>
<delete>1</delete>
<approve>1</approve>
<import>1</import>
<global>1</global>
<builtin>1</builtin>
</templates>
<subscribers>
<manage>1</manage>
<add>1</add>
<edit>1</edit>
<delete>1</delete>
<import>1</import>
<export>1</export>
<banned>1</banned>
<eventsave>1</eventsave>
<eventdelete>1</eventdelete>
<eventupdate>1</eventupdate>
</subscribers>
<lists>
<create>1</create>
<edit>1</edit>
<delete>1</delete>
<bounce>1</bounce>
<bouncesettings>1</bouncesettings>
</lists>
<customfields>
<create>1</create>
<edit>1</edit>
<delete>1</delete>
</customfields>
<statistics>
<newsletter>1</newsletter>
<user>1</user>
<autoresponder>1</autoresponder>
<list>1</list>
<triggeremails>1</triggeremails>
</statistics>
<user>
<smtp>1</smtp>
<smtpcom>1</smtpcom>
</user>
<segments>
<view>1</view>
<create>1</create>
<edit>1</edit>
<delete>1</delete>
<send>1</send>
</segments>
<triggeremails>
<create>1</create>
<edit>1</edit>
<delete>1</delete>
<activate>1</activate>
</triggeremails>
</permissions>
</details>
</xmlrequest>
';  
   
$ch = curl_init('/localhost/xml.php');  
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);  
curl_setopt($ch, CURLOPT_POST, 1);  
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);  
$result = @curl_exec($ch);  
if($result === false) {  
     echo "Error performing request";  
}  
else {  
     $xml_doc = simplexml_load_string($result);  
     echo 'Status is ', $xml_doc->status, '<br/>';  
     if ($xml_doc->status == 'SUCCESS') {  
         echo 'Data is ', $xml_doc->data, '<br/>';  
     } else {  
         echo 'Error is ', $xml_doc->errormessage, '<br/>';  
     }  
}  
   
?>  

O código acima funciona plenamente se preenchido manualmente, ou seja, quando insiro as informações XML nas secções e corro o ficheiro directamente, ele faz o POST para o xml.php e depois a API dá-me o Success.

Agora o que eu queria era um formulário que no POST enviasse as informações para as tags XML deste ficheiro de modo a que sejam enviadas para o xml.php e para a API e não sei como o fazer, pois pelo que pesquisei os forms html apenas criam novos xml e não editam.

Obrigado desde já pela ajuda.

Cumprimentos

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Antes de mais bem vindo ;)

o que queres é uma espécie de base de dados?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Antes de mais bem vindo ;)

o que queres é uma espécie de base de dados?

Não, a comunicação com a base de dados funciona perfeitamente, aliás, todo o código do ficheiro acima está impecável, o que eu quero é um formulário que ao ser submetido edite as ordens XML acima, ou seja:

Ficheiro de formulário, imaginamos form.html

Formulário:

Username: João

Password: beterraba

Submit

<-envia a informação para os campos xml desse file, create_user.php ->

<?php

$xml = '<xmlrequest>

<username>João</username>

<password>beterraba</password>';

quando acaba de fazer o post é executado o comando do curl e é feito o envio do create_user.php para o xml.php, como já está indicado no código que coloquei.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas,

Qual a dúvida afinal? Basta criares um formulário e meter como action o ficheiro php que preenche os dados do xml e usa curl para enviar a informação para onde pretendes. É um formulário simples ..

Exemplo :

<?php
$xml = '<xmlrequest>
<username>'.$_POST['username'].'</username>
<password>'.$_POST['password'].'</password>';

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas,

Qual a dúvida afinal? Basta criares um formulário e meter como action o ficheiro php que preenche os dados do xml e usa curl para enviar a informação para onde pretendes. É um formulário simples ..

Exemplo :

<?php
$xml = '<xmlrequest>
<username>'.$_POST['username'].'</username>
<password>'.$_POST['password'].'</password>';

Ora era aqui mesmo que queria chegar, desconhecia se podia ou não puxar uma ordem PHP dentro do XML, eu tentei isso mas foi com o $_GET, tenho que estudar mais XML!

Obrigado, já funciona!  ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ora era aqui mesmo que queria chegar, desconhecia se podia ou não puxar uma ordem PHP dentro do XML, eu tentei isso mas foi com o $_GET, tenho que estudar mais XML!

Estavas a usar $_GET, mas esse apenas serve para dados enviados pelo método GET. Mas como tu próprio disseste, estavas a enviar os dados por POST, logo deverias usar o $_POST, tal como o Yoda já te indicou no exemplo.

Outra nota que gostava de te indicar é o cuidado com o input de utilizadores, que pode alterar o output de XML. Dá uma leitura sobre a função de PHP htmlentities.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tás a tentar dizer que vou ter problemas com os Parâmetros dos Caracteres? até agora não encontrei problemas...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Parâmetros dos Caracteres?

Outra nota que gostava de te indicar é o cuidado com o input de utilizadores, que pode alterar o output de XML. Dá uma leitura sobre a função de PHP htmlentities.

Usar CDATA é mais simples.
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não me expliquei, o que queria dizer era que um utilizador mal intencionado pode alterar o teu XML. Pegando no exemplo do Yoda, que deve ser mais ou menos como estás a fazer:

<?php
$xml = '<xmlrequest>
<username>'.$_POST['username'].'</username>
<password>'.$_POST['password'].'</password>';

O username pode ser algo do género "qqcoisa</username><token>blasblbaslbla</token>", ou seja, fica algo como:

<username>qqcoisa</username><token>blasblbaslbla</token><username>myrealuser</username>

Se usares CData, acho que pior caso que pode acontecer é gerar um ficheiro inválido (o utilizador pode abrir a tag de fecho e escrever os conteúdos), situação que está prevenida lá em baixo com aquele if.

De qualquer das maneiras acho que isso não te vai afectar porque, talvez por sorte, fizeste a declaração do username e password em cima do ficheiro, logo qualquer coisa que o utilizador tentasse fazer, iria ser "redeclarado" em baixo pelo conteúdo que já tens no ficheiro (acho que o XML funciona assim, mas é melhor confirmar).

Só agora reparei que estamos a falar de assuntos diferentes, penso eu, eu estava a referir-me a injecção de código. Mas pronto, ambos os problemas são válidos :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora