dlaczego wywoływana drugi raz metoda zwraca wartość obecną i z pierwszego wywołania

Odpowiedz Nowy wątek
2018-11-14 18:37
0

Witam
Mam metodę która zwraca wartości (z dwóch tabel) do dropdown listy a ze względu na to że na stornie są dwie dlatego wywołuje je dwa razy. Za pierwszym razem nie mam problemu ale za drugim zwraca na początku wartości do pierwszej listy (pierwszego wywołania) i dopiero do drugiej. Czy ktoś może się spotkał z takim problemem i może mnie nakierować?

Pozostało 580 znaków

2018-11-14 18:49
0

Bez kodu nikt nic nie uraczy :(


Dziura w ścianie gdzie Panowie widzą Panie,
Rick and Morty, season 1.
Szukam tej dziury, jak coś dajcie znać gdzie jest :D

Pozostało 580 znaków

2018-11-14 18:59
0

Miałem nadzieję że to typowy przypadek przy typowych błędach amatora.
Pierwsza to jest funkcja z klasy Bd (baza danych) do pobierania danych:


public function select($sql)
    {
        $this->query = mysqli_query($this->conn,$sql);      

        while($row = mysqli_fetch_assoc($this->query)) 
        {
            $this->results[] = $row;
        }

        return (!empty($this->results)) ? $this->results : "dupa";
    } 

druga to metoda z innej klasy która ją wykorzystuje do pobrania konkretnych już danych

    public function lista($value)
    {   
        $this->lista=$this->db->select("SELECT * FROM {$value}");   
        foreach($this->lista as $nazwa)
        {   
            echo '<option value="'.$nazwa['id'].'">'.$nazwa['name'].'</option>';    
        }
    }

i na koniec samo wywołanie w pliku z widokiem

$list = new Listy();
$list->lista('rowery'); // pierwsze wywołanie zwraca : czerwony, biały, czarne
$list->lista('kolory'); // drugie wywołanie zwraca : czerwony, biały, czarne, miejski, składak, kolarzówka

pomijam oczywiście część html

Pozostało 580 znaków

2018-11-14 19:29

W metodzie select() wykorzystujesz pole klasy $this->results, którego nigdy nie czyścisz - dlatego każde wywołanie lista() zwraca także poprzednie rezultaty.

Najlepiej będzie wykorzystać tutaj zmienną lokalna:

public function select($sql)
{
  $query = mysqli_query($this->conn, $sql); // zapytanie także nie musi być wrzucane w pole, stąd tu też wrzuciłem zmienną lokalną
  $rows = [];

  while ($row = mysqli_fetch_assoc($query)) {
    $rows[] = $row;
  }

  return $rows;
}

edytowany 1x, ostatnio: Patryk27, 2018-11-14 19:30

Pozostało 580 znaków

2018-11-14 20:11
0

Wspaniale działa jak chciałem. Dzięki. W ramach rozwoju osobistego gdzie można coś poczytać o tym czyszczeniu pól? W takich sytuacjach lepsze jest czyszczenie pól czy korzystanie zmiennych lokalnych?

Pozostało 580 znaków

2018-11-14 20:13
0

gdzie można coś poczytać o tym czyszczeniu pól?

Nie wydaje mi się, aby były jakieś mega ciekawe artykuły opowiadające jak napisać $this->results = []; ;-)

W takich sytuacjach lepsze jest czyszczenie pól czy korzystanie zmiennych lokalnych?

Do takich sytuacji (tzn. wtedy, gdy chcesz coś przetworzyć i od razu zwrócić, a nie zapisywać w klasie na później) właśnie powstały zmienne lokalne.


Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0