Witam. Mam działający skrypt, który pobiera dane z pliku xml, dodaje je do bazy danych:

  1. <?php
  2.  
  3. $xml = simplexml_load_file('http://vatbook.euroutepro.com/xml2.php?fir=EPWW');
  4.  
  5. @define ("MYSQL_CONNECT_INCLUDE", "connect_db_atc.php");  
  6.  
  7. include(MYSQL_CONNECT_INCLUDE);
  8.  
  9. $query = "SELECT * FROM book";
  10. $result = mysql_query($query);
  11.  
  12. $number = mysql_numrows($result);
  13.  
  14.  
  15.   for ($i=0; $i<$number; $i++) {
  16.          
  17.      $dzis = mysql_result($result,$i,"dzis");  
  18.  
  19. $d = date(strtotime($dzis));
  20. $d1 = date("Y-m-d");
  21.  
  22. }
  23.  foreach ( $xml->atcs->booking as $key => $value )  
  24.  {
  25.  
  26. $a= date(strtotime($value->time_start));
  27. $c1= date("Y-m-d" , $a);
  28. $b= date(strtotime($value->time_end));
  29. $a1= date("H:i",$a+7200);
  30. $b1= date("H:i",$b+7200);
  31.  
  32. $update_atc = "UPDATE book SET atc='$value->callsign', data = '$c1', od = '$a1', do = '$b1', nazwisko = '$value->name' , dzis = '$d1'  where (atc = '$value->callsign'  and '$c1' = '$d1') limit 1";
  33.  
  34. $result = mysql_query($update_atc);
  35.  
  36. }
  37.  
  38. ?>




Tabela jest uaktualniona.

Mam też kod, który mi to ładnie wyświetla i zarazem odświeża tebelę, w razie gdyby weszły zmiany:



  1. <?php include("http://cassubian.pl/atctab2a.php") ?>
  2.  
  3. <?php
  4.  
  5.  
  6.  
  7.  
  8. mysql_connect("localhost","blabla","blabla");
  9.  
  10.  
  11. mysql_select_db("csb_atc") or die("Cassubian VA database error niestety.");
  12.  
  13. $query = "SELECT * FROM book WHERE data = curdate() ";  
  14. $result=mysql_query($query);
  15. $num=mysql_numrows($result);
  16.  
  17.  
  18. if ($num > 0 )
  19. {
  20.  
  21.  
  22.   print "<p><table id='tabka' bgcolor=4682B4 width=180  border=0  align=center>";  
  23.   print "<td colspan='3' bgcolor=000000 width=35% height=18 align=center><font face=Arial color=#ffffff size=3><b>ATC na dziś (LT)</b></font>";
  24. print "</tr>";
  25. print "<td bgcolor=FFFFFF width=100 height=18 align=center><font face=Arial color=#000000 size=2><b>Pozycja</b></font></td>";
  26.  
  27.   print "<td bgcolor=FFFFFF width=40 height=18 align=center><font face=Arial color=#000000 size=2><b>Od</b></font></td>";
  28.   print "<td bgcolor=FFFFFF width=40 height=18 align=center><font face=Arial color=#000000 size=2><b>Do</b></font></td></p>";
  29.  
  30.   print "</tr>";
  31.  
  32.  
  33. for ($i=0; $i<$num; $i++) {
  34.    
  35.  
  36.  
  37. $atc = mysql_result($result,$i,"atc");          
  38. $od = mysql_result($result,$i,"od");
  39.           $do = mysql_result($result,$i, "do");
  40.           $vatco = mysql_result($result,$i, "nazwisko");
  41.          
  42.  
  43. print "<tr>";
  44.  
  45. print "<td width=80 height=18 align=center><font face=Arial size=2 color=#FFFFFF >$atc</font></td>";
  46.          
  47.           print "<td width=40 height=18 align=center><font face=Arial size=2 color=#FFFFFF >$od</font></td>";
  48.           print "<td width=40 height=18 align=center><font face=Arial size=2 color=#FFFFFF >$do</font></td>";
  49.  
  50. }}
  51.  
  52.  
  53. elseif ($num < 1 )
  54. {
  55.  
  56. //* Print header */
  57.   print "<p><table id='tabka' bgcolor=4682B4 width=180  border=0  align=center>";  
  58.   print "<td colspan='3' bgcolor=000000 width=35% height=18 align=center><font face=Arial color=#ffffff size=3><b>ATC na dziś (LT)</b></font>";
  59. print "</tr>";
  60. print "<td bgcolor=FFFFFF width=100 height=18 align=center><font face=Arial color=#000000 size=2><b>Pozycja</b></font></td>";
  61.  
  62.   print "<td bgcolor=FFFFFF width=40 height=18 align=center><font face=Arial color=#000000 size=2><b>Od</b></font></td>";
  63.   print "<td bgcolor=FFFFFF width=40 height=18 align=center><font face=Arial color=#000000 size=2><b>Do</b></font></td></p>";
  64.  
  65.   print "</tr>";
  66.  
  67. }
  68. echo "</table>";
  69.  
  70.  
  71. php?>


Opis problemu

Może się zdarzyć, że w pliku XML pojawią się dwie wartości
  1. atc='$value->callsign'
takie same, np. EPWW_CTR, ale inne będą godziny
  1. od = '$a1', do = '$b1'
lub nazwiska itd., dla obydwu (lub więcej) wpisów.

W jaki sposób poprawić kod, by jeśli taka sytuacja wystąpi, nie pokazywało jedynie jednego wpisu, jak to mam miejsce w obecnie? Dodam, że struktura tabeli wygląda następująco (fragment)?



Czy może należałby użyć CONCAT, INSERT a może w ogóle inaczej wszystko przemyśleć?

Dzięki z góry za odpowiedź!

EDIT:

Dodam, że stworzyłem też skrypt z insertem, ale problem wtedy był taki, że każdorazowo dokładało wpisy, które potem dublowały się i potrajały w ostatecznie wyświetlanej tabeli. Jeśli dałem 'limit 1', występował opisany wyżej problem, czyli wyświetlana była jedynie najnowsza pozycja.