Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z warunkami
Forum PHP.pl > Forum > PHP
new_user
Mam problem ze sprawdzeniem czy zmienna istnieje. Mam takie kody xml. Jeden plik:
  1. <stuff transactionId="10885-1268826001843">
  2. <books>
  3. <book indeks="10122500117KS">
  4. <autorzy><![CDATA[3Capelle Guy]]></autorzy>
  5. <redakcja><![CDATA[]]></redakcja>
  6. <tytul><![CDATA[Frequence jeunes 2 Encyklopedia Poradnik dla nauczyciela]]></tytul>
  7. </book>
  8. </books>

drugi plik:
  1. <cats>
  2. <cat id="239" ind="10122500117KS"/>
  3. <cat id="769" ind="02122500117KS"/>
  4. <cat id="2047" ind="10122500117KS"/>
  5. </cats>


chodzi o to ze sa tu powiazania indeks z pierwszego pliku jest powiazany z ind z drugiego plikum Mam skrypt ktory mi przetwarza te pliki i powiazania ladnie wylapuje jednak problem pojawia sie wtedy gdy np jakiegos indeksu nie bedzie w drugim pliku wtedy wyskakuja takie bledy:
Notice: Undefined offset: 0 in /home/user/public_html/projekty/import.php on line 166
Fatal error: Call to a member function attributes() on a non-object in /home/user/public_html/projekty/import.php on line 166

probowalem warunkami if i tez mi nie pomagaly jak wykryc indeks pierwszego pliku ktorego nie znalazl w drugim pliku.
Sprawdzałem tak czyli pobieram indeks
10122500117KS do $ksiazka->attributes()->indeks i nastepnie pobieram z drugiego pliku przypisujac do $kategoria2indeks = $xml_kategoria2indeks->xpath("//cats/cat[@ind='".$ksiazka->attributes()->indeks."']"); nie ma problemu jak indeks natomiast w przypadku gdy indeksu nie ma chcialbym zeby wypluwal do pliku lub na ekran indeks nastepnie pomijal go i lecial dalej po pliku.
cudny
Brak wyników.

  1. if($ksiazka) {
  2. $xml_kategoria2indeks->xpath("//cats/cat[@ind='".$ksiazka->attributes()->indeks."']");
  3. }
new_user
Cytat(cudny @ 16.03.2011, 12:31:38 ) *
Brak wyników.

  1. if($ksiazka) {
  2. $xml_kategoria2indeks->xpath("//cats/cat[@ind='".$ksiazka->attributes()->indeks."']");
  3. }


Robilem tak
  1. if (!isset($kategoria2indeks[0]->attributes()->id)) {
  2. echo "Brak wyników";
  3. }
  4. echo $kategoria2indeks[0]->attributes()->id;

i tak
  1. if (!$kategoria2indeks[0]->attributes()->id) {
  2. echo "Brak wyników";
  3. }
  4. echo $kategoria2indeks[0]->attributes()->id;

a takze tak
  1. if ($kategoria2indeks[0]->attributes()->id == '') {
  2. echo "Brak wyników";
  3. }
  4. echo $kategoria2indeks[0]->attributes()->id;

  1. if ($kategoria2indeks[0]->attributes()->id == NULL) {
  2. echo "Brak wyników";
  3. }
  4. echo $kategoria2indeks[0]->attributes()->id;


zaden z tych sposobow mi nie dzialal poprawnie.
cudny
No bo jak ci ma nie wywalić błędu jak dajesz echo tam gdzie czegoś nie ma ! Przecież ci pisałem o tym

Daj tak:

  1. if (!isset($kategoria2indeks[0]->attributes()->id)) echo "Brak wyników";
  2. else echo $kategoria2indeks[0]->attributes()->id;


A najlepiej tak:
  1. // tylko tutaj nie pamiętam czy xml zwraca ci pustego arraya czy zawsze daje [0]
  2. if (empty($kategoria2indeks)) echo "Brak wyników"; // tak
  3. if (empty($kategoria2indeks[0])) echo "Brak wyników"; // a jak tamto nie zadziała to tak
  4. if(!isset($kategoria2indeks[0])) echo "Brak wyników"; // a jak tamte dwa nie zadziałają to tak :)
  5.  
  6. else echo $kategoria2indeks[0]->attributes()->id;

new_user
Co mam tu zle ze mi nie dziala jak nalezy?
  1. $dane = '';
  2. switch ($_GET['operacja']) {
  3. case 'pelny':
  4. $xml_pelny = simplexml_load_file('2.xml');
  5. foreach ($xml_pelny->books->book as $ksiazka) {
  6. if ($ksiazka->cenaHurt == '') {
  7. $ksiazka->cenaHurt = "Brak ceny hurtowej";
  8. }
  9. $tablicaTematyki = $xml_pelny->xpath("//tematyki/itemTematyka[@symbol='".$ksiazka->typ_pub."']");
  10. $ksiazka->autorzy = preg_replace("/(\r\n|\n|\r|\t)/", "a", $ksiazka->autorzy);
  11. $ksiazka->tytul = preg_replace("/(\r\n|\n|\r|\t)/", "", $ksiazka->tytul);
  12. $ksiazka->opis = preg_replace("/(\r\n|\n|\r|\t)/", "", $ksiazka->opis);
  13. $ksiazka->wydawca = preg_replace("/(\r\n|\n|\r|\t)/", "", $ksiazka->wydawca);
  14.  
  15. $xml_kategoria2indeks = simplexml_load_file('kat2ind.xml');
  16. $kategoria2indeks = $xml_kategoria2indeks->xpath("//cats/cat[@ind='".$ksiazka->attributes()->indeks."']");
  17. $dane .= "ID;1;".$ksiazka->tytul.";";
  18.  
  19. if(!isset($kategoria2indeks[0])) echo "Brak wyników";
  20. echo $kategoria2indeks[0]->attributes()->id."<br/>";
  21.  
  22. }
  23. file_put_contents("dane.csv", $dane);
  24. }


Nadal mam tego typu komunikaty
Notice: Undefined offset: 0 in /home/user/public_html/projekty/import.php on line 168
Fatal error: Call to a member function attributes() on a non-object in /home/user/public_html/projekty/import.php on line 168
cudny
ehhh... czemu nie czytasz tego co ci piszę ;(

linia 168 to na 100% echo $kategoria2indeks[0]->attributes()->id."<br/>";

ILE RAZY PISAŁEM ŻE MA BYĆ TAM ELSE ?
  1. if(!isset($kategoria2indeks[0])) {
  2. echo "Brak wyników";
  3. } else { // TO ELSE MA BYĆ !!!!!!!!!!!
  4. echo echo $kategoria2indeks[0]->attributes()->id."<br/>";
  5. }


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.