Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #57 da revista programar. Faz já o download aqui!

QuadDamage

Formulário PHP para Editar outro PHP

Mensagens Recomendadas

QuadDamage    0
QuadDamage

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
QuadDamage    0
QuadDamage

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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
yoda    139
yoda

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>';

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
QuadDamage    0
QuadDamage

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!  ;)

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
softklin    12
softklin

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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
djthyrax    11
djthyrax

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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
softklin    12
softklin

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

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


×

Aviso Sobre Cookies

Ao usar este site você aceita a nossa Política de Privacidade