Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [Wyszukiwanie-potrzebna pomoc], jednego lub wielu pól za jednym razem
Jeffu
post
Post #1





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 17.10.2008

Ostrzeżenie: (0%)
-----


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

Ten post edytował Jeffu 18.08.2010, 19:12:29
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
prond
post
Post #2





Grupa: Zarejestrowani
Postów: 254
Pomógł: 10
Dołączył: 8.11.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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. }
Go to the top of the page
+Quote Post
Jeffu
post
Post #3





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 17.10.2008

Ostrzeżenie: (0%)
-----


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 (IMG:style_emoticons/default/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.  


Ten post edytował Jeffu 28.08.2010, 11:34:46
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 20.09.2025 - 11:44