Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Nie działa zwraca NULL
Forum PHP.pl > Forum > Przedszkole
bikebog
Witam,
napisałem skrypt, który niestety nie działa tak jak bym chciał. Po wpisaniu jednego lub więcej z warunków powinny pokazać się wyniki wyszukiwania a tu nic? Proszę o pomoc.

  1. <?
  2. $Grzyb = strtolower($_POST['Grzyb']);
  3. $GrzybLac = $_POST['GrzybLac'];
  4. $Wystepowanie = $_POST['Wystepowanie'];
  5.  
  6. if(!empty($Grzyb)) $warunki[] = $Grzyb == strpos($grzyb->Grzyb, $Grzyb);
  7. if(!empty($GrzybLac)) $warunki[] = $GrzybLac == $grzyb->GrzybLac;
  8. if(!empty($Wystepowanie)) $warunki[] = $Wystepowanie == $grzyb->Wystepowanie;
  9.  
  10. if(!empty($Wystepowanie) or !empty($GrzybLac) or !empty($Grzyb)) {
  11. $warunek = implode(' && ', $warunki);
  12. //var_dump($warunek);
  13. }
  14.  
  15. $a = 1;
  16. $f = file_get_contents("grzyby.xml");
  17. $xml = simplexml_load_string($f);
  18. foreach($xml->Job as $grzyb)
  19. {
  20.  
  21. if($warunek){
  22. echo $a++.'<br>';
  23. echo "Grzyb:".$grzyb->Grzyb.'<br>';
  24. echo "Nazwa łacińska:".$grzyb->GrzybLac.'<br>';
  25. echo "Występowanie:".$grzyb->Wystepowanie.'<br>';
  26.  
  27. }
  28. }
  29. ?>



Może ktoś pomoże? party.gif
nexis
A możesz wyjaśnić co to robi?

  1. <?php
  2. if(!empty($Grzyb)) $warunki[] = $Grzyb == strpos($grzyb->Grzyb, $Grzyb);
  3. if(!empty($GrzybLac)) $warunki[] = $GrzybLac == $grzyb->GrzybLac;
  4. if(!empty($Wystepowanie)) $warunki[] = $Wystepowanie == $grzyb->Wystepowanie;
  5. ?>
bikebog
No właśnie zależało mi by za pomocą funkcji implode()" title="Zobacz w manualu PHP" target="_manual złożyć warunek, który następnie pojawi się tu:
  1. <?php
  2. if($warunek){
  3. echo $a++.'<br>';
  4. echo "Grzyb:".$grzyb->Grzyb.'<br>';
  5. echo "Nazwa łacińska:".$grzyb->GrzybLac.'<br>';
  6. echo "Występowanie:".$grzyb->Wystepowanie.'<br>';
  7.  
  8. }
  9. ?>

Ma to na celu wyświetlenie wyłącznie pasujących rekordów.



Tylko wartość jaką otrzymuję to zera.
zeulus
Ekhmmm... nooo taaaak....

To i cała reszta z tych trzech warunków jest dość bez sensu.
  1. <?php
  2. if(!empty($GrzybLac)) $warunki[] = $GrzybLac == $grzyb->GrzybLac;
  3. ?>


1) używasz obiektu $grzyb, którego jeszcze nie stworzyłeś, więc porównanie, jeżeli ruszy, zwróci bzdury
2) porównanie zwróci wartość boolean, czyli true albo false, nic innego, zatem Twoja tablica $warunki = array(false,false,false)

  1. <?php
  2. $warunek = implode(' && ', $warunki);
  3. ?>

implode" title="Zobacz w manualu PHP" target="_manual - poczytaj co przyjmuje za argumenty i co zwraca. Ponieważ tutaj będziesz miał konwersję typów to twój warunek będzie wyglądał bezsensownie jak np. "0 && 0 && 0".

  1. <?php
  2. if($warunek){
  3. ...
  4. ?>

To na pewno nie zadziała jakbyś sobie wymarzył -> implode zwraca string, jeżeli jeszcze nie doczytałeś, $warunek zawiera powiedzmy "0 && 0 && 0" więc masz if("0 && 0 && 0") { ...

Możnaby zrobić to w taki sposób, że zapisujesz warunki jako stringi:
  1. <?php
  2. if(!empty($GrzybLac)) $warunki[] = '$GrzybLac == $grzyb->GrzybLac';
  3. ...
  4. $warunek = implode(' && ', $warunki);
  5. ....
  6. if(eval($warunek)) {
  7. ...
  8. ?>


Nie jest to elegancki sposób, raczej nie powinno się do takich rzeczy używać eval(), poczytaj sobie więcej na temat tej funkcji w manualu eval" title="Zobacz w manualu PHP" target="_manual

Jeszcze jedno, file_get_contents i simplexml_load_string możesz skrócić do simplexml_load_file" title="Zobacz w manualu PHP" target="_manual
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.