n31m4r 0 Denunciar post Postado Fevereiro 2, 2010 estou com problemas em criar os dados no nó principal do arquivo xml para uma base de dados em xml meu form.htm <table border="0" cellpadding="5" cellspacing="0" width="400"> <tbody> <tr> <td bgcolor="#ebebeb"> <p class="texto"><font color="#0066cc"> <form method="post" action="gravar.php"><br> <font><font color="#0066cc"><br> username: <input name="txt_user" type="text"><br> <br> </font></font><font><font color="#0066cc">senha: <input name="txt_senha" type="text"><br> <br> </font></font><font><font color="#0066cc">Nome: <input name="txt_nome" type="text"><br> <br> </font></font><font><font color="#0066cc">Sobrenome: <input name="txt_lastname" type="text"><br> <br> </font></font><font color="#0066cc"><font><font color="#0066cc"> Email: <input name="txt_email" type="text"><br> <br> </font></font></font><font color="#0066cc"><font><font color="#0066cc">Fone: <input name="txt_fone" type="text"></font></font></font><br> <br> <input name="btnOK" value="Gravar Dados" type="submit"><br> </form> meu gravar.php <?php //PEGA OS DADOS ENVIADOS PELO FORMULÁRIO $user = $_POST["txt_user"]; $senha = $_POST["txt_senha"]; $nome = $_POST["txt_nome"]; $lastname = $_POST["txt_lastname"]; $email = $_POST["txt_email"]; $fone = $_POST["txt_fone"]; //PREPARA O CONTEÚDO A SER GRAVADO $conteudo = "<dataroot><Tabela2> <Código>$user</Código> <Nome>$senha</Nome> <CRC_x002F_PR>$nome</CRC_x002F_PR> <Data_x0020_de_x0020_Nascimento>$lastname</Data_x0020_de_x0020_Nascimento> <Bolão>$email</Bolão> <Canastra>$fone</Canastra> </Tabela2></dataroot>"; //ARQUIVO TXT $arquivo = "Tabela2.xml"; //TENTA ABRIR O ARQUIVO TXT if (!$abrir = fopen($arquivo, "a")) { echo "Erro abrindo arquivo ($arquivo)"; exit; } //ESCREVE NO ARQUIVO TXT if (!fwrite($abrir, $conteudo)) { print "Erro escrevendo no arquivo ($arquivo)"; exit; } echo "Arquivo gravado com Sucesso !!"; //FECHA O ARQUIVO fclose($abrir); ?> meu tabela2.xml <?xml version="1.0" encoding="UTF-8"?> <dataroot xmlns:od="urn:schemas-microsoft-com:officedata" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="Tabela2.xsd" generated="2010-01-22T09:50:46"> <Tabela2> <Código>9</Código> <Nome>jghjhgjg</Nome> <CRC_x002F_PR>16484635</CRC_x002F_PR> <Data_x0020_de_x0020_Nascimento>2009-02-02T00:00:00</Data_x0020_de_x0020_Nascimento> <Bolão>0</Bolão> <Canastra>1</Canastra> </Tabela2></dataroot><dataroot><Tabela2> <Código></Código> <Nome></Nome> <CRC_x002F_PR></CRC_x002F_PR> <Data_x0020_de_x0020_Nascimento></Data_x0020_de_x0020_Nascimento> <Bolão></Bolão> <Canastra></Canastra> </Tabela2></dataroot><dataroot><Tabela2> <Código>txt</Código> <Nome>txt</Nome> <CRC_x002F_PR>txt</CRC_x002F_PR> <Data_x0020_de_x0020_Nascimento>txt</Data_x0020_de_x0020_Nascimento> <Bolão>txt</Bolão> <Canastra>txt</Canastra> </Tabela2></dataroot> como podem ver estou criando outro <dataroot></dataroot> porem isso não era para acontecer era para apagar o ultimo </dataroot> e só escrever no fim, ou seja era para os novos dados ficar no nó principal do <dataroot> e não precisar escrever <dataroot> novamente Compartilhar este post Link para o post Compartilhar em outros sites
Evandro Oliveira 331 Denunciar post Postado Fevereiro 2, 2010 pessoal confunde PHP com MySQL e XML com PHP ¬¬ O problema aí ta na parte de PHP não XML. A maneira mais correta seria manipular o "banco de dados" com um XMLParser. Maaas, já que tá fazendo em fopen, faça da seguinte maneira: -A variável $conteúdo não carregará <dataroot></dataroot>. Comece direto pelo <Tabela2> -Abra o arquivo xml para leitura+gravação (w+) -Jogue todo o conteúdo já existente dentro de uma variável $backup -Aplique uma função de substituição (sugiro preg_replace) na variável $backup e substitua --"<dataroot>" por "" --"</dataroot"> por $conteudo -Grave seu arquivo da seguinte maneira: --'<dataroot>'.$backup.'</dataroot>'; Compartilhar este post Link para o post Compartilhar em outros sites
RobertoPC 0 Denunciar post Postado Fevereiro 2, 2010 Você errou em muitas coisas, até no fórum escolhido. Confirmando o que foi dito. Você deveria utilizar um XMLParser para manipulação do xml, um bom exemplo é o SimpleXML. Nesse caso acontece desse jeito porque o arquivo é criado em base textual não havendo nenhuma interpretação dos comandos xml pelo php, ou seja, isso é puro texto. E no caso o seu documento xml também está escrito de maneira incorreta, deve observar que o xml possui regras para marcação, que não incluem acentuação e caixa alta. Compartilhar este post Link para o post Compartilhar em outros sites
Thiago Retondar 18 Denunciar post Postado Fevereiro 2, 2010 Tópico movido: Webstandards: CSS / XML / XHTML / HTML http://forum.imasters.com.br/public/style_emoticons/default/seta.gif PHP http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Compartilhar este post Link para o post Compartilhar em outros sites
João Batista Neto 448 Denunciar post Postado Fevereiro 3, 2010 E no caso o seu documento xml também está escrito de maneira incorreta, deve observar que o xml possui regras para marcação, que não incluem acentuação e caixa alta. Cuidado amigo, a única regra que existe no XML quanto a caixa é que o XML é sensível a elas, ou seja, <codigo> é diferente de <Codigo> que é diferente de <CODIGO>. Outro ponto é observar que na 5 edição da especificação do XML contém: 3.1 Start-Tags, End-Tags, and Empty-Element Tags [Definition: The beginning of every non-empty XML element is marked by a start-tag.] Start-tag [40] STag ::= '<' Name (S Attribute)* S? '>' [WFC: Unique Att Spec] [41] Attribute ::= Name Eq AttValue [você: Attribute Value Type] [WFC: No External Entity References] [WFC: No < in Attribute Values] A formação de um Name é Names and Tokens [4] NameStartChar ::= ":" | [A-Z] | "_" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF] [4a] NameChar ::= NameStartChar | "-" | "." | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040] [5] Name ::= NameStartChar (NameChar)* [6] Names ::= Name (#x20 Name)* [7] Nmtoken ::= (NameChar)+ [8] Nmtokens ::= Nmtoken (#x20 Nmtoken)* Se utilizarmos a expressão regular da especificação, veremos que <Código> é sim uma tag válida. Link para a especificação: Extensible Markup Language (XML) 1.0 (Fifth Edition) Compartilhar este post Link para o post Compartilhar em outros sites
n31m4r 0 Denunciar post Postado Fevereiro 3, 2010 antes de gravar o arquivo txt <?php //PEGA OS DADOS ENVIADOS PELO FORMULÁRIO $user = $_POST["txt_user"]; $senha = $_POST["txt_senha"]; $nome = $_POST["txt_nome"]; $lastname = $_POST["txt_lastname"]; $email = $_POST["txt_email"]; $fone = $_POST["txt_fone"]; //PREPARA O CONTEÚDO A SER GRAVADO $conteudo = " <Tabela2> <user>$user</user> <senha>$senha</senha> <nome>$nome</nome> <sobrenome>$lastname</sobrenome> <email>$email</email> <fone>$fone</fone> </Tabela2> </dataroot>"; // //ARQUIVO TXT $arquivo = "Tabela2.xml"; //TENTA ABRIR O ARQUIVO TXT if (!$abrir = fopen($arquivo, "a")) { echo "Erro abrindo arquivo ($arquivo)"; exit; } //ESCREVE NO ARQUIVO TXT if (!fwrite($abrir, $conteudo)) { print "Erro escrevendo no arquivo ($arquivo)"; exit; } echo "Arquivo gravado com Sucesso !!"; //FECHA O ARQUIVO fclose($abrir); ?> eu gostaria de apagar a ultima linha a linha: </dataroot>e apos apagar, executar o codigo escrito acima Compartilhar este post Link para o post Compartilhar em outros sites
Matias Rezende 50 Denunciar post Postado Fevereiro 3, 2010 n31m4r, seja bem vindo ao fórum. Para uma melhor participação, sugiro que leia o tópico de orientações para uma boa participação. Seus 2 tópicos foram unidos por tratarem do mesmo assunto. Carlos Eduardo Compartilhar este post Link para o post Compartilhar em outros sites
João Batista Neto 448 Denunciar post Postado Fevereiro 3, 2010 eu gostaria de apagar a ultima linha a linha: </dataroot> Amigo, veja só, esse procedimento é totalmente incorreto e só vai lhe trazer problemas, substitua seu código original pelo abaixo que resolverá seu problema: <?php $user = $_POST["txt_user"]; $senha = $_POST["txt_senha"]; $nome = $_POST["txt_nome"]; $lastname = $_POST["txt_lastname"]; $email = $_POST["txt_email"]; $fone = $_POST["txt_fone"]; $arquivo = "Tabela2.xml"; $dom = new DOMDocument(); $dom->preserveWhiteSpace = false; $dom->load( $arquivo ); $dom->formatOutput = true; $dataroot = $dom->getElementsByTagName( 'dataroot' )->item( 0 ); $dataroot->appendChild( $tabela2 = $dom->createElement( 'Tabela2' ) ); $tabela2->appendChild( $dom->createElement( 'Código' , $user ) ); $tabela2->appendChild( $dom->createElement( 'Nome' , $senha ) ); $tabela2->appendChild( $dom->createElement( 'CRC_x002F_PR' , $nome ) ); $tabela2->appendChild( $dom->createElement( 'Data_x0020_de_x0020_Nascimento' , $lastname ) ); $tabela2->appendChild( $dom->createElement( 'Bolão' , $email ) ); $tabela2->appendChild( $dom->createElement( 'Canastra' , $fone ) ); file_put_contents( $arquivo , $dom->saveXML() ); Compartilhar este post Link para o post Compartilhar em outros sites
n31m4r 0 Denunciar post Postado Fevereiro 3, 2010 Amigo, veja só, esse procedimento é totalmente incorreto e só vai lhe trazer problemas, substitua seu código original pelo abaixo que resolverá seu problema: esse é meu garoto, deu certo, caso resolvido Compartilhar este post Link para o post Compartilhar em outros sites