Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Porównanie xml z bazą, Problem parsowania danych
lomki
post
Post #1





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 20.12.2009

Ostrzeżenie: (0%)
-----


Witam serdecznie, zetknąłem się z pewnym problemem, otóż: Mam bazę danych, napisałem skrypt który wyświetla wszystko z tej bazy oto on nic nadzwyczajnego.
Kod
<?php


$connection = @mysql_connect('localhost', 'root', 'domek')

or die('Brak połączenia z serwerem MySQL.<br />Bład: '.mysql_error());

echo "Udało się połaczyć z serwerem!<br />";

$db = @mysql_select_db('bazka', $connection)

or die('Nie mogę połączyć się z bazą danych<br />Błąd: '.mysql_error());

echo "Udało się polaczyć z baza dancych!";
echo "</br>";


$wynik = mysql_query("SELECT * FROM dane")
or die('Błąd zapytania');


if(mysql_num_rows($wynik) > 0) {
echo "<table cellpadding=\"2\" border=1>";
    while($r = mysql_fetch_assoc($wynik)) {
        echo "<tr>";
        echo "<td>".$r['IMIE']."</td>";
        echo "<td>".$r['NAZWISKO']."</td>";
      
        echo "</tr>";
    }
    echo "</table>";
}


Następnie posiadam plik xml z jakąś tam strukturą, napisałem do niego parser żeby wyciągał z niego nazwiska i imiona ogólnie pole to to: <Nazwa1>Jan Nowak</Nazwa1>

Oto kod parsera:

Kod
$dokument = DOMDocument::load('plik.xml');
$autorzy=$dokument->getElementsByTagName('NAZWA1');
foreach ($autorzy as $autor) {
print$autor->nodeValue."\n";

echo "</br>";
}


Dodam że działa bez zarzutu... Ale dla mnie tu zaczynają się schody... Chcę aby te nazwiska, które są w bazie danych i te same co są w xml (w bazie jest Nowak i w xml jest Nowak) się np podświetliły w tabeli, podejrzewam że trzeba jakoś wyciągać i porównywać stringi z tablicy, ale moja wiedza się tu kończy,
meczę się dzień i nie wiem jak się za to zabrać.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
Kasyx
post
Post #2





Grupa: Zarejestrowani
Postów: 45
Pomógł: 7
Dołączył: 29.04.2009
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Do głowy przychodzą mi dwa sposoby.

1) Tak trywialnie
Zapisz sobie dane w dwóch tablicach.
Przeleć jedną z tablic foreach'em i sprawdzaj czy dana wartość nie znajduje się w drugiej z tablic funkcją in_array
Jeśli się znajduje, to pokoloruj. (IMG:style_emoticons/default/smile.gif)

2) Według mnie lepiej:
Zapisuj dane w jednej tablicy, albo jak masz je w dwóch to połącz array_merge
Posortuj te tablice w odpowiednim porządku. Zapewne i tak musiałbyś to robić wyświetlając listę nazwisk (IMG:style_emoticons/default/smile.gif)
Idź po kolei przez całą tablicę w podobnym stylu jak przedstawiony poniżej:
  1. $i = 0;
  2.  
  3. while( true )
  4. {
  5. //warunek wyjscia z petli
  6. if( empty($tablica[$i]) )
  7. break;
  8.  
  9. if( $tablica[$i] != $tablica[($i+1)])
  10. {
  11. dopiszNormalnie($tablica[$i]);
  12. ++$i; //idziemy do kolejnego rekordu
  13. } else
  14. {
  15. dopiszPokolorowane($tablica[$i]);
  16. $i+=2; //dwa rekordy dalej, bo sie powtarzaja :)
  17. }
  18. }


mam nadzieję, że kod jest zrozumiały i przejrzysty (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
lomki
post
Post #3





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 20.12.2009

Ostrzeżenie: (0%)
-----


OK problem sort out (IMG:style_emoticons/default/smile.gif) dzięki ... ale mam inny kłopot tzn. mam linie kodu usuwającą z bazy danych:
  1. Łączymy się z serwerem i bazą
  2.  
  3. $ins = @mysql_query("DELETE FROM dane WHERE NR_UMOWY='$NR_UMOWY'");
  4.  
  5. if($ins) echo "Rekord został usunięty poprawnie";
  6. else echo "Błąd nie udało się usunac rekordu";


Wszystko niby ok usuwa wiersze po wpisaniu w inpucie nr umowy ale jeśli wpiszę jakiś zmyslny nr którego nie ma w bazie to też wyskoczy komunikat
"Rekord został usunięty poprawnie"; mimo że nic nie usunał...
Go to the top of the page
+Quote Post
Kasyx
post
Post #4





Grupa: Zarejestrowani
Postów: 45
Pomógł: 7
Dołączył: 29.04.2009
Skąd: Kraków

Ostrzeżenie: (0%)
-----


usuń @ sprzed mysql_query i zobacz czy wygeneruje Ci błąd.
nie przypisuj nic pod wynik zapytania, bo nie ma to sensu. Zamiast tego użyj mysql_affected_rows, który powie Ci ile rekordów zostało usuniętych. Czyli:

  1. mysql_query("DELETE FROM dane WHERE NR_UMOWY='$NR_UMOWY'") or die(mysql_error());
  2.  
  3. echo 'Usunieto '.mysql_affected_rows().' rekordów';


Taka konstrukcja da Ci pełen obraz problemu. W wypadku błędnego zapytania dostaniesz errora, a w innych przypadkach zobaczysz ile rekordów usunąłeś. Jeśli 0, to musisz się zastanowić nad poprawnością zapytania.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 24.12.2025 - 07:21