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

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ć?

0

Bez kodu nikt nic nie uraczy :(

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

1

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;
}
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?

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.

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