Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Wyszukiwanie-potrzebna pomoc]
Forum PHP.pl > Forum > Bazy danych
Jeffu
Witam,
mam takie problem i nie wiem za bardzo jak go rozwiązać. Mam tebelę [ID] [Type] [Size1] [Size2] [Size3]. Mam formularz z polami [Type] [Size1] [Size2] [Size3]
i chcę, żeby użytkownik jeśli poda tylko "Type" będzie mógł przeszukać tabelę tylko dla tego ciągu znaków (tutaj żadnej filozofii nie ma) chcę jednak, żeby użytkownik
mógł zawężać wyniki - żeby mógł wpisać oprócz "Type" , np. "Size1" albo "Size1", "Size2" i "Size3".

Mam takie zapytanie
$zapytanie = "select * from tabela where type like '%".$type."%' ";

jeśli nie wpiszę type (formularz pusty) i dam szukaj to wypisze mi wszystkie rekordy.

Wydawało mi się załatwię to takim zapytaniem, no ale niestety chyba że mam jakiś głupi błąd no albo złą logikę obrałem :/

$zapytanie = "select * from tabela where type like '%".$type."%' and size1 like '%".$size1."%' and size2 like '%".$size2."% and size3 like '%".$size3."%";


Pozdrawiam i z góry dziękuję za pomoc


--------------------------------------------------------------------------------------


Ok mam coś takiego i działa ale to dopiero dwa pola dla pięciu warunków będzie 25 ?
Jest jakiś bardziej optymalny sposób ?



if (($type != '')&&($size_1 == 0))
{
$zapytanie = "select * from table where type like '%".$type."%'";
}

if (($size_1 != 0) && ($type =='') )
{
$zapytanie = "select * from table where size_1 = $size_1 ";
}
if ((!$type =='') && (!$size_1 == 0))
{
$zapytanie = "select * from table where type like '%".$type."%' and size_1 = $size_1 ";
}
prond
Musisz jeszcze zadbać o czyszczenie danych z ciapków, etc.

Wracając do samego podejścia do konstrukcji warunków to na szybko możesz zrobić tak:
  1. $conditions = array();
  2. if (!empty($type)) {
  3. $conditions[] = sprintf("type like '\%%s\%'",$type)
  4. }
  5. if (!empty($size_1)) {
  6. $conditions[] = sprintf("type like '\%%s\%'",$size_1)
  7. }
  8. if (!empty($size_2)) {
  9. $conditions[] = sprintf("type like '\%%s\%'",$size_2)
  10. }
  11. if (!empty($size_3)) {
  12. $conditions[] = sprintf("type like '\%%s\%'",$size_3)
  13. }
  14. if (!empty($conditions)) {
  15. $query = sprintf("SELECT * FROM tabela WHERE %s;",implode(' AND ',$conditions));
  16. }
Jeffu
Dzięki za odpowiedź. Mam pytanko - Czy przez czyszczenie z ciapek rozumiesz zastosowanie np. takiej konstrukcji uniemożliwiającej wstrzyknięcie kodu ?
$zmienna = htmlspecialchars(stripslashes(strip_tags(trim($zmienna))), ENT_QUOTES);

co do przedstawionego przez Ciebie sposobu to mam problem w połączeniu kodu z kodem klasy pager (napisanej przez nospora). Próbowałem już różnych tworów ale coś mi to nie wychodzi sad.gif. Będę wdzięczny za pomoc.

  1. <?php
  2. require_once('Pager.class.php');
  3.  
  4. include('header.php');
  5.  
  6.  
  7. mysql_connect('host', 'user', 'password') or die('Błąd połączenia z bazą danych: '.mysql_error());//host, uzytkownik, haslo
  8. mysql_select_db('baza_danych') or die('Błąd wyboru bazy danych: '.mysql_error());//nazwa bazy danych
  9.  
  10.  
  11. $formData = array(
  12. 'zmienna_1' => !isset($_GET['zmienna_1']) ? null : $_GET['zmienna_1'],
  13. 'zmienna_2' => !isset($_GET['zmienna_2']) ? null : $_GET['zmienna_2'],
  14. 'zmienna_3' => !isset($_GET['zmienna_3']) ? null : $_GET['zmienna_3'],
  15. 'zmienna_4' => !isset($_GET['zmienna_4']) ? null : $_GET['zmienna_4'],
  16. 'zmienna_5' => !isset($_GET['zmienna_5']) ? null : $_GET['zmienna_5'],
  17. );
  18.  
  19.  
  20. $type = $formData['zmienna_1'];
  21. $size_1 = $formData['zmienna_2'];
  22. $size_2 = $formData['zmienna_3'];
  23. $size_3 = $formData['zmienna_4'];
  24. $group = $formData['zmienna_5'];
  25.  
  26.  
  27. $sql = 'select count(*) from tabela';
  28.  
  29.  
  30. $result = mysql_query($sql);
  31. $row = mysql_fetch_array($result);
  32. $recordsCount = $row[0];//pobranie liczby rekordów
  33. try{
  34. $pager = new Pager('idPagera', null);
  35. $pager->SetTotalRecords($recordsCount);
  36. $pager->SetRecordsPerPage(3);
  37. $pager->Make(true);
  38. $pag = $pager->Render();
  39. $start = $pager->GetIndexRecordStart();
  40. $end = $pager->GetIndexRecordEnd();
  41. }
  42. catch (Exception $e) {
  43. echo $e->getMessage();
  44. }
  45.  
  46. //zapytanie z uwzglenieniem stronicowania
  47. $sql = 'select * from TABLE limit '.$start.','.($end - $start + 1);
  48.  
  49. //...pobranie wyników i ich wyswietlenie
  50.  
  51.  
  52. $result = mysql_query($sql);
  53. $row = array();
  54.  
  55. //wyswietlenie wynikow
  56.  
  57.  
  58.  
  59. echo $pag;//wyswietlenie pager'a
  60. ?>
  61.  
  62. </body>
  63.  
  64.  
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.