Jak wyświetlić wyniki wyszukiwania na innej podstronie ?

0

Cześć! W belce nawigacyjnej strony A mam pole służące do wyszukiwania innych użytkowników. Po wpisaniu nazwy użytkownika, jego dane powinni być wyświetlane na innej podstronie. Niestety zamiast wyników pojawia się komunikat** Warning: Undefined array key "search" in**. Może ktoś podpowie gdzie jest błąd, bo szersze nie mam pojęcia.

<form class="form-inline " method="post">
<div class="md-form active-cyan active-cyan-2">
  <input class="form-control mr-3  mr-3" type="text" name="search" placeholder="Wyszukaj" aria-label="Search">
</div>
<button class="btn btn-outline-light my-2 my-sm-0 mr-5" type="submit" name="sub"><i class="fas fa-search" aria-hidden="true"></i></button>
 </form>


	public function wyszukaj()
	{
		$val = trim($this->data['search']);

		if(empty($val)){
			echo "Brak wyników";
		}else
		{
		$sql = $this->database->connect()->prepare("SELECT id, first_name, last_name, avatar FROM user where first_name like :first_name or last_name like :last_name");
		
		$val = "%$val%";
		 $sql->bindParam(':first_name',$val, PDO::PARAM_STR);
		 $sql->bindParam(':last_name',$val, PDO::PARAM_STR);
            $sql->execute();

          if($sql->rowCount())
		  {
         while ($row = $sql->fetch())
		 {
			 echo "<div class='rounded p-3 d-flex align-items-center d-flex justify-content-between'>";
			 echo "<div id='qua' class='d-flex align-items-center '>";
			  echo "<div class='abc mr-3'><img src='".$row['avatar']."' height='60px' width='60px'></div>";
			 echo "<div class='xyz font-weight-bold mr-1'>".$row['first_name']."</div>";
			 echo "<div class='fgh font-weight-bold'>".$row['last_name']."</div>";
			 echo "</div>";
			 echo "<div class='d-flex justify-content-end'>";
			 echo "<div>";
			echo "<button class='btn btn-danger mr-3'>Dodaj</button>";
			echo "</div>";
			 echo "<div>";
			echo "<a href='profil.php?id=".$row['id']."'><button class='btn btn-info'><i class='fas fa-eye'></i></button></a>";
			echo "</div>";
			echo "</div>";
			 echo "</div>";
		 }
		  }else
		  {
			echo"<div class='text-danger '>";
            echo "Brak wyników";
			echo "</div>";
		  }
		}
		

	}
}
0

Tak trudno zaleźć 'search' w rzekomo własnym kodzie ?

Brzydziej tego nie dało się napisać

1

Na podstawie tego co wkleiłeś to nie bardzo wiadomo o co chodzi.
Masz tutaj wywołanie tego klucza:
trim($this->data['search'])
Czyli w obiekcie stworzonym jako instancja bliżej nie określonej klasy to pole data powinno być uzupełnione stosownymi danymi.

1

A ja dam najprostszą poradę :) tam gdzie odnosisz się do indeksu search - sprawdz czy takowy istnieje

if (isset($myArray['search'])){
    doSomething();
}

[edit]
Dodam jeszcze, że skoro szukajka jest na górze każdej strony, a wyniki szukania są prezentowane na jakiejś konkretnej stronie, to może warto uzupełnić formularz o atrybut "action"?

0

@jurek1980:
To jest formularz znajdujący się w belce nawigacyjnej, na każdej podstronie.

<form class="form-inline " method="post">
<div class="md-form active-cyan active-cyan-2">
  <input class="form-control mr-3  mr-3" type="text" name="search" placeholder="Wyszukaj" aria-label="Search">
</div>
<button class="btn btn-outline-light my-2 my-sm-0 mr-5" type="submit" name="sub"><i class="fas fa-search" aria-hidden="true"></i></button>
 </form>

Na stronie A mam załączony plik z funkcją, którą dałem wyżej, oraz jej obiekt. Jeśli nacisnę przycisk 'sub' zostanę przeniesiony do podstrony.

require_once('klasy/search.php');
$searUser = new search($object, $_POST);
 if(isset($_POST['sub']))
 {

	header('location: result.php');
 }

Na tej podstronie mam załączony plik z funkcją, oraz tworzę obiekt klasy i wywołuję jej funkcję.

	$searUser = new search($object, $_POST);
	 $metoda = $searUser->wyszukaj();

To jest cały kod.

2

Jeśli nacisnę przycisk 'sub' zostanę przeniesiony do podstrony. Czy mógłbyś wskazać w tym kodzie, w którym miejscu przenosisz się ze strony A na inną stronę? Bo w tej chwili z tego kodu, nic takiego nie wynika.

0

@axelbest:

 if(isset($_POST['sub']))
 {

    header('location: result.php');
 }
2

Ok, to jeszcze raz :D

<form class="form-inline " method="post">
<div class="md-form active-cyan active-cyan-2">
  <input class="form-control mr-3  mr-3" type="text" name="search" placeholder="Wyszukaj" aria-label="Search">
</div>
<button class="btn btn-outline-light my-2 my-sm-0 mr-5" type="submit" name="sub"><i class="fas fa-search" aria-hidden="true"></i></button>
 </form>

to jest Twój formularz. Doklejany na każdej stronie. Czy razem z tym formularzem zawarty jest ten kod?

 if(isset($_POST['sub']))
 {
    header('location: result.php');
 }

Anyway....moim zdaniem niepotrzebnie kombinujesz z tym przekierowaniem, bo zrobienie przekierowania gubi CI tablicę POST. Nie możesz po prostu dać result.php jako atrybut action w formularzu?

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