Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Porównanie xml z bazą
Forum PHP.pl > Forum > PHP
lomki
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ć.
Kasyx
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. 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 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 smile.gif
lomki
OK problem sort out 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ł...
Kasyx
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.
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.