Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP][XML]Dane z pliku xml do bazy danych mysql
Forum PHP.pl > Forum > Przedszkole
maniek2512
Witam, mam problem z przesłaniem danych z xml do mysql. Otóż mam w bazie danych mysql tabele Puchar 1, Puchar 2 (...) Puchar 5. Mam również plik xml, który podam niżej i chciałbym aby dane z tego xml'a były przesłane do mysql.

Plik xml:
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <list>
  3. <Puchar p="1" tak="1"></Puchar>
  4. <Puchar p="2" tak="0"></Puchar>
  5. <Puchar p="3" tak="0"></Puchar>
  6. <Puchar p="4" tak="1"></Puchar>
  7. <Puchar p="5" tak="1"></Puchar>
  8. <Puchar p="6" tak="0"></Puchar>
  9. </list>


To co do tej pory zrobiłem:

  1. <?php
  2. db_connect();
  3. check_login();
  4. $user_data = get_user_data($_SESSION['id']);
  5.  
  6. $nick = $user_data['login'];
  7.  
  8. $d = simplexml_load_file('statystyki/12345/Puchary.xml');
  9.  
  10.  
  11. foreach ($d->Puchar as $p) {
  12.  
  13. foreach ($p->attributes() as $tak) {
  14.  
  15. }
  16.  
  17.  
  18. $zapytanie = "INSERT INTO `Puchar $p` (`nick`, `tak`) VALUES ('$nick', '$tak')";
  19. $idzapytania = mysql_query($zapytanie);
  20.  
  21. $zapytanie2 = "UPDATE `Puchar $p` SET `tak` = '$tak' WHERE `nick`='$nick'";
  22. $idzapytania2 = mysql_query($zapytanie2);
  23.  
  24. echo $zapytanie;
  25. echo $zapytanie2;
  26. }
  27.  
  28. ?>



Co nie działa?
"UPDATE `Puchar $p`"
Miałem sporą przerwę i nie mogę sobie z tym poradzić. Zdaję sobie sprawę, że nie powinno to być zbyt trudne lecz może ktoś z Was będzie umiał mi pomóc, nakierować mnie gdzie jest błąd.

Z góry dziękuję
CuteOne
Klamra znajduje się przed zapytaniem, a powinna za nim
maniek2512
Już to próbowałem lecz również nie działa..
Zapytanie wtedy wygląda tak:
  1. INSERT INTO `Puchar ` (`nick`, `tak`) VALUES ('Maniek2512', '1')

a powinno być tak:

  1. INSERT INTO `Puchar 1` (`nick`, `tak`) VALUES ('Maniek2512', '1')
nospor
var_dump($p);
a moze doznasz olsnienia...
Turson
Pokaż może jak poprawiles
maniek2512
@Turson Zrobiłem tak:

  1. <?php
  2. db_connect();
  3. check_login();
  4. $user_data = get_user_data($_SESSION['id']);
  5.  
  6. $nick = $user_data['login'];
  7.  
  8. $d = simplexml_load_file('statystyki/12345/Puchary.xml');
  9.  
  10.  
  11. foreach ($d->Puchar as $p) {
  12.  
  13. foreach ($p->attributes() as $tak) {
  14.  
  15.  
  16.  
  17.  
  18. $zapytanie = "INSERT INTO `Puchar $p` (`nick`, `tak`) VALUES ('$nick', '$tak')";
  19. $idzapytania = mysql_query($zapytanie);
  20.  
  21. $zapytanie2 = "UPDATE `Puchar $p` SET `tak` = '$tak' WHERE `nick`='$nick'";
  22. $idzapytania2 = mysql_query($zapytanie2);
  23.  
  24. echo $zapytanie;
  25. echo $zapytanie2;
  26. }}
  27.  
  28. ?>


@nospor z tego co widzę to zarówno $p jak i $tak to string
Turson
A po czym widzisz? Przed np. $zapytanie zrób var_dump($p); bo podejrzewam, że to jednak obiekt i trzeba zrzutować na stringa
nospor
Cytat
@nospor z tego co widzę to zarówno $p jak i $tak to string
Mission impossible 15.... Jak bys zrobil var_dump jak ci kazalem, to bys mial czarno na bialym napisane co to jest...
maniek2512
Robiłem var_dump tak jak napisałeś.
Teraz zrobiłem przed zapytaniem (w sumie wcześniej też tak robiłem).

Wynik:

  1. &#65279; object(SimpleXMLElement)#6 (1) { ["@attributes"]=> array(2) { ["p"]=> string(1) "1" ["tak"]=> string(1) "1" } }


(oczywiście jest tegoo więcej lecz zmieniają się tylko wartości liczbowe)
nospor
No i wyraznie masz napisane, ze jest to object(SimpleXMLElement) a nie zaden string.

Kolejny blad jaki robisz, to dobieranie sie do zmiennej $p ze jakoby ma ona miec wartosci 1,2,3,4.... guzik prawda. To atrybut P ma takie wartosci.
Tak wiec petla po atrybutach jest totalnie bezsensu. Juz w pierwszej petli, majac $p, masz z niej pobrac atrybut P oraz atrybut TAK - bez stosowania dodatkowej petli
maniek2512
Sorki, że tak późno.
Poradziłem sobie z tym, że zmieniłem trochę strukturę xml'a.

Dzięki wielkie za nakierowanie mnie na to:)

Gdyby ktoś potrzebował:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <data>
  3. <Puchar p="1">
  4. <tak>1</tak>
  5. </Puchar>
  6. <Puchar p="2">
  7. <tak>0</tak>
  8. </Puchar>
  9. <Puchar p="3">
  10. <tak>1</tak>
  11. </Puchar>
  12. <Puchar p="4">
  13. <tak>0</tak>
  14. </Puchar>
  15. <Puchar p="5">
  16. <tak>1</tak>
  17. </Puchar>
  18. <Puchar p="6">
  19. <tak>0</tak>
  20. </Puchar>
  21. </data>



  1. <?php
  2. db_connect();
  3. check_login();
  4. $user_data = get_user_data($_SESSION['id']);
  5.  
  6. $nick = $user_data['login'];
  7.  
  8.  
  9. $d = simplexml_load_file('statystyki/12345/Puchary.xml');
  10. foreach ($d->children() as $node) {
  11. $arr = $node->attributes(); // zwraca tablice
  12. $p= $arr["p"]; // pobiera wartosc
  13. $tak= $node->tak;
  14.  
  15.  
  16. $zapytanie2 = "INSERT INTO `Puchar $p` (`nick`, `tak`) VALUES ('$nick', '$tak')";
  17. $idzapytania2 = mysql_query($zapytanie2);
  18.  
  19. $zapytanie3 = "UPDATE `Puchar $p` SET `tak` = '$tak' WHERE `nick`='$nick'";
  20. $idzapytania3 = mysql_query($zapytanie3);
  21.  
  22.  
  23. }
  24.  
  25. ?>
nospor
Po co zmieniales te strukture?
Skoro teraz pobierasz atrybut P tak:
$p= $arr["p"];
To dokladnie tak samo miales pobierac atrybut TAK w starej strukturze
$tak= $arr["tak"];

Bezsensowną zmiane zrobiles zamiast chwilke pomyslec nad tym co masz.

Kolejną niepoprawną rzeczą jest to:
$zapytanie2 = "INSERT INTO `Puchar $p` (`nick`, `tak`) VALUES ('$nick', '$tak')";
$idzapytania2 = mysql_query($zapytanie2);
$zapytanie3 = "UPDATE `Puchar $p` SET `tak` = '$tak' WHERE `nick`='$nick'";
$idzapytania3 = mysql_query($zapytanie3);

Ma byc jedno zapytanie o skladni INSERT....ON DUPLICATE KEY - patrz manual mysql
maniek2512
Witam, przepraszam, że dopiero teraz odpowiadam- sprawy osobiste.

Czy taki zapis jest prawidłowy?

  1. <?php
  2. $zapytanie = "INSERT INTO `Multi Rekord` (`nick`, `punkty`, `czas`) VALUES ('$nick', '$Punkty', '$czas')
  3. ON DUPLICATE KEY UPDATE `punkty`='$Punkty', `czas`='$czas'";
  4. $idzapytania = mysql_query($zapytanie);
  5. ?>



  1. <?php
  2. $zapytanie = "INSERT INTO `Puchar $p` (`nick`, `tak`) VALUES ('$nick', '$tak')
  3. ON DUPLICATE KEY UPDATE `tak`='$tak'";
  4. $idzapytania = mysql_query($zapytanie);
  5. ?>
nospor
A dziala? To tak, jest poprawne smile.gif
maniek2512
Działać działa lecz wolałem się upewnić smile.gif
Czasem coś można pokręcić/ napisać za dużo itp. a mimo wszystko jakimś cudem działa tongue.gif

Dzięki wielkie za pomoc 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.