Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [XML][PHP]WSDL i NuSOAP
Forum PHP.pl > Forum > Przedszkole
ilidir
Witam mam problem z ogarnięciem myślę że trywialnej sprawy ;/

  1. $serwer->wsdl->addComplexType(
  2. 'WorkerObject',
  3. 'complexType',
  4. 'struct',
  5. 'all',
  6. '',
  7. array('Id' => array('name'=>'Id', 'type'=>'xsd:int'),
  8. 'Name' => array('name'=>'Name','type'=>'xsd:string'),
  9. 'Surname' => array('name'=>'Surname','type'=>'xsd:string')
  10. )
  11. );
  12.  
  13. $serwer->register('test_dodanie',
  14.  
  15. array('who'=>'tns:WorkerObject'),
  16.  
  17.  
  18. array('return'=>'xsd:varchar'),
  19.  
  20. $ns,
  21.  
  22. false,
  23.  
  24. 'rpc',
  25.  
  26. 'encoded',
  27.  
  28. 'Opisowy test dodanie');
  29.  
  30.  
  31. function test_dodanie($WorkerObject) {
  32. foreach($WorkerObject[Id] as $Id){
  33. mysql_query("INSERT INTO test(test) VALUES ('$Id')");
  34. }


Zapytaniem do WSDL-a tworze 2 rekordy w tablicy i je wysyłam Problemjest w tym że nie wiem w jaki sposób dodać oba te rekordy do bazy danych Z dodaniem pojedynczego nie mam żadnego problemu az wieloma już sobie nie radze sad.gif

pozdrawiam
Randallmaster
  1. foreach($WorkerObject[Id] as $key => $Id){

dodaj $key

i w foreach stwórz 2 ciągi: nazwy kolumn i wartości.
i wrzuć to w zapytanie

takie coś musisz osiągnąć:
$columns = '(name, surname)';
$values = '(1,2)';

docelowo musi wyjść tak:
insert into nazwa_tabeli (name, surname) values (1,2)
ilidir
Zrobiłem coś takiego:

function test_dodanie($WorkerObject) {
foreach($WorkerObject[Id] as $key=>$Id){
for ($i=0; $i<count($Id); $i++){
mysql_query("INSERT INTO test(test) VALUES ('$Id[$i]')");
}
}

Ale nadal nic sad.gif
Randallmaster
Zapis do bazy danych musi być poza pętlą.

  1. $columns = '';
  2. $values = '';
  3. foreach($WorkerObject[Id] as $key=>$Id){
  4. $columns .= $key;
  5. $values .= $Id;
  6. }
  7.  
  8. mysql_query("INSERT INTO nazwa_tabeli ($columns) VALUES ($values)");


To nie jest gotowiec smile.gif w $columns musisz dodać jeszcze odpowiednio przecinki smile.gif
ilidir
Ale jak będe miał 10 rekordów to wydaje mi się że zapis do bazy powinien być w pętli bo teraz w przykładzie który podałeś przypisuje dane do 2 zmiennych i potem je wstawiam do bazy i kończy się funkcja. A ja bede przyjmował duże ilości danych smile.gif Chyba że znacie inny skuteczniejszy sposób na mają zagwostkę smile.gif


Na przykład takie dane:
  1. $testt = Array(
  2. 'Id' => array(100, 20, 50, 1000),
  3. 'Name' => array('Test1', 'Test2', 'Test3', 'Test4'),
  4. 'Surname' => array('Sur1', 'Sur2', 'Sur3', 'Sur4')
  5. );


i teraz na przykład INSERT test(id,name,surname) VALUES ($Id,$Name,$Surname)
Randallmaster
No to robisz mniej więcej tym samym sposobem tylko $values doprowadzasz do takiej formy (jan,kowalski),(ania,kowalska),(staś,kowalski) itd.

Nie jestem zwolennikiem gotowców, ale widzę że nie chcesz mnie posłuchać.

  1. $test = Array(
  2. 'Id' => array(100, 20, 50, 1000),
  3. 'Name' => array('Test1', 'Test2', 'Test3', 'Test4'),
  4. 'Surname' => array('Sur1', 'Sur2', 'Sur3', 'Sur4')
  5. );
  6. $columns = '';
  7. $values = '';
  8. $i = 0;
  9. foreach($test as $key => $r){
  10. if($i > 0) $sep = ','; else $sep = '';
  11. $columns .= $sep.$key;
  12. $values .= $sep.'(';
  13. $i2 = 0;
  14. foreach($r as $r2){
  15. if($i2 > 0) $sep2 = ','; else $sep2 = '';
  16. $values .= $sep2.$r2;
  17. $i2++;
  18. }
  19. $values .= ')';
  20. $i++;
  21. }
  22. echo 'insert into nazwa_tabeli (' . $columns . ') values '. $values;
ilidir
na tąchwile nie działa to taj jak bym chciał mam inne pytanie może mi to coś rozjaśni smile.gif

mam coś takiego.

  1. $serwer->wsdl->addComplexType(
  2. 'tablica',
  3. 'complexType',
  4. 'array',
  5. 'all',
  6. '',
  7. 'login' => array('name'=>'login','type'=>'xsd:array'),
  8. 'grupa' => array('name'=>'grupa','type'=>'xsd:array')
  9. )
  10. );
  11.  
  12. $serwer->register('inny',
  13.  
  14. array('input'=>'xsd:varchar'),
  15.  
  16. array('return'=>'tns:tablica'),
  17.  
  18. $ns,
  19.  
  20. false,
  21.  
  22. 'rpc',
  23.  
  24. 'encoded',
  25.  
  26. 'Opisowy test odpowiedz');
  27.  
  28.  
  29.  
  30. function inny(){
  31. $tab = array();
  32. $result = mysql_query("SELECT * FROM temp")
  33. or die('<p class="blad">Wystąpił błąd podczas pobierania wpisów z bazy.</p>');
  34. while ($row = mysql_fetch_array($result,MYSQL_ASSOC)) {
  35. $elogin = $row['login'];
  36. $egrupa = $row['grupa'];
  37. $tab['login'] = $elogin;
  38. $tab['grupa'] = $egrupa;
  39. }
  40. return $tab;
  41. }


i zwraca mi coś takiego ;/

Array
(
[login] => Array
(
)

[grupa] => Array
(
)

)

Kod tutaj zawarty poprawiłem idziała jeżeliktoś będzie potrzebował smile.gif

wracając do tematu tabel i pomocy Randala smile.gif

dostaje coś takiego teraz insert into nazwa_tabeli (Id,Name,Surname) values (100,20,50,1000),(Test1,Test2,Test3,Test4),(Sur1,Sur2,Sur3,Sur4)

nie można tak zbudować foreach-ow żeby odpytywać te tablice i mieć kontrole co i w jakim miejscu jest tworzone questionmark.gifquestionmark.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.