Jump to content

Formulário PHP para Editar outro PHP


QuadDamage

Recommended Posts

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

Link to comment
Share on other 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.

Link to comment
Share on other 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>';
Link to comment
Share on other 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!  😉

Link to comment
Share on other 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.

Nick antigo: softclean | Tens um projeto? | Wiki P@P

Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post.

Link to comment
Share on other 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.

Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum!

Link to comment
Share on other 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 😄

Nick antigo: softclean | Tens um projeto? | Wiki P@P

Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.