Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [HTML][JavaScript][XML]Przesyłanie XML metoda POST
Forum PHP.pl > Forum > Przedszkole
Wolfie
Witam


Nie wiem czy pisze w dobrym dziale ale chodzi o przesylanie XML metoda post na inny serwer.
Wiem jak dziala metoda post , znam podstawy javascript i html ale nie mialem nigdy do czynienia z xml.

Czy ktos mi moze z grubsza wytlumaczyc jak przesyla sie xml-a na inny serwer?

Dokladniej chodzi o weryfikacje numerow ktore znajduja sie na innym serwerze. Po przeslaniu danych : powiedzmy imienia i kodu przypisanego do imienia serwer na ktory jest wysylany owy xml odpowie potwierdzeniem czy istnieje taki uzytkownik/kod czy nie.

Prosze o wspazowki
wookieb
Nie robi się tego w javascript.
Robisz to w php.
Do wysyłania służy curl.
Do parsowania xmla masz sporo bibliotek. Wystarczy poszukac na php.net.
Wolfie
A moglbys mi napisac przyklad jak moznaby przeslac np taki plik xml :


<?xml version="1.0" encoding="UTF-8"?>
<zapytanie>
<id>5346</id>
<imie>500500500</imie>
<kod>589HG3P</kod>
</zapytanie>


I jeszcze takie pytanko , czy protokoly obu serwerow musza byc takie same aby mogly przeslac xml miedzy soba ?
wookieb
Nie nie mógłbym.
http://wortal.php.pl/phppl/wortal/artykuly...rzez_formularze
No a jak chcesz przesłać? Jako plik czy jako tekst POST-em. Nie sprecyzowałeś.

A nie sadzisz ze bedziesz wysyłał http-em?
Wolfie
Mysle ze http ale za bardzo nie znam sie na wspolpracy ze soba serwerow.
Chce przeslac jako teks POST-em poniewaz dane musza byc zakodowane
wookieb
No to wejdz sobie chłopcze na http://php.net/curl_set_opt i tam jest pokazane jak wyslac cos postem. Jezeli wrocisz tutaj z pytaniem "jak to zrobić" to nie licz na odpowiedz. Pisze jak wół.
Wolfie
Ale mnie nie chodzi o przepisywanie kodu od kogos , slabo sie znam na php i taka dokumentacja mialo mi mowi.
Poprostu chcialbym aby ktos wytlumaczyl mi to z grubsza w bardziej przystepny sposob.

A co do linkow ktore przeslales to dzieki , moze cos uda mi sie z tego wypocic.

I jeszcze jedna sprawa.

W zasadzie nie wiem czy mam przeslylac plik czy tekst , poniewaz aplikacja ma wygladac tak ze uzytkownik bedzie podawal imie i kod , nastepnie to bedzie przesylane na serwer i tam weryfikowane a nie mam pojecia ktora metoda jest lepsza.
Poprostu chce przeslac xml na serwer! sciana.gif
wookieb
Tlumacze ci z grubsza. Curl wysyła na podana przez ciebie strone xmla metoda POST. Tak jakbyś wpisal to w pole tekstowe formularza i wysłał. Co chcesz jeszcze wiedzieć.

Przeciez to proste jak kij od szczotki. Czego tutaj nie rozumiesz?
Parsowania xml? No niestety kolego. My programiści najpierw się uczymy, czytamy kursy, testujemy, szukamy w internecie rozwiazan dlaczego dana rzecz nam nie działa (to nie znaczy ze piszemy na forach z kazda rzecza) a dopiero potem pytamy o rzeczy których NAPRAWDE nie rozumiemy.
Masz podany najprostszy KOD jak wyslac dane POST-em
Kod
$ch = curl_init();

$data = array('name' => 'Foo', 'file' => 'DANE');

curl_setopt($ch, CURLOPT_URL, 'http://localhost/strona.php');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

curl_exec($ch);
Wolfie
Ok. Dzieki za cierpliwosc. Dzisiaj bede nad tym siedzial testowal i programowal.
Licze ze sie uda napisac to do jutra do poludnia, jezeli nie, zglosze sie pewnie z bardziej skonkretyzowanymi problemami


Dzieki

Ok. Napisalem ponizszy skrypt :

Kod
<?php
$ch = curl_init('http://localhost:81/cUrl/test.xml');
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_NOBODY, 1);

//$data = array('name' => 'Foo', 'file' => 'DANE');

curl_setopt($ch, CURLOPT_URL, 'http://localhost:81/cUrl/test.xml');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

//curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_exec($ch);
if (curl_errno($ch)) {
    echo 'Błąd #' . curl_errno($ch) . ': ' . curl_error($ch);
}

curl_close($ch);
?>



ktory korzysta z nastepujacego pliku xml o nazwie test.xml:

Kod
<?xml version="1.0" encoding="UTF-8"?>
<zapytanie>
<id>7658</id>
<imie>Piotr</imie>
<kod>6JN47CLU</kod>
</zapytanie>


Teraz mam problem w czym "zamknac" ten plik xml. Tzn czy on ma sie przesylac jako tablica czy jako tekst?
Jak to mniej wiecej ma wygladac ?
wookieb
Nie umiesz czytać... matury to ty raczej nie zdasz.
Kod
$data = array('xml' => file_get_contents('test.xml'));

curl_setopt($ch, CURLOPT_URL, 'ADRES SERWERA NA KTORY WYSYŁASZ A NIE XML');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
Wolfie
Super. Teraz wszystko swietnie działa! smile.gif
a teraz takie male kolejne pytanko.
Jak zrobic zebym mogl z formularza zapisac pliki do xml-a?
Chodzi o to ze ten przesylany xml bedzie mial rozna tresc w zaleznosci co wpisze uzytkownik.
Jak rozwiazac taki problem?

Czy mozna xml zapisac jako plik php i przesylac do niego dane metoda np $_GET z formularza ?
wookieb
http://php.net/file_put_contents
Wolfie
Napisalem sobie taki kodzik :

Kod
<?php

//echo $_GET['kod'];
//echo $_GET['telefon'];

//$target_file = "test.xml";

function file_put_contents('test.xml', 'hello world, Testing!');

?>


ale niestety wyskakuje blad :

Kod
syntax error, unexpected T_CONSTANT_ENCAPSED_STRING, expecting ')'



i nie mam pojecia skad on sie bierze , kod wyglada na prawidlowy
ziqzaq
Chłopie popatrz na swój kod.
Co chcesz osiągnąć?
_Zadeklarować_ funkcję "file_put_contents" z dwoma parametrami, czy ją _wywołać_?
  1. <?php
  2. // Zadeklarowanie funkcji moja_funkcja
  3. function moja_funkcja($parametr) {
  4.    echo $parametr;
  5. }
  6.  
  7. // Wywołanie funkcji
  8. moja_funkcja("Podstawy PHP");
  9. ?>

Zdaję sobie sprawę, że można czegoś nie wiedzieć, ale dostałeś link do file_put_contents a tam są _przykłady_ użycia tej funkcji.

edit: tfu nie deklaracja tylko definicja funkcji
Wolfie
Oczywiscie ze chce wywolac funkcje:

Jednak gdy robie

Kod
file_put_contents('test.xml', 'hello world, Testing!');




wyskakuje cos takiego

Kod
Call to undefined function:  file_put_contents()
ziqzaq
Sorry, ale sądząc po twoim kodzie to nie było takie oczywiste.
1). Funkcje w PHP
2). Polecam czytać treść błędów. Np. "Call to undefined function: file_put_contents()" znaczy że funkcja "file_put_contents" jest niezdefiniowana. A więc google i - w moim przypadku - drugi link z odpowiedzią (pewnie w manualu do którego dostałeś link też to jest):
  1. <?php
  2.  if(!function_exists('file_put_contents')) {
  3.    function file_put_contents($filename, $data, $file_append = false) {
  4.      $fp = fopen($filename, (!$file_append ? 'w+' : 'a+'));
  5.        if(!$fp) {
  6.          trigger_error('file_put_contents cannot write in file.', E_USER_ERROR);
  7.          return;
  8.        }
  9.      fputs($fp, $data);
  10.      fclose($fp);
  11.    }
  12.  }
  13. ?>
Wolfie
Wszystko pieknie tylko ze dlatego pisze w "przedszkolu" bo za bardzo sie nie orientuje jak ten kod dziala, patrzac na manuala malo z tego rozumiem, a Wy jeszcze mnie dobijacie ze matury nie zdam.
Jakbym umial czytac dokumentacje tak jak Wy to wogole bym sie tutaj nie pojawial.
wookieb
Tzn ze nie masz php5. A do zapisania zawartosci do pliku sluzy wtedy http://php.net/fwrite
Wolfie
Napisalem taki kod :

Kod
<?php

$code = $_GET['kod'];
$tel =  $_GET['telefon'];

$filename = 'test.xml';
$data = 'Hello world, Test!';
$file_path = ".;c:\Program Files\WebServ\cUrl";

//file_put_contents('test.xml', 'hello world, Testing!');
if(!function_exists('file_put_contents')) {
    function file_put_contents($filename, $data, $file_append = false) {
      $fp = fopen($filename, (!$file_append ? 'w+' : 'a+'));
        if(!$fp) {
          trigger_error('file_put_contents cannot write in file.', E_USER_ERROR);
          return;
        }
      fwrite($fp, $data);
      fclose($fp);
    }
  }


?>



Ale w pliku docelowym test.xml nic sie nie pojawia, sa tylko stare znaczniki i wartosci.
wookieb
jak ma się pojawić jak zakomentowałes wywołanie funkcji file_put_contents. Wez do ręki pierwszy lepszy kurs php. Przeczytaj go porządnie i dopiero wróć.
ziqzaq
Podałem ci tylko definicję funkcji, wkleiłeś ją, ale nie wywołałeś jej (nie dałem ci gotowca).
Czytałeś manual php o funkcjach? Po to ci go podałem żebyś się czegoś nauczył.

BTW. wookieb podał lepsze rozwiązanie bo nie musisz definiować nowej funkcji tylko użyć już wbudowaną. Fenks wookieb.

Acha i nikt nie chce cię tu dobijać, ale przydałoby się trochę więcej samodzielności z Twojej strony.
Wolfie
Wywołanie funkcji jak widac znajduje sie nizej.


OK Panowie dzieki za pomoc , wszystko udalo sie zronbic.

Teraz musze jeszcze tylko zapisac xml-a zwrotnego z serwera do ktorego wysylalem swojego xml-a
.
wookieb
nie nie znajduje się. Przeczytaj kurs php i dopiero wróć. Bo masz bardzo szczątkowe podstawy a my nie przepisujemy kursów tylko pomagamy w prawdziwych problemach.
Wolfie
Ok.
Tak jak napisalem wyzej wszystko jest ok. Dzieki !
Teraz musze zapisac zwrotnego xml-a

Gdzie moge znalezc informacje na ten temat ? smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.