Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL]wyszukiwanie "zaawansowane"
Forum PHP.pl > Forum > Przedszkole
Larges
Witam,
prosiłbym o ukazanie metody, nie proszę o gotowe rozwiązanie ;]

Chciałbym stworzyć wyszukiwanie zaawansowane, mianowicie pobieram z tabeli MySQL pewną grupę wierszy którą można spokojnie sortować.
Chciałbym dać odwiedzającemu możliwość zawężenia tej grupy aby ułatwić mu życie.

Tutaj podam analogiczny przykład. Mamy 6 pól formularza - wszystkie typu SELECT

Przykład:

1 pole - nazwa: skad
2 pole - nazwa: dokad
3 pole - nazwa: za_ile

(trzy nam wystarczą guitar.gif )

Chodzi mi o opcję zbudowania zapytania.
Jeśli wypełni się wszystkie pola jest łatwe, jednak nie chciałbym narzucać odwiedzającemu aby musiał podawać wszystkie kryteria wyszukiwania.

Kod
mysql_query("SELECT * FROM tabela WHERE skad='" . $_POST['skad'] . "', dokad='" . $_POST['dokad'] . "', za_ile='" . $_POST['za_ile'] . "'");


Co zrobić jednak jeśli nie wszystkie pola się wybierze? Bawienie się w zapytania typu "każdy z każdym" to kupa roboty ;]

czyli
Kod
if(isset($_POST['skad'])) {
....
} else {
...
}


if, if, if, else, lese, if... + zapytania SELECT, kod byłby tragiczny.

Mam nadzieje że zrozumiecie problem ;]
Macie jakiś sposób dla mniej doświadczonego kolegi? snitch.gif
Foxx
Raczej bez ifa lub switcha się nie obejdzie, ale nie musisz za każdym razem wpisywać całego
  1. <?php
  2. mysql_query("SELECT * FROM tabela WHERE skad='" . $_POST['skad'] . "', dokad='" . $_POST['dokad'] . "', za_ile='" . $_POST['za_ile'] . "'");
  3. ?>

Zrób sobie string i doklejaj do niego kolejne fragmenty w zależności od podanych opcji:
  1. <?php
  2. $sql = "SELECT * FROM tabela WHERE 1";
  3.  
  4. if(!empty($_POST['skad'])){
  5.  $sql .= " AND skad='".$_POST['skad']."'";
  6. }
  7. // i tak do końca
  8. ?>

WHERE 1 jest tu potrzebne bo nie wiadomo, które pola zostaną wypełnione więc pierwsze po WHERE trzeba ustawić arbitralnie.
bełdzio
  1. <?php
  2. $sql = 'SELECT * FROM t WHERE ';
  3. if( $skad )
  4.   $sql .= ' skad = ' . $skad;
  5. ?>

etc smile.gif
Spawnm
  1. <?php
  2. $sql .= " AND skad='".$_POST['skad']."'";
  3. ?>

a sql injection czeka...
dodaj mysql_real_escape_string" 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.